Skip to content
Snippets Groups Projects
Commit 6d146e15 authored by Paul "LeoNerd" Evans's avatar Paul "LeoNerd" Evans
Browse files

Put some gauge metrics on the number of notifier listeners, and notified-on...

Put some gauge metrics on the number of notifier listeners, and notified-on objects (users, rooms, appservices)
parent 25187ab6
No related branches found
No related tags found
No related merge requests found
......@@ -19,12 +19,25 @@ from synapse.util.logutils import log_function
from synapse.util.logcontext import PreserveLoggingContext
from synapse.util.async import run_on_reactor
from synapse.types import StreamToken
import synapse.metrics
import logging
logger = logging.getLogger(__name__)
metrics = synapse.metrics.get_metrics_for(__name__)
# TODO(paul): Should be shared somewhere
def count(func, l):
"""Return the number of items in l for which func returns true."""
n = 0
for x in l:
if func(x):
n += 1
return n
class _NotificationListener(object):
""" This represents a single client connection to the events stream.
......@@ -95,6 +108,32 @@ class Notifier(object):
"user_joined_room", self._user_joined_room
)
# This is not a very cheap test to perform, but it's only executed
# when rendering the metrics page, which is likely once per minute at
# most when scraping it.
def count_listeners():
all_listeners = set()
for x in self.room_to_listeners.values():
all_listeners |= x
for x in self.user_to_listeners.values():
all_listeners |= x
for x in self.appservice_to_listeners.values():
all_listeners |= x
return len(all_listeners)
metrics.register_callback("all_listeners", count_listeners)
metrics.register_callback("rooms",
lambda: count(bool, self.room_to_listeners.values())
)
metrics.register_callback("users",
lambda: count(bool, self.user_to_listeners.values())
)
metrics.register_callback("appservices",
lambda: count(bool, self.appservice_to_listeners.values())
)
@log_function
@defer.inlineCallbacks
def on_new_room_event(self, event, extra_users=[]):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment