Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Add prometheus metrics for the number of active pushers #7103

Merged
merged 2 commits into from
Mar 19, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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