diff --git a/prometheus_client/metrics.py b/prometheus_client/metrics.py index 95770ebd..aea8832a 100644 --- a/prometheus_client/metrics.py +++ b/prometheus_client/metrics.py @@ -186,6 +186,11 @@ def remove(self, *labelvalues): with self._lock: del self._metrics[labelvalues] + def clear(self): + """Remove all labelsets from the metric""" + with self._lock: + self._metrics = {} + def _samples(self): if self._is_parent(): return self._multi_samples() diff --git a/tests/test_core.py b/tests/test_core.py index 5a81f122..55c88b76 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -456,6 +456,15 @@ def test_remove(self): self.assertEqual(None, self.registry.get_sample_value('c_total', {'l': 'x'})) self.assertEqual(2, self.registry.get_sample_value('c_total', {'l': 'y'})) + def test_clear(self): + self.counter.labels('x').inc() + self.counter.labels('y').inc(2) + self.assertEqual(1, self.registry.get_sample_value('c_total', {'l': 'x'})) + self.assertEqual(2, self.registry.get_sample_value('c_total', {'l': 'y'})) + self.counter.clear() + self.assertEqual(None, self.registry.get_sample_value('c_total', {'l': 'x'})) + self.assertEqual(None, self.registry.get_sample_value('c_total', {'l': 'y'})) + def test_incorrect_label_count_raises(self): self.assertRaises(ValueError, self.counter.labels) self.assertRaises(ValueError, self.counter.labels, 'a', 'b')