mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-05 14:04:55 -04:00
Fix cache metrics not being updated when not using the legacy exposition module. (#13717)
This commit is contained in:
parent
526f84bc2e
commit
cf11919ddd
4 changed files with 82 additions and 22 deletions
|
@ -15,9 +15,9 @@
|
|||
import logging
|
||||
from functools import wraps
|
||||
from types import TracebackType
|
||||
from typing import Awaitable, Callable, Optional, Type, TypeVar
|
||||
from typing import Awaitable, Callable, Generator, List, Optional, Type, TypeVar
|
||||
|
||||
from prometheus_client import Counter
|
||||
from prometheus_client import CollectorRegistry, Counter, Metric
|
||||
from typing_extensions import Concatenate, ParamSpec, Protocol
|
||||
|
||||
from synapse.logging.context import (
|
||||
|
@ -208,3 +208,33 @@ class Measure:
|
|||
metrics.real_time_sum += duration
|
||||
|
||||
# TODO: Add other in flight metrics.
|
||||
|
||||
|
||||
class DynamicCollectorRegistry(CollectorRegistry):
|
||||
"""
|
||||
Custom Prometheus Collector registry that calls a hook first, allowing you
|
||||
to update metrics on-demand.
|
||||
|
||||
Don't forget to register this registry with the main registry!
|
||||
"""
|
||||
|
||||
def __init__(self) -> None:
|
||||
super().__init__()
|
||||
self._pre_update_hooks: List[Callable[[], None]] = []
|
||||
|
||||
def collect(self) -> Generator[Metric, None, None]:
|
||||
"""
|
||||
Collects metrics, calling pre-update hooks first.
|
||||
"""
|
||||
|
||||
for pre_update_hook in self._pre_update_hooks:
|
||||
pre_update_hook()
|
||||
|
||||
yield from super().collect()
|
||||
|
||||
def register_hook(self, hook: Callable[[], None]) -> None:
|
||||
"""
|
||||
Registers a hook that is called before metric collection.
|
||||
"""
|
||||
|
||||
self._pre_update_hooks.append(hook)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue