Skip to content

Commit

Permalink
Minor fixes + test fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
Artem Batalov committed Apr 11, 2022
1 parent 259e6f8 commit e75f346
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 15 deletions.
20 changes: 14 additions & 6 deletions core/monitoring/monitoring.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from core.logging.logger_constants import KEY_NAME
from core.logging.logger_utils import log

from prometheus_client import Counter, Histogram
from prometheus_client import Counter, Histogram, REGISTRY


def _filter_monitoring_msg(msg):
Expand Down Expand Up @@ -34,15 +34,23 @@ class Monitoring:
HISTOGRAM = "histogram"
DEFAULT_ENABLED = True
DEFAULT_DISABLED_METRICS = []
_monitoring_items = {
COUNTER: {},
HISTOGRAM: {}
}

def __init__(self):
self._enabled = self.DEFAULT_ENABLED
self.disabled_metrics = self.DEFAULT_DISABLED_METRICS.copy()
self.buckets = Histogram.DEFAULT_BUCKETS
self._monitoring_items = {
self.COUNTER: {},
self.HISTOGRAM: {}
}
self._clean_registry()

@staticmethod
def _clean_registry():
"""При создании нового инстанса мониторинга удаляем все созданные коллекторы"""
collectors = list(REGISTRY._collector_to_names.keys())
for collector in collectors:
REGISTRY.unregister(collector)

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

def set_instance(self, cls):
if not isinstance(self.instance, cls):
if type(self.instance) != type(cls):
self.instance = cls()

def __getattr__(self, item):
Expand Down
23 changes: 14 additions & 9 deletions tests/core_tests/monitoring_test/test_monitoring.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,6 @@ def setUp(self):
self.logger.exception = PicklableMock()
self.config = PicklableMock()
self.mock_rep = PicklableMock()
Monitoring._monitoring_items = {
Monitoring.COUNTER: {},
Monitoring.HISTOGRAM: {}
}
self.monitoring = Monitoring()
self.monitoring.apply_config({})

Expand Down Expand Up @@ -75,19 +71,28 @@ def test_monitoring_init(self):
from core.monitoring.monitoring import monitoring

class MyCustomMonitoring(Monitoring):
pass
def got_histogram(self, name, description=None):
def decorator(function):
def wrapper(*args, **kwargs):
result = function(*args, **kwargs) + " " + name
return result
return wrapper
return decorator

class SomeClass:
@monitoring.got_histogram("test_histogram")
def some_method(self):
return "test"

obj = SomeClass()

monitoring.set_instance(MyCustomMonitoring)
self.assertIsInstance(monitoring.instance, MyCustomMonitoring)

self.assertEqual(obj.some_method(), "test test_histogram")

monitoring.set_instance(Monitoring)
self.assertIsInstance(monitoring.instance, Monitoring)
obj = SomeClass()
self.assertEqual(obj.some_method(), "test")

self.assertEqual(obj.some_method(), "test")
self.assertIn('test_histogram', Monitoring._monitoring_items[Monitoring.HISTOGRAM].keys())
self.assertIn('test_histogram', MyCustomMonitoring._monitoring_items[Monitoring.HISTOGRAM].keys())
self.assertIn('test_histogram', monitoring._monitoring_items[Monitoring.HISTOGRAM].keys())

0 comments on commit e75f346

Please sign in to comment.