"use client"; import * as React from "react"; import { api, MonitoringAlert, MonitoringHealth } from "@/lib/api"; import { useEnv } from "@/components/env-provider"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; function formatMaybeNumber(value: unknown, digits = 2): string { const n = typeof value === "number" ? value : Number(value); if (Number.isFinite(n)) return n.toFixed(digits); return "—"; } export default function MonitoringPage() { const { connectionState, connectionText } = useEnv(); const [health, setHealth] = React.useState(null); const [alerts, setAlerts] = React.useState(null); const [metricsText, setMetricsText] = React.useState(null); const [loading, setLoading] = React.useState(true); const [error, setError] = React.useState(""); const refresh = React.useCallback(async () => { setError(""); setLoading(true); try { const [h, a, m] = await Promise.all([ api.getMonitoringHealth(), api.getMonitoringAlerts(), api.getPrometheusMetrics(), ]); setHealth(h); setAlerts(a); setMetricsText(m); } catch (e) { setError(e instanceof Error ? e.message : "Failed to fetch monitoring data."); } finally { setLoading(false); } }, []); React.useEffect(() => { const timeout = setTimeout(() => { void refresh(); }, 0); return () => clearTimeout(timeout); }, [refresh]); const monitoringEnabled = health !== null || alerts !== null || metricsText !== null; return (

Monitoring

Backend monitoring endpoints and Prometheus metrics.

{connectionState === "connected" ? "Connected" : connectionState === "checking" ? "Checking" : "Disconnected"} {connectionText}
{error ? (
{error}
) : null} Status {monitoringEnabled ? "Enabled" : "Disabled"} If monitoring is disabled, the backend returns 403 for these endpoints. {health ? (
Status {health.status}
Uptime (s) {health.uptime_seconds}
Alerts enabled {String(health.alerts_enabled)}
Prometheus enabled {String(health.prometheus_enabled)}
) : (
{loading ? "Loading…" : "Monitoring health endpoint is unavailable (likely disabled)."}
)}
Active alerts From `GET /monitoring/alerts`. {alerts === null ? (
{loading ? "Loading…" : "Alerts endpoint is unavailable (likely disabled)."}
) : alerts.length === 0 ? (
No active alerts.
) : (
{alerts.map((a, i) => (
{String(a.message ?? a.type ?? "Alert")}
{String(a.severity ?? "unknown")}
{a.details ? (
                      {JSON.stringify(a.details, null, 2)}
                    
) : null}
))}
)}
Prometheus metrics From `GET /metrics` (raw text). {metricsText === null ? (
{loading ? "Loading…" : "Metrics endpoint is unavailable (likely disabled)."}
) : (
{health?.current_metrics ? (
Error rate {formatMaybeNumber(health.current_metrics.error_rate, 4)}
P99 latency (ms) {formatMaybeNumber(health.current_metrics.latency_p99_ms, 1)}
) : null}
                {metricsText}
              
)}
); }