"use client"; import React from "react"; import { Activity, Server, AlertOctagon, Clock } from "lucide-react"; import { Card, CardBody, CardHeader, CardTitle } from "@/components/ui/Card"; import { Badge } from "@/components/ui/Badge"; import { EmptyState } from "@/components/ui/EmptyState"; import { MetricCard } from "@/components/ui/MetricCard"; import { fmtDate } from "@/lib/utils"; const SERVICES = [ { name: "asf-core", status: "healthy", latency_ms: 42, error_rate: 0.1, rps: 184 }, { name: "asf-worker", status: "healthy", latency_ms: 0, error_rate: 0.0, rps: 0, jobs: 6 }, { name: "asf-context", status: "degraded", latency_ms: 310, error_rate: 2.3, rps: 42 }, { name: "asf-ai", status: "healthy", latency_ms: 620, error_rate: 0.5, rps: 12 }, { name: "mongodb", status: "healthy", latency_ms: 3, error_rate: 0.0, rps: 0 }, { name: "rabbitmq", status: "healthy", latency_ms: 2, error_rate: 0.0, queue_depth: 14 }, ]; const INCIDENTS = [ { id: "INC-233", sev: "medium", title: "asf-context p99 latency spike", started: "2025-11-22T08:10:00Z", state: "open" }, { id: "INC-232", sev: "low", title: "MinIO console certificate warn", started: "2025-11-21T14:40:00Z", state: "resolved" }, ]; export default function ObservabilityPage() { return (

Observability

Service health, latency, error rates and active incidents. Structured JSON logs + correlation_id propagate across every ASF hop.

OpenTelemetry · prepared
} subtitle="of 6 total" /> } /> } /> } />
Service inventory p50 latency {SERVICES.map((s) => ( ))}
Service Status Latency Error % Load
{s.name} {s.status} {s.latency_ms} ms {s.error_rate.toFixed(2)}% {s.rps ? `${s.rps} rps` : s.queue_depth !== undefined ? `q=${s.queue_depth}` : `${s.jobs} jobs`}
Incidents correlation_id · audit {INCIDENTS.length === 0 ? ( ) : (
    {INCIDENTS.map((i) => (
  • {i.sev} {i.id} {i.state}
    {i.title}
    Started {fmtDate(i.started)}
  • ))}
)}
); }