From ea68bfe2b2e88dbd16958f090b747c9172bc6eca Mon Sep 17 00:00:00 2001 From: Tony Lykke Date: Mon, 19 Aug 2024 10:34:32 -0400 Subject: [PATCH] include timestamp in samples returned by MultiProcessCollector._accumulate_metrics --- prometheus_client/multiprocess.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/prometheus_client/multiprocess.py b/prometheus_client/multiprocess.py index 7021b49a..76c81023 100644 --- a/prometheus_client/multiprocess.py +++ b/prometheus_client/multiprocess.py @@ -92,10 +92,11 @@ def _accumulate_metrics(metrics, accumulate): sample_timestamps = defaultdict(float) buckets = defaultdict(lambda: defaultdict(float)) samples_setdefault = samples.setdefault + generate_pidless_key = lambda x, y: (x, tuple(l for l in y if l[0] != 'pid')) for s in metric.samples: name, labels, value, timestamp, exemplar = s if metric.type == 'gauge': - without_pid_key = (name, tuple(l for l in labels if l[0] != 'pid')) + without_pid_key = generate_pidless_key(name, labels) if metric._multiprocess_mode in ('min', 'livemin'): current = samples_setdefault(without_pid_key, value) if value < current: @@ -150,7 +151,13 @@ def _accumulate_metrics(metrics, accumulate): samples[(metric.name + '_count', labels)] = acc # Convert to correct sample format. - metric.samples = [Sample(name_, dict(labels), value) for (name_, labels), value in samples.items()] + timestamped_samples = [] + for (name_, labels), value in samples.items(): + without_pid_key = generate_pidless_key(name_, labels) + timestamped_samples.append( + Sample(name_, dict(labels), value), sample_timestamps[without_pid_key] + ) + metric.samples = timestamped_samples return metrics.values() def collect(self):