ArmorIQ SDK

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())

On this page