Skip to content

Commit d9e3278

Browse files
committed
Add clear() method to CollectorRegistry
This commit adds a clear() method to CollectorRegistry that removes all collectors from the registry at once, reducing boilerplate when clearing registries. Fixes #1141
1 parent a854135 commit d9e3278

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

prometheus_client/registry.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,13 @@ def unregister(self, collector: Collector) -> None:
5151
del self._names_to_collectors[name]
5252
del self._collector_to_names[collector]
5353

54+
def clear(self) -> None:
55+
"""Remove all collectors from the registry."""
56+
with self._lock:
57+
self._collector_to_names.clear()
58+
self._names_to_collectors.clear()
59+
self._target_info = None
60+
5461
def _get_names(self, collector):
5562
"""Get names of timeseries the collector produces and clashes with."""
5663
desc_func = None

tests/test_core.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -946,6 +946,33 @@ def test_unregister_works(self):
946946
registry.unregister(s)
947947
Gauge('s_count', 'help', registry=registry)
948948

949+
def test_clear_works(self):
950+
registry = CollectorRegistry()
951+
g1 = Gauge('g1', 'help', registry=registry)
952+
g2 = Gauge('g2', 'help', registry=registry)
953+
c = Counter('c_total', 'help', registry=registry)
954+
955+
# Verify metrics are registered
956+
g1.set(42)
957+
g2.set(43)
958+
c.inc()
959+
self.assertEqual(42, registry.get_sample_value('g1'))
960+
self.assertEqual(43, registry.get_sample_value('g2'))
961+
self.assertEqual(1, registry.get_sample_value('c_total'))
962+
963+
# Clear the registry
964+
registry.clear()
965+
966+
# Verify all metrics are removed
967+
self.assertEqual(None, registry.get_sample_value('g1'))
968+
self.assertEqual(None, registry.get_sample_value('g2'))
969+
self.assertEqual(None, registry.get_sample_value('c_total'))
970+
971+
# Verify we can register new metrics with the same names
972+
Gauge('g1', 'help', registry=registry)
973+
Gauge('g2', 'help', registry=registry)
974+
Counter('c_total', 'help', registry=registry)
975+
949976
def custom_collector(self, metric_family, registry):
950977
class CustomCollector:
951978
def collect(self):

0 commit comments

Comments
 (0)