"""Application metrics are defined here.""" from dataclasses import dataclass from opentelemetry import metrics from opentelemetry.sdk.metrics import Counter, Histogram @dataclass class HTTPMetrics: request_processing_duration: Histogram """Processing time histogram in seconds by `["method", "path"]`.""" requests_started: Counter """Total started requests counter by `["method", "path"]`.""" requests_finished: Counter """Total finished requests counter by `["method", "path", "status_code"]`.""" errors: Counter """Total errors (exceptions) counter by `["method", "path", "error_type", "status_code"]`.""" @dataclass class Metrics: http: HTTPMetrics def init_metrics() -> Metrics: meter = metrics.get_meter("{{project_name}}") return Metrics( http=HTTPMetrics( request_processing_duration=meter.create_histogram( "request_processing_duration", "sec", "Request processing duration time in seconds", explicit_bucket_boundaries_advisory=[ 0.05, 0.2, 0.3, 0.7, 1.0, 1.5, 2.5, 5.0, 10.0, 20.0, 40.0, 60.0, 120.0, ], ), requests_started=meter.create_counter("requests_started_total", "1", "Total number of started requests"), requests_finished=meter.create_counter("request_finished_total", "1", "Total number of finished requests"), errors=meter.create_counter("request_errors_total", "1", "Total number of errors (exceptions) in requests"), ) )