feat: initial commit - Phase 1 & 2 core features

This commit is contained in:
hiderfong
2026-04-22 17:07:33 +08:00
commit 1773bda06b
25005 changed files with 6252106 additions and 0 deletions
@@ -0,0 +1,5 @@
from .exposition import PrometheusDjangoView
__all__ = [
"PrometheusDjangoView",
]
@@ -0,0 +1,43 @@
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"},
)