8000 Made restricted registries call collect() only on relevant collections. · prometheus/client_python@009d885 · GitHub
[go: up one dir, main page]

Skip to content

Commit 009d885

Browse files
committed
Made restricted registries call collect() only on relevant collections.
Signed-off-by: Pavel <pavel@lexyr.com>
1 parent e92fa05 commit 009d885

File tree

2 files changed

+27
-4
lines changed

2 files changed

+27
-4
lines changed

prometheus_client/registry.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,10 +135,20 @@ def __init__(self, names, registry):
135135
self._registry = registry
136136

137137
def collect(self):
138-
for metric in self._registry.collect():
139-
m = metric._restricted_metric(self._name_set)
140-
if m:
141-
yield m
138+
names = copy.copy(self._name_set)
139+
collectors = set()
140+
with self._registry._lock:
141+
if 'target_info' in names and self._registry._target_info:
142+
yield self._registry._target_info_metric()
143+
names.remove('target_info')
144+
for name in names:
145+
if name in self._registry._names_to_collectors:
146+
collectors.add(self._registry._names_to_collectors[name])
147+
for collector in collectors:
148+
for metric in collector.collect():
149+
m = metric._restricted_metric(self._name_set)
150+
if m:
151+
yield m
142152

143153

144154
REGISTRY = CollectorRegistry(auto_describe=True)

tests/test_core.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from concurrent.futures import ThreadPoolExecutor
44
import time
5+
from unittest.mock import MagicMock
56

67
import pytest
78

@@ -838,6 +839,18 @@ def test_target_info_restricted_registry(self):
838839
m.samples = [Sample('target_info', {'foo': 'bar'}, 1)]
839840
self.assertEqual([m], list(registry.restricted_registry(['target_info']).collect()))
840841

842+
def test_restricted_registry_does_not_call_extra(self):
843+
registry = CollectorRegistry()
844+
mock_collector = MagicMock()
845+
mock_collector.describe.return_value = [Metric('foo', 'help', 'summary')]
846+
registry.register(mock_collector)
847+
Summary('s', 'help', registry=registry).observe(7)
848+
849+
m = Metric('s', 'help', 'summary')
850+
m.samples = [Sample('s_sum', {}, 7)]
851+
self.assertEqual([m], list(registry.restricted_registry(['s_sum']).collect()))
852+
mock_collector.collect.assert_not_called()
853+
841854

842855
if __name__ == '__main__':
843856
unittest.main()

0 commit comments

Comments
 (0)
0