import os import logging import ipaddress import prometheus_client from django.views.generic import View from django.http.response import HttpResponse, HttpResponseNotFound from django.conf import settings from pingcap_sso.metrics import update_metrics from pingcap_sso.utils.requests import get_client_ip logger = logging.getLogger(__name__) class MetricsExporterView(View): def get(self, request, *args, **kwargs): if not (request.user and request.user.is_authenticated and request.user.is_superuser): try: client_ip = get_client_ip(request) if ipaddress.ip_address(client_ip) not in ipaddress.ip_network(settings.PROMETHEUS_TRUSTED_IP): return HttpResponseNotFound() except Exception as e: logger.error(e) return HttpResponseNotFound() update_metrics() metrics_page = prometheus_client.generate_latest() return HttpResponse( metrics_page, content_type=prometheus_client.CONTENT_TYPE_LATEST )