summary refs log tree commit diff
path: root/synapse
diff options
context:
space:
mode:
authorEric Eastwood <erice@element.io>2022-08-17 04:38:05 -0500
committerGitHub <noreply@github.com>2022-08-17 10:38:05 +0100
commitc6ee9c0ee40803a9e3673c2833e5a40032e86f5a (patch)
tree291e5fff1f0a1967850e903d202457a65dcdac2b /synapse
parentTime how long it takes us to do backfill processing (#13535) (diff)
downloadsynapse-c6ee9c0ee40803a9e3673c2833e5a40032e86f5a.tar.xz
Add metrics to track rate limiter queue timing (#13544)
Diffstat (limited to 'synapse')
-rw-r--r--synapse/util/ratelimitutils.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/synapse/util/ratelimitutils.py b/synapse/util/ratelimitutils.py

index e1beaec5a3..e48324d926 100644 --- a/synapse/util/ratelimitutils.py +++ b/synapse/util/ratelimitutils.py
@@ -28,6 +28,7 @@ from synapse.logging.context import ( run_in_background, ) from synapse.logging.opentracing import start_active_span +from synapse.metrics import Histogram from synapse.util import Clock if typing.TYPE_CHECKING: @@ -36,6 +37,29 @@ if typing.TYPE_CHECKING: logger = logging.getLogger(__name__) +queue_wait_timer = Histogram( + "synapse_rate_limit_queue_wait_time_seconds", + "sec", + [], + buckets=( + 0.005, + 0.01, + 0.025, + 0.05, + 0.1, + 0.25, + 0.5, + 0.75, + 1.0, + 2.5, + 5.0, + 10.0, + 20.0, + "+Inf", + ), +) + + class FederationRateLimiter: def __init__(self, clock: Clock, config: FederationRatelimitSettings): def new_limiter() -> "_PerHostRatelimiter": @@ -178,10 +202,16 @@ class _PerHostRatelimiter: self.sleeping_requests.discard(request_id) self.ready_request_queue.pop(request_id, None) wait_span_scope.__exit__(None, None, None) + wait_timer_cm.__exit__(None, None, None) return r + # Tracing wait_span_scope = start_active_span("ratelimit wait") wait_span_scope.__enter__() + # Metrics + wait_timer_cm = queue_wait_timer.time() + wait_timer_cm.__enter__() + ret_defer.addCallbacks(on_start, on_err) ret_defer.addBoth(on_both) return make_deferred_yieldable(ret_defer)