'use client'; import { useQuery } from '@tanstack/react-query'; import { Activity, Wifi, AlertTriangle, CheckCircle2 } from 'lucide-react'; import { apiFetch } from '@/lib/api/client'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { ServiceHealthCard } from './service-health-card'; import { QueueOverview } from './queue-overview'; import { PageHeader } from '@/components/shared/page-header'; import type { HealthStatus, QueueStatus, ConnectionStatus, RecentError, } from '@/lib/services/system-monitoring.service'; export function SystemMonitoringDashboard() { const { data: healthData } = useQuery({ queryKey: ['system', 'health'], queryFn: () => apiFetch<{ data: HealthStatus }>('/api/v1/admin/health').then((r) => r.data), staleTime: 30_000, refetchInterval: 30_000, }); const { data: queuesData } = useQuery({ queryKey: ['system', 'queues'], queryFn: () => apiFetch<{ data: QueueStatus[] }>('/api/v1/admin/queues').then((r) => r.data), staleTime: 10_000, refetchInterval: 10_000, }); const { data: connectionsData } = useQuery({ queryKey: ['system', 'connections'], queryFn: () => apiFetch<{ data: ConnectionStatus }>('/api/v1/admin/connections').then((r) => r.data), staleTime: 30_000, refetchInterval: 30_000, }); const queues: QueueStatus[] = queuesData ?? []; const health: HealthStatus | undefined = healthData; const connections = connectionsData?.totalConnections ?? 0; const totalFailed = queues.reduce((sum, q) => sum + q.failed, 0); return (
{connections}
0 ? 'text-destructive' : ''}`}> {totalFailed}
{queues.reduce((sum, q) => sum + q.active, 0)}
No recent errors.
) : ({error.message}
{error.source === 'queue' ? 'Queue' : 'Audit'} —{' '} {new Date(error.timestamp).toLocaleString()}