dmChatbotBackend / src /runtime /metrics.py
github-actions
Auto deploy from GitHub
cb505ff
Raw History Blame Contribute Delete
1.06 kB
from __future__ import annotations
from dataclasses import dataclass, field
from typing import Any, Dict, List
import time
@dataclass
class RuntimeMetrics:
events: List[Dict[str, Any]] = field(default_factory=list)
started_at: float = field(default_factory=time.perf_counter)
def record(self, event: str, **values: Any) -> None:
self.events.append({"event": event, "timestamp": time.time(), **values})
def snapshot(self) -> Dict[str, Any]:
durations = {
event["event"]: event.get("duration_ms")
for event in self.events
if event.get("duration_ms") is not None
}
return {
"events": list(self.events),
"event_count": len(self.events),
"active_runtime_slots": sum(1 for event in self.events if event["event"] == "runtime.created") - sum(1 for event in self.events if event["event"] == "runtime.destroyed"),
"durations_ms": durations,
"elapsed_ms": round((time.perf_counter() - self.started_at) * 1000, 3),
}