Skip to content

Commit

Permalink
comment out potentially unecessary function
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewqian2001datadog committed Jun 28, 2024
1 parent cce06f0 commit 6ff91cb
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 98 deletions.
80 changes: 43 additions & 37 deletions datadog/dogstatsd/metrics.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from threading import Lock
# TODO: potentially add locks
# from threading import Lock


class MetricAggregator(object):
Expand All @@ -10,8 +11,9 @@ def __init__(self, name, tags, rate):
def aggregate(self, value):
raise NotImplementedError("Subclasses should implement this method.")

def flush_unsafe(self):
raise NotImplementedError("Subclasses should implement this method.")
# TODO: potentially add this function
# def flush_unsafe(self):
# raise NotImplementedError("Subclasses should implement this method.")


class CountMetric(MetricAggregator):
Expand All @@ -22,14 +24,15 @@ def __init__(self, name, value, tags, rate):
def aggregate(self, v):
self.value += v

def flush_unsafe(self):
return {
"metric_type": "count",
"name": self.name,
"tags": self.tags,
"rate": self.rate,
"ivalue": self.value,
}
# TODO: potentially add this function
# def flush_unsafe(self):
# return {
# "metric_type": "count",
# "name": self.name,
# "tags": self.tags,
# "rate": self.rate,
# "ivalue": self.value,
# }


class GaugeMetric(MetricAggregator):
Expand All @@ -40,38 +43,41 @@ def __init__(self, name, value, tags, rate):
def aggregate(self, v):
self.value = v

def flush_unsafe(self):
return {
"metric_type": "gauge",
"name": self.name,
"tags": self.tags,
"rate": self.rate,
"fvalue": self.value,
}
# TODO: potentially add this function
# def flush_unsafe(self):
# return {
# "metric_type": "gauge",
# "name": self.name,
# "tags": self.tags,
# "rate": self.rate,
# "fvalue": self.value,
# }


class SetMetric(MetricAggregator):
def __init__(self, name, value, tags, rate):
super(SetMetric, self).__init__(name, tags, rate)
self.data = set()
self.data.add(value)
self.lock = Lock()
# TODO: potentially locks
# self.lock = Lock()

def aggregate(self, v):
with self.lock:
self.data.add(v)

def flush_unsafe(self):
with self.lock:
if not self.data:
return []
return [
{
"metric_type": "set",
"name": self.name,
"tags": self.tags,
"rate": self.rate,
"svalue": value,
}
for value in self.data
]
# with self.lock:
# self.data.add(v)
self.data.add(v)

# def flush_unsafe(self):
# with self.lock:
# if not self.data:
# return []
# return [
# {
# "metric_type": "set",
# "name": self.name,
# "tags": self.tags,
# "rate": self.rate,
# "svalue": value,
# }
# for value in self.data
# ]
122 changes: 61 additions & 61 deletions tests/unit/dogstatsd/test_metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from datadog.dogstatsd.metrics import CountMetric, GaugeMetric, SetMetric

class TestMetrics(unittest.TestCase):

# TODO: potentially test flush_unsafe and locks
def test_new_count_metric(self):
c = CountMetric("test", 21, ["tag1", "tag2"], 1)
self.assertEqual(c.value, 21)
Expand All @@ -19,22 +19,22 @@ def test_count_metric_aggregate(self):
self.assertEqual(c.tags, ["tag1", "tag2"])
self.assertEqual(c.rate, 1.0)

def test_flush_unsafe_count_metric(self):
c = CountMetric("test", 10, ["tag1", "tag2"], 1)
m = c.flush_unsafe()
self.assertEqual(m['metric_type'], 'count')
self.assertEqual(m['ivalue'], 10)
self.assertEqual(m['name'], "test")
self.assertEqual(m['tags'], ["tag1", "tag2"])
self.assertEqual(m['rate'], 1)

c.aggregate(20)
m = c.flush_unsafe()
self.assertEqual(m['metric_type'], 'count')
self.assertEqual(m['ivalue'], 30)
self.assertEqual(m['name'], "test")
self.assertEqual(m['tags'], ["tag1", "tag2"])
self.assertEqual(m['rate'], 1.0)
# def test_flush_unsafe_count_metric(self):
# c = CountMetric("test", 10, ["tag1", "tag2"], 1)
# m = c.flush_unsafe()
# self.assertEqual(m['metric_type'], 'count')
# self.assertEqual(m['ivalue'], 10)
# self.assertEqual(m['name'], "test")
# self.assertEqual(m['tags'], ["tag1", "tag2"])
# self.assertEqual(m['rate'], 1)

# c.aggregate(20)
# m = c.flush_unsafe()
# self.assertEqual(m['metric_type'], 'count')
# self.assertEqual(m['ivalue'], 30)
# self.assertEqual(m['name'], "test")
# self.assertEqual(m['tags'], ["tag1", "tag2"])
# self.assertEqual(m['rate'], 1.0)

def test_new_gauge_metric(self):
g = GaugeMetric("test", 10, ["tag1", "tag2"], 1)
Expand All @@ -51,22 +51,22 @@ def test_gauge_metric_aggregate(self):
self.assertEqual(g.tags, ["tag1", "tag2"])
self.assertEqual(g.rate, 1.0)

def test_flush_unsafe_gauge_metric(self):
g = GaugeMetric("test", 10, ["tag1", "tag2"], 1)
m = g.flush_unsafe()
self.assertEqual(m['metric_type'], 'gauge')
self.assertEqual(m['fvalue'], 10)
self.assertEqual(m['name'], "test")
self.assertEqual(m['tags'], ["tag1", "tag2"])
self.assertEqual(m['rate'], 1)

g.aggregate(20)
m = g.flush_unsafe()
self.assertEqual(m['metric_type'], 'gauge')
self.assertEqual(m['fvalue'], 20)
self.assertEqual(m['name'], "test")
self.assertEqual(m['tags'], ["tag1", "tag2"])
self.assertEqual(m['rate'], 1)
# def test_flush_unsafe_gauge_metric(self):
# g = GaugeMetric("test", 10, ["tag1", "tag2"], 1)
# m = g.flush_unsafe()
# self.assertEqual(m['metric_type'], 'gauge')
# self.assertEqual(m['fvalue'], 10)
# self.assertEqual(m['name'], "test")
# self.assertEqual(m['tags'], ["tag1", "tag2"])
# self.assertEqual(m['rate'], 1)

# g.aggregate(20)
# m = g.flush_unsafe()
# self.assertEqual(m['metric_type'], 'gauge')
# self.assertEqual(m['fvalue'], 20)
# self.assertEqual(m['name'], "test")
# self.assertEqual(m['tags'], ["tag1", "tag2"])
# self.assertEqual(m['rate'], 1)

def test_new_set_metric(self):
s = SetMetric("test", "value1", ["tag1", "tag2"], 1)
Expand All @@ -84,34 +84,34 @@ def test_set_metric_aggregate(self):
self.assertEqual(s.tags, ["tag1", "tag2"])
self.assertEqual(s.rate, 1)

def test_flush_unsafe_set_metric(self):
s = SetMetric("test", "value1", ["tag1", "tag2"], 1)
m = s.flush_unsafe()

self.assertEqual(len(m), 1)
self.assertEqual(m[0]['metric_type'], 'set')
self.assertEqual(m[0]['svalue'], "value1")
self.assertEqual(m[0]['name'], "test")
self.assertEqual(m[0]['tags'], ["tag1", "tag2"])
self.assertEqual(m[0]['rate'], 1)

s.aggregate("value1")
s.aggregate("value2")
m = s.flush_unsafe()

m = sorted(m, key=lambda x: x['svalue'])

self.assertEqual(len(m), 2)
self.assertEqual(m[0]['metric_type'], 'set')
self.assertEqual(m[0]['svalue'], "value1")
self.assertEqual(m[0]['name'], "test")
self.assertEqual(m[0]['tags'], ["tag1", "tag2"])
self.assertEqual(m[0]['rate'], 1)
self.assertEqual(m[1]['metric_type'], 'set')
self.assertEqual(m[1]['svalue'], "value2")
self.assertEqual(m[1]['name'], "test")
self.assertEqual(m[1]['tags'], ["tag1", "tag2"])
self.assertEqual(m[1]['rate'], 1)
# def test_flush_unsafe_set_metric(self):
# s = SetMetric("test", "value1", ["tag1", "tag2"], 1)
# m = s.flush_unsafe()

# self.assertEqual(len(m), 1)
# self.assertEqual(m[0]['metric_type'], 'set')
# self.assertEqual(m[0]['svalue'], "value1")
# self.assertEqual(m[0]['name'], "test")
# self.assertEqual(m[0]['tags'], ["tag1", "tag2"])
# self.assertEqual(m[0]['rate'], 1)

# s.aggregate("value1")
# s.aggregate("value2")
# m = s.flush_unsafe()

# m = sorted(m, key=lambda x: x['svalue'])

# self.assertEqual(len(m), 2)
# self.assertEqual(m[0]['metric_type'], 'set')
# self.assertEqual(m[0]['svalue'], "value1")
# self.assertEqual(m[0]['name'], "test")
# self.assertEqual(m[0]['tags'], ["tag1", "tag2"])
# self.assertEqual(m[0]['rate'], 1)
# self.assertEqual(m[1]['metric_type'], 'set')
# self.assertEqual(m[1]['svalue'], "value2")
# self.assertEqual(m[1]['name'], "test")
# self.assertEqual(m[1]['tags'], ["tag1", "tag2"])
# self.assertEqual(m[1]['rate'], 1)

if __name__ == '__main__':
unittest.main()

0 comments on commit 6ff91cb

Please sign in to comment.