""" Prometheus metrics definitions for the Trainingssoftware API. Collectors are registered once at app startup (see apps.py ready()). The middleware records observations; the /metrics endpoint exposes them. """ from prometheus_client import Counter, Histogram, Gauge # Request latency histogram — buckets tuned for web API (50ms … 10s) HTTP_REQUEST_DURATION_SECONDS = Histogram( "http_request_duration_seconds", "HTTP request latency", ["method", "path_template", "status_code"], buckets=(0.05, 0.1, 0.25, 0.5, 1.0, 2.5, 5.0, 10.0), ) # Total requests counter (separate from histogram for cheap rate queries) HTTP_REQUESTS_TOTAL = Counter( "http_requests_total", "Total HTTP requests", ["method", "path_template", "status_code"], ) # Error rate counter — 5xx responses only HTTP_SERVER_ERRORS_TOTAL = Counter( "http_server_errors_total", "Total HTTP 5xx responses", ["method", "path_template", "status_code"], ) # In-flight requests gauge HTTP_REQUESTS_IN_FLIGHT = Gauge( "http_requests_in_flight", "Current number of in-flight HTTP requests", )