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.
This commit is contained in:
Andrew Morgan 2021-04-06 16:32:04 +01:00 committed by GitHub
parent 04819239ba
commit 0d87c6bd12
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 3 deletions

1
changelog.d/8926.bugfix Normal file
View File

@ -0,0 +1 @@
Prevent `synapse_forward_extremities` and `synapse_excess_extremity_events` Prometheus metrics from initially reporting zero-values after startup.

View File

@ -214,7 +214,12 @@ class GaugeBucketCollector:
Prometheus, and optimise for that case. Prometheus, and optimise for that case.
""" """
__slots__ = ("_name", "_documentation", "_bucket_bounds", "_metric") __slots__ = (
"_name",
"_documentation",
"_bucket_bounds",
"_metric",
)
def __init__( def __init__(
self, self,
@ -242,10 +247,15 @@ class GaugeBucketCollector:
if self._bucket_bounds[-1] != float("inf"): if self._bucket_bounds[-1] != float("inf"):
self._bucket_bounds.append(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) registry.register(self)
def collect(self): def collect(self):
# Don't report metrics unless we've already collected some data
if self._metric is not None:
yield self._metric yield self._metric
def update_data(self, values: Iterable[float]): def update_data(self, values: Iterable[float]):