summary refs log tree commit diff
path: root/synapse/metrics/metric.py
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2016-06-02 11:52:32 +0100
committerErik Johnston <erik@matrix.org>2016-06-03 11:19:22 +0100
commite043ede4a2f18a47b67bf19368600183554824f7 (patch)
tree37f0f00d796f7f40fea67c81e6747eaca96b00fc /synapse/metrics/metric.py
parentMake cachedList go a bit faster (diff)
downloadsynapse-e043ede4a2f18a47b67bf19368600183554824f7.tar.xz
Small optimisation to CacheListDescriptor
Diffstat (limited to 'synapse/metrics/metric.py')
-rw-r--r--synapse/metrics/metric.py22
1 files changed, 10 insertions, 12 deletions
diff --git a/synapse/metrics/metric.py b/synapse/metrics/metric.py
index 6f82b360bc..368fc24984 100644
--- a/synapse/metrics/metric.py
+++ b/synapse/metrics/metric.py
@@ -15,7 +15,6 @@
 
 
 from itertools import chain
-from collections import Counter
 
 
 # TODO(paul): I can't believe Python doesn't have one of these
@@ -56,29 +55,30 @@ class CounterMetric(BaseMetric):
     """The simplest kind of metric; one that stores a monotonically-increasing
     integer that counts events."""
 
-    __slots__ = ("counts")
-
     def __init__(self, *args, **kwargs):
         super(CounterMetric, self).__init__(*args, **kwargs)
 
-        self.counts = Counter()
+        self.counts = {}
 
         # Scalar metrics are never empty
         if self.is_scalar():
             self.counts[()] = 0
 
     def inc_by(self, incr, *values):
-        # if len(values) != self.dimension():
-        #     raise ValueError(
-        #         "Expected as many values to inc() as labels (%d)" % (self.dimension())
-        #     )
+        if len(values) != self.dimension():
+            raise ValueError(
+                "Expected as many values to inc() as labels (%d)" % (self.dimension())
+            )
 
         # TODO: should assert that the tag values are all strings
 
-        self.counts[values] += incr
+        if values not in self.counts:
+            self.counts[values] = incr
+        else:
+            self.counts[values] += incr
 
     def inc(self, *values):
-        self.counts[values] += 1
+        self.inc_by(1, *values)
 
     def render_item(self, k):
         return ["%s%s %d" % (self.name, self._render_key(k), self.counts[k])]
@@ -132,8 +132,6 @@ class CacheMetric(object):
     This metric generates standard metric name pairs, so that monitoring rules
     can easily be applied to measure hit ratio."""
 
-    __slots__ = ("name", "hits", "total", "size")
-
     def __init__(self, name, size_callback, labels=[]):
         self.name = name