From 9f1a97b3144fede2774b0610e5c18dd053a4ea82 Mon Sep 17 00:00:00 2001 From: Jan David Mol <mol@astron.nl> Date: Fri, 2 Aug 2024 09:13:25 +0200 Subject: [PATCH] Moved metrics to PyCommon --- .../PyCommon}/metrics.py | 30 +++++++++++++++---- .../qa_statistics_service/CMakeLists.txt | 1 - .../qa_statistics_service.py | 2 +- 3 files changed, 25 insertions(+), 8 deletions(-) rename {SAS/TMSS/backend/services/qa_statistics_service => LCS/PyCommon}/metrics.py (64%) diff --git a/SAS/TMSS/backend/services/qa_statistics_service/metrics.py b/LCS/PyCommon/metrics.py similarity index 64% rename from SAS/TMSS/backend/services/qa_statistics_service/metrics.py rename to LCS/PyCommon/metrics.py index a7c8bd25981..b0e77d5bea0 100644 --- a/SAS/TMSS/backend/services/qa_statistics_service/metrics.py +++ b/LCS/PyCommon/metrics.py @@ -17,18 +17,36 @@ import time -from prometheus_client import start_http_server, disable_created_metrics, Gauge +from prometheus_client import start_http_server, disable_created_metrics, Gauge, Histogram - -def add_default_metrics(): +def _add_default_metrics(): + """Create generic metrics that we expose by default.""" + uptime = Gauge("uptime", "Uptime of the service") - start_time = time.time() uptime.set_function(lambda: time.time() - start_time) - def start_metrics_server(port: int = 8000): + """Start a Prometheus endpoint to scrape.""" + disable_created_metrics() start_http_server(port) - add_default_metrics() + _add_default_metrics() + +def metric_track_duration(): + """Decorator for functions, to expose their call durations as a + Histogram in Prometheus.""" + + def inner(func): + func_name = func.__qualname__.replace(".","_") + metric = Histogram(f"{func_name}_duration") + + @wraps(func) + def metric_wrapper(*args, **kwargs): + with metric.time(): + return func(*args, **kwargs) + + return metric_wrapper + + return inner diff --git a/SAS/TMSS/backend/services/qa_statistics_service/CMakeLists.txt b/SAS/TMSS/backend/services/qa_statistics_service/CMakeLists.txt index 3c9c1876a21..673aae17dbd 100644 --- a/SAS/TMSS/backend/services/qa_statistics_service/CMakeLists.txt +++ b/SAS/TMSS/backend/services/qa_statistics_service/CMakeLists.txt @@ -5,7 +5,6 @@ include(PythonInstall) set(_py_files qa_statistics_service.py - metrics.py ) python_install(${_py_files} diff --git a/SAS/TMSS/backend/services/qa_statistics_service/qa_statistics_service.py b/SAS/TMSS/backend/services/qa_statistics_service/qa_statistics_service.py index 7a1447f70db..9717c0614eb 100755 --- a/SAS/TMSS/backend/services/qa_statistics_service/qa_statistics_service.py +++ b/SAS/TMSS/backend/services/qa_statistics_service/qa_statistics_service.py @@ -28,7 +28,7 @@ from prometheus_client import Counter, Gauge from lofar.stationmodel.antennafields import ( antennafields_for_antennaset_and_station, ) -from lofar.sas.tmss.services.metrics import ( +from lofar.common.metrics import ( start_metrics_server, ) from lofar.sas.tmss.services.tuna.job_dispatcher import ( -- GitLab