ArmorIQ LogoArmorIQ 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())
interface InvokeMetric {
  mcp: string;
  action: string;
  success: boolean;
  durationMs: number;
  timestamp: number;
}

class MetricsCollector {
  private metrics: InvokeMetric[] = [];

  record(mcp: string, action: string, success: boolean, durationMs: number): void {
    this.metrics.push({
      mcp,
      action,
      success,
      durationMs,
      timestamp: Date.now()
    });
  }

  getStats(): Record<string, any> {
    if (this.metrics.length === 0) {
      return {};
    }

    const total = this.metrics.length;
    const successful = this.metrics.filter(m => m.success).length;
    const avgDuration = this.metrics.reduce((sum, m) => sum + m.durationMs, 0) / total;

    return {
      totalInvocations: total,
      successful,
      failed: total - successful,
      successRate: successful / total,
      avgDurationMs: avgDuration
    };
  }
}

// Usage
const metrics = new MetricsCollector();

const start = Date.now();
const result = await client.invoke(mcp, action, token, params);
const durationMs = Date.now() - start;

metrics.record(mcp, action, result.status === 'success', durationMs);

// Later
console.log(metrics.getStats());

On this page