Skip to content

Commit c7e74f3

Browse files
committed
Implement h_count in Histogram directly
Rather than relying on MultiProcessCollector to accummulate it Signed-off-by: Stefano Rivera <stefano@rivera.za.net>
1 parent 482656c commit c7e74f3

3 files changed

Lines changed: 6 additions & 5 deletions

File tree

prometheus_client/metrics.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -652,6 +652,7 @@ def _metric_init(self) -> None:
652652
self._created = time.time()
653653
bucket_labelnames = self._labelnames + ('le',)
654654
self._sum = values.ValueClass(self._type, self._name, self._name + '_sum', self._labelnames, self._labelvalues, self._documentation)
655+
self._count = values.ValueClass(self._type, self._name, self._name + '_count', self._labelnames, self._labelvalues, self._documentation)
655656
for b in self._upper_bounds:
656657
self._buckets.append(values.ValueClass(
657658
self._type,
@@ -674,6 +675,7 @@ def observe(self, amount: float, exemplar: Optional[Dict[str, str]] = None) -> N
674675
"""
675676
self._raise_if_not_observable()
676677
self._sum.inc(amount)
678+
self._count.inc(1)
677679
for i, bound in enumerate(self._upper_bounds):
678680
if amount <= bound:
679681
self._buckets[i].inc(1)

prometheus_client/multiprocess.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,6 @@ def _accumulate_metrics(metrics, accumulate):
156156
samples[labels][sample_key] = acc
157157
else:
158158
samples[labels][sample_key] = value
159-
if accumulate:
160-
samples[labels][(metric.name + '_count', labels)] = acc
161159

162160
# Convert to correct sample format.
163161
metric.samples = []

tests/test_multiprocess.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,7 @@ def add_label(key, value):
278278

279279
expected_histogram = [
280280
Sample('h_sum', labels, 6.0),
281+
Sample('h_count', labels, 2.0),
281282
Sample('h_bucket', add_label('le', '0.005'), 0.0),
282283
Sample('h_bucket', add_label('le', '0.01'), 0.0),
283284
Sample('h_bucket', add_label('le', '0.025'), 0.0),
@@ -293,7 +294,6 @@ def add_label(key, value):
293294
Sample('h_bucket', add_label('le', '7.5'), 2.0),
294295
Sample('h_bucket', add_label('le', '10.0'), 2.0),
295296
Sample('h_bucket', add_label('le', '+Inf'), 2.0),
296-
Sample('h_count', labels, 2.0),
297297
]
298298

299299
self.assertEqual(metrics['h'].samples, expected_histogram)
@@ -321,6 +321,7 @@ def add_label(key, value):
321321

322322
expected_histogram = [
323323
Sample('h_sum', {'view': 'view1'}, 6.0),
324+
Sample('h_count', {'view': 'view1'}, 2.0),
324325
Sample('h_bucket', {'view': 'view1', 'le': '0.005'}, 0.0),
325326
Sample('h_bucket', {'view': 'view1', 'le': '0.01'}, 0.0),
326327
Sample('h_bucket', {'view': 'view1', 'le': '0.025'}, 0.0),
@@ -336,8 +337,8 @@ def add_label(key, value):
336337
Sample('h_bucket', {'view': 'view1', 'le': '7.5'}, 2.0),
337338
Sample('h_bucket', {'view': 'view1', 'le': '10.0'}, 2.0),
338339
Sample('h_bucket', {'view': 'view1', 'le': '+Inf'}, 2.0),
339-
Sample('h_count', {'view': 'view1'}, 2.0),
340340
Sample('h_sum', {'view': 'view2'}, 1.0),
341+
Sample('h_count', {'view': 'view2'}, 1.0),
341342
Sample('h_bucket', {'view': 'view2', 'le': '0.005'}, 0.0),
342343
Sample('h_bucket', {'view': 'view2', 'le': '0.01'}, 0.0),
343344
Sample('h_bucket', {'view': 'view2', 'le': '0.025'}, 0.0),
@@ -353,7 +354,6 @@ def add_label(key, value):
353354
Sample('h_bucket', {'view': 'view2', 'le': '7.5'}, 1.0),
354355
Sample('h_bucket', {'view': 'view2', 'le': '10.0'}, 1.0),
355356
Sample('h_bucket', {'view': 'view2', 'le': '+Inf'}, 1.0),
356-
Sample('h_count', {'view': 'view2'}, 1.0),
357357
]
358358

359359
self.assertEqual(metrics['h'].samples, expected_histogram)
@@ -435,6 +435,7 @@ def add_label(key, value):
435435

436436
expected_histogram = [
437437
Sample('h_sum', labels, 6.0),
438+
Sample('h_count', labels, 2.0),
438439
Sample('h_bucket', add_label('le', '0.005'), 0.0),
439440
Sample('h_bucket', add_label('le', '0.01'), 0.0),
440441
Sample('h_bucket', add_label('le', '0.025'), 0.0),

0 commit comments

Comments
 (0)