From f8ae3b6af60630192c7c3e519607eabcbc058e98 Mon Sep 17 00:00:00 2001 From: Brian Brazil Date: Mon, 23 Feb 2015 19:50:38 +0000 Subject: [PATCH] Make histograms with labels work --- prometheus_client/__init__.py | 5 +++-- setup.py | 2 +- tests/test_client.py | 10 ++++++++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/prometheus_client/__init__.py b/prometheus_client/__init__.py index 1847e091..c650c6d1 100644 --- a/prometheus_client/__init__.py +++ b/prometheus_client/__init__.py @@ -126,8 +126,9 @@ def _samples(self): with self._lock: metrics = self._metrics.copy() for labels, metric in metrics.items(): - for suffix, _, value in metric._samples(): - yield (suffix, dict(zip(self._labelnames, labels)), value) + series_labels = list(dict(zip(self._labelnames, labels)).items()) + for suffix, sample_labels, value in metric._samples(): + yield (suffix, dict(series_labels + list(sample_labels.items())), value) def _MetricWrapper(cls): diff --git a/setup.py b/setup.py index 5bb0fdf7..9a286d61 100644 --- a/setup.py +++ b/setup.py @@ -10,7 +10,7 @@ def read(fname): setup( name = "prometheus_client", - version = "0.0.6", + version = "0.0.7", author = "Brian Brazil", author_email = "brian.brazil@gmail.com", description = ("Python client for the Prometheus monitoring system."), diff --git a/tests/test_client.py b/tests/test_client.py index b3d42782..535f2e86 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -108,6 +108,7 @@ class TestHistogram(unittest.TestCase): def setUp(self): self.registry = CollectorRegistry() self.histogram = Histogram('h', 'help', registry=self.registry) + self.labels = Histogram('hl', 'help', ['l'], registry=self.registry) def test_histogram(self): self.assertEqual(0, self.registry.get_sample_value('h_bucket', {'le': '1.0'})) @@ -152,6 +153,15 @@ def test_setting_buckets(self): self.assertRaises(ValueError, Histogram, 'h', 'help', registry=None, buckets=[float("inf")]) self.assertRaises(ValueError, Histogram, 'h', 'help', registry=None, buckets=[3, 1]) + def test_labels(self): + self.labels.labels('a').observe(2) + self.assertEqual(0, self.registry.get_sample_value('hl_bucket', {'le': '1.0', 'l': 'a'})) + self.assertEqual(1, self.registry.get_sample_value('hl_bucket', {'le': '2.5', 'l': 'a'})) + self.assertEqual(1, self.registry.get_sample_value('hl_bucket', {'le': '5.0', 'l': 'a'})) + self.assertEqual(1, self.registry.get_sample_value('hl_bucket', {'le': '+Inf', 'l': 'a'})) + self.assertEqual(1, self.registry.get_sample_value('hl_count', {'l': 'a'})) + self.assertEqual(2, self.registry.get_sample_value('hl_sum', {'l': 'a'})) + def test_function_decorator(self): self.assertEqual(0, self.registry.get_sample_value('h_count')) self.assertEqual(0, self.registry.get_sample_value('h_bucket', {'le': '+Inf'}))