'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 (
{/* Service health */}

Service Health

{health ? ( <>
{health.overall === 'healthy' ? ( ) : ( )} All services checked at {new Date(health.checkedAt).toLocaleTimeString()}
{health.services.map((service) => ( ))}
) : (
{[1, 2, 3, 4].map((i) => (
))}
)}
{/* Stats row */}
Active Connections

{connections}

Total Failed Jobs

0 ? 'text-destructive' : ''}`}> {totalFailed}

Active Jobs

{queues.reduce((sum, q) => sum + q.active, 0)}

{/* Queue overview */}

Queue Overview

{queues.length > 0 ? ( ) : (
{[1, 2, 3, 4, 5].map((i) => (
))}
)}
{/* Recent errors */}
); } function RecentErrorsPanel() { const { data: errorsData } = useQuery({ queryKey: ['system', 'errors'], queryFn: () => apiFetch<{ data: RecentError[] }>('/api/v1/admin/errors').then((r) => r.data), staleTime: 30_000, refetchInterval: 30_000, }); const errors: RecentError[] = errorsData ?? []; return (

Recent Errors

{errors.length === 0 ? (

No recent errors.

) : (
{errors.map((error) => (

{error.message}

{error.source === 'queue' ? 'Queue' : 'Audit'} —{' '} {new Date(error.timestamp).toLocaleString()}

))}
)}
); }