Skip to content

Commit e75f346

Browse files
author
Artem Batalov
committed
Minor fixes + test fixes
1 parent 259e6f8 commit e75f346

File tree

2 files changed

+28
-15
lines changed

2 files changed

+28
-15
lines changed

core/monitoring/monitoring.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from core.logging.logger_constants import KEY_NAME
55
from core.logging.logger_utils import log
66

7-
from prometheus_client import Counter, Histogram
7+
from prometheus_client import Counter, Histogram, REGISTRY
88

99

1010
def _filter_monitoring_msg(msg):
@@ -34,15 +34,23 @@ class Monitoring:
3434
HISTOGRAM = "histogram"
3535
DEFAULT_ENABLED = True
3636
DEFAULT_DISABLED_METRICS = []
37-
_monitoring_items = {
38-
COUNTER: {},
39-
HISTOGRAM: {}
40-
}
4137

4238
def __init__(self):
4339
self._enabled = self.DEFAULT_ENABLED
4440
self.disabled_metrics = self.DEFAULT_DISABLED_METRICS.copy()
4541
self.buckets = Histogram.DEFAULT_BUCKETS
42+
self._monitoring_items = {
43+
self.COUNTER: {},
44+
self.HISTOGRAM: {}
45+
}
46+
self._clean_registry()
47+
48+
@staticmethod
49+
def _clean_registry():
50+
"""При создании нового инстанса мониторинга удаляем все созданные коллекторы"""
51+
collectors = list(REGISTRY._collector_to_names.keys())
52+
for collector in collectors:
53+
REGISTRY.unregister(collector)
4654

4755
def check_enabled(self, name: str):
4856
metric_disabled = next((True for m in self.disabled_metrics if re.fullmatch(m, name)), False)
@@ -287,7 +295,7 @@ def wrap(*args, **kwargs):
287295
return decor_
288296

289297
def set_instance(self, cls):
290-
if not isinstance(self.instance, cls):
298+
if type(self.instance) != type(cls):
291299
self.instance = cls()
292300

293301
def __getattr__(self, item):

tests/core_tests/monitoring_test/test_monitoring.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,6 @@ def setUp(self):
1313
self.logger.exception = PicklableMock()
1414
self.config = PicklableMock()
1515
self.mock_rep = PicklableMock()
16-
Monitoring._monitoring_items = {
17-
Monitoring.COUNTER: {},
18-
Monitoring.HISTOGRAM: {}
19-
}
2016
self.monitoring = Monitoring()
2117
self.monitoring.apply_config({})
2218

@@ -75,19 +71,28 @@ def test_monitoring_init(self):
7571
from core.monitoring.monitoring import monitoring
7672

7773
class MyCustomMonitoring(Monitoring):
78-
pass
74+
def got_histogram(self, name, description=None):
75+
def decorator(function):
76+
def wrapper(*args, **kwargs):
77+
result = function(*args, **kwargs) + " " + name
78+
return result
79+
return wrapper
80+
return decorator
7981

8082
class SomeClass:
8183
@monitoring.got_histogram("test_histogram")
8284
def some_method(self):
8385
return "test"
8486

87+
obj = SomeClass()
88+
8589
monitoring.set_instance(MyCustomMonitoring)
8690
self.assertIsInstance(monitoring.instance, MyCustomMonitoring)
91+
92+
self.assertEqual(obj.some_method(), "test test_histogram")
93+
8794
monitoring.set_instance(Monitoring)
8895
self.assertIsInstance(monitoring.instance, Monitoring)
89-
obj = SomeClass()
90-
self.assertEqual(obj.some_method(), "test")
96+
9197
self.assertEqual(obj.some_method(), "test")
92-
self.assertIn('test_histogram', Monitoring._monitoring_items[Monitoring.HISTOGRAM].keys())
93-
self.assertIn('test_histogram', MyCustomMonitoring._monitoring_items[Monitoring.HISTOGRAM].keys())
98+
self.assertIn('test_histogram', monitoring._monitoring_items[Monitoring.HISTOGRAM].keys())

0 commit comments

Comments
 (0)