diff --git a/synapse/metrics/metric.py b/synapse/metrics/metric.py
index 21b37748f6..5b1e9c3ddc 100644
--- a/synapse/metrics/metric.py
+++ b/synapse/metrics/metric.py
@@ -151,5 +151,12 @@ class CacheMetric(object):
def inc_misses(self, *values):
self.total.inc(*values)
+ def inc_hits_by(self, inc, *values):
+ self.hits.inc_by(inc, *values)
+ self.total.inc_by(inc, *values)
+
+ def inc_misses_by(self, inc, *values):
+ self.total.inc_by(inc, *values)
+
def render(self):
return self.hits.render() + self.total.render() + self.size.render()
diff --git a/synapse/storage/receipts.py b/synapse/storage/receipts.py
index cac1a5657e..42f4b5f78d 100644
--- a/synapse/storage/receipts.py
+++ b/synapse/storage/receipts.py
@@ -15,6 +15,7 @@
from ._base import SQLBaseStore
from synapse.util.caches.descriptors import cachedInlineCallbacks
+from synapse.util.caches import cache_counter, caches_by_name
from twisted.internet import defer
@@ -305,6 +306,8 @@ class _RoomStreamChangeCache(object):
self._room_to_key = {}
self._cache = sorteddict()
self._earliest_key = None
+ self.name = "ReceiptsRoomChangeCache"
+ caches_by_name[self.name] = self._cache
@defer.inlineCallbacks
def get_rooms_changed(self, store, room_ids, key):
@@ -321,6 +324,9 @@ class _RoomStreamChangeCache(object):
else:
result = room_ids
+ cache_counter.inc_hits_by(len(result), self.name)
+ cache_counter.inc_misses_by(len(room_ids) - len(result), self.name)
+
defer.returnValue(result)
@defer.inlineCallbacks
|