Files
arsam 4830678525 Import source: axon/services/metrics
Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality.
2026-09-18 23:06:32 +03:30

37 lines
1.1 KiB
Python

import asyncio
from collections import defaultdict
class MetricsRegistry:
def __init__(self) -> None:
self._lock = asyncio.Lock()
self.requests_total = 0
self.errors_total = 0
self.latency_total_ms = 0.0
self.requests_by_path: dict[str, int] = defaultdict(int)
async def record(self, path: str, status_code: int, latency_ms: float) -> None:
async with self._lock:
self.requests_total += 1
self.requests_by_path[path] += 1
self.latency_total_ms += latency_ms
if status_code >= 500:
self.errors_total += 1
async def snapshot(self) -> dict:
async with self._lock:
average = (
self.latency_total_ms / self.requests_total
if self.requests_total
else 0.0
)
return {
"requests_total": self.requests_total,
"requests_by_path": dict(self.requests_by_path),
"errors_total": self.errors_total,
"average_latency_ms": round(average, 3),
}
metrics = MetricsRegistry()