diff --git a/core/core/metrics.py b/core/core/metrics.py new file mode 100644 index 0000000..47916be --- /dev/null +++ b/core/core/metrics.py @@ -0,0 +1,8 @@ +from prometheus_client import Counter, Gauge +from django_prometheus.middleware import ( + PrometheusAfterMiddleware, +) + +class AppMetricsAfterMiddleware(PrometheusAfterMiddleware): + def register_metric(self, metric_cls, name, documentation, labelnames=(), **kwargs): + return super().register_metric(metric_cls, name, documentation, labelnames=labelnames, **kwargs) \ No newline at end of file diff --git a/core/core/settings.py b/core/core/settings.py index db23180..124fcad 100644 --- a/core/core/settings.py +++ b/core/core/settings.py @@ -50,6 +50,7 @@ INSTALLED_APPS = [ 'django.contrib.messages', 'django.contrib.staticfiles', 'django_extensions', + 'django_prometheus', 'rest_framework', 'knox', 'drf_yasg', @@ -85,6 +86,7 @@ SWAGGER_SETTINGS = { } MIDDLEWARE = [ + 'django_prometheus.middleware.PrometheusBeforeMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', @@ -92,6 +94,7 @@ MIDDLEWARE = [ 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'django_prometheus.middleware.PrometheusAfterMiddleware', ] ROOT_URLCONF = 'core.urls' @@ -210,4 +213,6 @@ CHANNEL_LAYERS = { } +PROMETHEUS_METRIC_NAMESPACE = 'c3lf' + TEST_RUNNER = 'core.test_runner.FastTestRunner' diff --git a/core/core/urls.py b/core/core/urls.py index b0161bb..e73f478 100644 --- a/core/core/urls.py +++ b/core/core/urls.py @@ -18,6 +18,7 @@ from django.contrib import admin from django.urls import path, include from .version import get_info +from .metrics import CustomMetrics urlpatterns = [ path('djangoadmin/', admin.site.urls), @@ -32,4 +33,5 @@ urlpatterns = [ path('api/2/', include('notify_sessions.api_v2')), path('api/2/', include('authentication.api_v2')), path('api/', get_info), + path('', include('django_prometheus.urls')), ] diff --git a/core/requirements.prod.txt b/core/requirements.prod.txt index 14bdc0f..ee69fe7 100644 --- a/core/requirements.prod.txt +++ b/core/requirements.prod.txt @@ -41,3 +41,5 @@ urllib3==2.1.0 uvicorn==0.24.0.post1 watchfiles==0.21.0 websockets==12.0 +django-prometheus==2.3.1 +prometheus_client==0.21.0