From 75ff32fc605a68db40ea90f77d5178614273da8e Mon Sep 17 00:00:00 2001 From: Jenny Danzmayr Date: Fri, 20 Sep 2024 00:59:15 +0200 Subject: [PATCH] Fixed c3nav api stats prometheus exporter. we now use a seperate exportet for the c3nav stats cause the --- src/c3nav/mapdata/metrics.py | 11 ++++++----- src/c3nav/mapdata/views.py | 9 +++++++++ src/c3nav/urls.py | 8 ++++++-- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/c3nav/mapdata/metrics.py b/src/c3nav/mapdata/metrics.py index ce1cfd58..bf7a0d49 100644 --- a/src/c3nav/mapdata/metrics.py +++ b/src/c3nav/mapdata/metrics.py @@ -9,14 +9,15 @@ from c3nav.mapdata.models.report import Report if settings.METRICS: from prometheus_client import Gauge - from prometheus_client.core import REGISTRY, CounterMetricFamily - from prometheus_client.registry import Collector + from prometheus_client.core import CounterMetricFamily + from prometheus_client.registry import Collector, CollectorRegistry - users_total = Gauge('c3nav_users_total', 'Total number of users') + REGISTRY = CollectorRegistry(auto_describe=True) + users_total = Gauge('c3nav_users_total', 'Total number of users', registry=REGISTRY) users_total.set_function(lambda: get_user_model().objects.count()) - reports_total = Gauge('c3nav_reports_total', 'Total number of reports') + reports_total = Gauge('c3nav_reports_total', 'Total number of reports', registry=REGISTRY) reports_total.set_function(lambda: Report.objects.count()) - reports_open = Gauge('c3nav_reports_open', 'Number of open reports') + reports_open = Gauge('c3nav_reports_open', 'Number of open reports', registry=REGISTRY) reports_open.set_function(lambda: Report.objects.filter(open=True).count()), class APIStatsCollector(Collector): diff --git a/src/c3nav/mapdata/views.py b/src/c3nav/mapdata/views.py index f902d717..524d7237 100644 --- a/src/c3nav/mapdata/views.py +++ b/src/c3nav/mapdata/views.py @@ -482,3 +482,12 @@ def get_cache_package(request, filetype): response["Content-Disposition"] = content_disposition response['X-Processed-Geometry-Update'] = processed_geometry_update return response + + +def api_stats_exporter(request): + """Exports the API metrics for Prometheus""" + + import prometheus_client + from c3nav.mapdata.metrics import REGISTRY + metrics_page = prometheus_client.generate_latest(REGISTRY) + return HttpResponse(metrics_page, content_type=prometheus_client.CONTENT_TYPE_LATEST) diff --git a/src/c3nav/urls.py b/src/c3nav/urls.py index aa58c0bf..a78481f9 100644 --- a/src/c3nav/urls.py +++ b/src/c3nav/urls.py @@ -50,8 +50,12 @@ if settings.SERVE_ANYTHING: if settings.METRICS: with suppress(ImportError): - import django_prometheus # noqu - urlpatterns.insert(0, path('prometheus/', include('django_prometheus.urls'))) + import django_prometheus.urls # noqu + from c3nav.mapdata.views import api_stats_exporter + urlpatterns += [ + path('prometheus/api_metrics', api_stats_exporter), + path('prometheus/', include(django_prometheus.urls)), + ] if settings.SSO_ENABLED: urlpatterns += [