Monitoring and Metrics
Track invocations and performance.
Monitoring and Metrics
import time
from dataclasses import dataclass
from typing import List
@dataclass
class InvokeMetric:
mcp: str
action: str
success: bool
duration_ms: float
timestamp: float
class MetricsCollector:
def __init__(self):
self.metrics: List[InvokeMetric] = []
def record(self, mcp, action, success, duration_ms):
self.metrics.append(InvokeMetric(
mcp=mcp,
action=action,
success=success,
duration_ms=duration_ms,
timestamp=time.time()
))
def get_stats(self):
if not self.metrics:
return {}
total = len(self.metrics)
successful = sum(1 for m in self.metrics if m.success)
avg_duration = sum(m.duration_ms for m in self.metrics) / total
return {
"total_invocations": total,
"successful": successful,
"failed": total - successful,
"success_rate": successful / total,
"avg_duration_ms": avg_duration
}
# Usage
metrics = MetricsCollector()
start = time.time()
result = client.invoke(mcp, action, token, params)
duration_ms = (time.time() - start) * 1000
metrics.record(mcp, action, result["success"], duration_ms)
# Later
print(metrics.get_stats())