Some checks failed
Run linters on applied template / Python 3.13 lint and build (push) Failing after 34s
This is a FastAPI backend microservice template used with `copier` utility. Features of applied template are: - Configuration file processing logic - Metrics and tracing (both optional) configuration available - Debug endpoints - Database migration commands, prepared Alembic environment - Database usage example in ping_db endpoint - gitea sanity check pipeline
48 lines
1.6 KiB
Python
48 lines
1.6 KiB
Python
"""Application metrics are defined here."""
|
|
|
|
from dataclasses import dataclass
|
|
|
|
from opentelemetry import metrics
|
|
from opentelemetry.sdk.metrics import Counter, Histogram
|
|
|
|
|
|
@dataclass
|
|
class Metrics:
|
|
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"]`."""
|
|
|
|
|
|
def init_metrics() -> Metrics:
|
|
meter = metrics.get_meter("{{project_name}}")
|
|
return Metrics(
|
|
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"),
|
|
)
|