diff options
author | Andrew Morgan <1342360+anoadragon453@users.noreply.github.com> | 2021-04-06 16:32:04 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-06 16:32:04 +0100 |
commit | 0d87c6bd121d043d5474cc20e352794ff8cf5625 (patch) | |
tree | 26afd51df477905f6eda1cb87430ea6bc4e8e9f6 | |
parent | Add a Synapse Module for configuring presence update routing (#9491) (diff) | |
download | synapse-0d87c6bd121d043d5474cc20e352794ff8cf5625.tar.xz |
Don't report anything from GaugeBucketCollector metrics until data is present (#8926)
This PR modifies `GaugeBucketCollector` to only report data once it has been updated, rather than initially reporting a value of 0. Fixes zero values being reported for some metrics on startup until a background job to update the metric's value runs later.
-rw-r--r-- | changelog.d/8926.bugfix | 1 | ||||
-rw-r--r-- | synapse/metrics/__init__.py | 16 |
2 files changed, 14 insertions, 3 deletions
diff --git a/changelog.d/8926.bugfix b/changelog.d/8926.bugfix new file mode 100644 index 0000000000..aad7bd83ce --- /dev/null +++ b/changelog.d/8926.bugfix @@ -0,0 +1 @@ +Prevent `synapse_forward_extremities` and `synapse_excess_extremity_events` Prometheus metrics from initially reporting zero-values after startup. diff --git a/synapse/metrics/__init__.py b/synapse/metrics/__init__.py index 3b499efc07..13a5bc4558 100644 --- a/synapse/metrics/__init__.py +++ b/synapse/metrics/__init__.py @@ -214,7 +214,12 @@ class GaugeBucketCollector: Prometheus, and optimise for that case. """ - __slots__ = ("_name", "_documentation", "_bucket_bounds", "_metric") + __slots__ = ( + "_name", + "_documentation", + "_bucket_bounds", + "_metric", + ) def __init__( self, @@ -242,11 +247,16 @@ class GaugeBucketCollector: if self._bucket_bounds[-1] != float("inf"): self._bucket_bounds.append(float("inf")) - self._metric = self._values_to_metric([]) + # We initially set this to None. We won't report metrics until + # this has been initialised after a successful data update + self._metric = None # type: Optional[GaugeHistogramMetricFamily] + registry.register(self) def collect(self): - yield self._metric + # Don't report metrics unless we've already collected some data + if self._metric is not None: + yield self._metric def update_data(self, values: Iterable[float]): """Update the data to be reported by the metric |