Files
prop-data-guard/backend/.venv/lib/python3.9/site-packages/prometheus_client/django/exposition.py
T
2026-04-22 17:07:33 +08:00

44 lines
1.4 KiB
Python

import os
from django.http import HttpResponse
from django.views import View
import prometheus_client
from prometheus_client import multiprocess
from prometheus_client.exposition import _bake_output
class PrometheusDjangoView(View):
multiprocess_mode: bool = "PROMETHEUS_MULTIPROC_DIR" in os.environ or "prometheus_multiproc_dir" in os.environ
registry: prometheus_client.CollectorRegistry = None
def get(self, request, *args, **kwargs):
if self.registry is None:
if self.multiprocess_mode:
self.registry = prometheus_client.CollectorRegistry()
multiprocess.MultiProcessCollector(self.registry)
else:
self.registry = prometheus_client.REGISTRY
accept_header = request.headers.get("Accept")
accept_encoding_header = request.headers.get("Accept-Encoding")
# Bake output
status, headers, output = _bake_output(
registry=self.registry,
accept_header=accept_header,
accept_encoding_header=accept_encoding_header,
params=request.GET,
disable_compression=False,
)
status = int(status.split(" ")[0])
return HttpResponse(
output,
status=status,
headers=headers,
)
def options(self, request, *args, **kwargs):
return HttpResponse(
status=200,
headers={"Allow": "OPTIONS,GET"},
)