Skip to content

Commit

Permalink
Add prometheus metrics for the number of active pushers (matrix-org#7103
Browse files Browse the repository at this point in the history
)
  • Loading branch information
richvdh authored and phil-flex committed Mar 27, 2020
1 parent b911320 commit 72113c3
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 8 deletions.
1 change: 1 addition & 0 deletions changelog.d/7103.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add prometheus metrics for the number of active pushers.
12 changes: 7 additions & 5 deletions synapse/metrics/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import platform
import threading
import time
from typing import Dict, Union
from typing import Callable, Dict, Iterable, Optional, Tuple, Union

import six

Expand Down Expand Up @@ -59,10 +59,12 @@ def collect():
@attr.s(hash=True)
class LaterGauge(object):

name = attr.ib()
desc = attr.ib()
labels = attr.ib(hash=False)
caller = attr.ib()
name = attr.ib(type=str)
desc = attr.ib(type=str)
labels = attr.ib(hash=False, type=Optional[Iterable[str]])
# callback: should either return a value (if there are no labels for this metric),
# or dict mapping from a label tuple to a value
caller = attr.ib(type=Callable[[], Union[Dict[Tuple[str, ...], float], float]])

def collect(self):

Expand Down
5 changes: 3 additions & 2 deletions synapse/metrics/background_process_metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import threading
from asyncio import iscoroutine
from functools import wraps
from typing import Dict, Set

import six

Expand Down Expand Up @@ -80,13 +81,13 @@
# map from description to a counter, so that we can name our logcontexts
# incrementally. (It actually duplicates _background_process_start_count, but
# it's much simpler to do so than to try to combine them.)
_background_process_counts = {} # type: dict[str, int]
_background_process_counts = {} # type: Dict[str, int]

# map from description to the currently running background processes.
#
# it's kept as a dict of sets rather than a big set so that we can keep track
# of process descriptions that no longer have any active processes.
_background_processes = {} # type: dict[str, set[_BackgroundProcess]]
_background_processes = {} # type: Dict[str, Set[_BackgroundProcess]]

# A lock that covers the above dicts
_bg_metrics_lock = threading.Lock()
Expand Down
24 changes: 23 additions & 1 deletion synapse/push/pusherpool.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,16 @@
# limitations under the License.

import logging
from collections import defaultdict
from typing import Dict, Tuple, Union

from twisted.internet import defer

from synapse.metrics import LaterGauge
from synapse.metrics.background_process_metrics import run_as_background_process
from synapse.push import PusherConfigException
from synapse.push.emailpusher import EmailPusher
from synapse.push.httppusher import HttpPusher
from synapse.push.pusher import PusherFactory
from synapse.util.async_helpers import concurrently_execute

Expand Down Expand Up @@ -47,7 +52,24 @@ def __init__(self, _hs):
self._should_start_pushers = _hs.config.start_pushers
self.store = self.hs.get_datastore()
self.clock = self.hs.get_clock()
self.pushers = {}

# map from user id to app_id:pushkey to pusher
self.pushers = {} # type: Dict[str, Dict[str, Union[HttpPusher, EmailPusher]]]

def count_pushers():
results = defaultdict(int) # type: Dict[Tuple[str, str], int]
for pushers in self.pushers.values():
for pusher in pushers.values():
k = (type(pusher).__name__, pusher.app_id)
results[k] += 1
return results

LaterGauge(
name="synapse_pushers",
desc="the number of active pushers",
labels=["kind", "app_id"],
caller=count_pushers,
)

def start(self):
"""Starts the pushers off in a background process.
Expand Down
2 changes: 2 additions & 0 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,9 @@ commands = mypy \
synapse/handlers/sync.py \
synapse/handlers/ui_auth \
synapse/logging/ \
synapse/metrics \
synapse/module_api \
synapse/push/pusherpool.py \
synapse/replication \
synapse/rest \
synapse/spam_checker_api \
Expand Down

0 comments on commit 72113c3

Please sign in to comment.