초기화
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
from dataclasses import dataclass, field
|
||||
from datetime import datetime
|
||||
import logging
|
||||
from typing import List
|
||||
|
||||
logger = logging.getLogger("metrics")
|
||||
|
||||
@dataclass
|
||||
class MessageMetrics:
|
||||
topic: str
|
||||
processing_time_ms: float
|
||||
error: bool = False
|
||||
error_msg: str = ""
|
||||
timestamp: datetime = field(default_factory=datetime.now)
|
||||
|
||||
message_metrics: List[MessageMetrics] = []
|
||||
|
||||
def record_metric(topic: str, processing_time_ms: float, error: bool = False, error_msg: str = ""):
|
||||
metric = MessageMetrics(
|
||||
topic=topic,
|
||||
processing_time_ms=processing_time_ms,
|
||||
error=error,
|
||||
error_msg=error_msg
|
||||
)
|
||||
message_metrics.append(metric)
|
||||
if len(message_metrics) > 1000:
|
||||
message_metrics.pop(0)
|
||||
|
||||
if error:
|
||||
logger.error(f"[METRIC ERROR] {topic}: {error_msg} ({processing_time_ms:.1f}ms)")
|
||||
elif processing_time_ms > 100:
|
||||
logger.warning(f"[METRIC SLOW] {topic}: {processing_time_ms:.1f}ms (>100ms)")
|
||||
|
||||
def get_metrics_summary() -> dict:
|
||||
if not message_metrics:
|
||||
return {"message": "No metrics recorded yet"}
|
||||
|
||||
total_count = len(message_metrics)
|
||||
error_count = sum(1 for m in message_metrics if m.error)
|
||||
avg_time = sum(m.processing_time_ms for m in message_metrics) / total_count
|
||||
|
||||
return {
|
||||
"total_messages": total_count,
|
||||
"error_count": error_count,
|
||||
"error_rate": error_count / total_count if total_count > 0 else 0.0,
|
||||
"avg_processing_time_ms": round(avg_time, 2),
|
||||
"last_update": message_metrics[-1].timestamp.isoformat()
|
||||
}
|
||||
Reference in New Issue
Block a user