bidmaster-cli/src/bidmaster/utils/monitoring.py
sladro c1292fcacc feat: add validation and toc pipeline upgrades
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2025-11-19 10:11:21 +08:00

50 lines
1.3 KiB
Python

"""基础监控与指标采集。"""
from __future__ import annotations
import time
from contextlib import contextmanager
from dataclasses import dataclass, field
from typing import Dict, List
@dataclass(slots=True)
class MetricRecord:
name: str
duration: float
details: Dict[str, str] = field(default_factory=dict)
class MetricsRecorder:
"""事件耗时记录器。"""
def __init__(self) -> None:
self._records: List[MetricRecord] = []
@contextmanager
def track(self, name: str, **details: str):
start = time.perf_counter()
try:
yield
finally:
duration = time.perf_counter() - start
self._records.append(MetricRecord(name=name, duration=duration, details=details))
def add(self, name: str, duration: float, **details: str) -> None:
self._records.append(MetricRecord(name=name, duration=duration, details=details))
def to_dict(self) -> Dict[str, List[dict]]:
return {
"records": [
{
"name": record.name,
"duration": round(record.duration, 4),
"details": record.details,
}
for record in self._records
]
}
__all__ = ["MetricsRecorder", "MetricRecord"]