import { type ReactNode } from 'react'; import { useQuery } from '@tanstack/react-query'; import { apiRequest } from '../../lib/api-client'; import { z } from 'zod'; import { Card, CardContent, CardHeader, CardTitle } from '../../components/ui/card'; import { Badge } from '../../components/ui/badge'; import { Button } from '../../components/ui/button'; import { EmptyState, ErrorState, Spinner } from '../../components/ui/states'; /** Erweiterter Systemstatus (API-Vertrag /api/v1/system/status). */ const systemStatusSchema = z.object({ overall: z.enum(['HEALTHY', 'DEGRADED', 'UNHEALTHY']), components: z.array( z.object({ name: z.string(), status: z.enum(['HEALTHY', 'DEGRADED', 'UNHEALTHY', 'STOPPED']), detail: z.string(), }), ), }); type SystemStatus = z.infer; /** Badge-Variante je Komponenten-Status. */ function statusVariant( status: SystemStatus['components'][number]['status'], ): 'success' | 'warning' | 'danger' | 'neutral' { switch (status) { case 'HEALTHY': return 'success'; case 'DEGRADED': return 'warning'; case 'UNHEALTHY': return 'danger'; default: return 'neutral'; } } /** Admin-Seite: detaillierter Systemstatus aller Komponenten und Module. */ export function SystemStatusPage(): ReactNode { const statusQuery = useQuery({ queryKey: ['system-status'], queryFn: async (): Promise => systemStatusSchema.parse(await apiRequest('/api/v1/system/status')), refetchInterval: 30_000, }); return (

Systemstatus

Zustand aller Plattform-Komponenten und Module (aktualisiert alle 30 Sekunden).

Gesamtstatus {statusQuery.isLoading && } {statusQuery.isError && void statusQuery.refetch()}>Erneut versuchen} />} {statusQuery.data && statusQuery.data.components.length === 0 && } {statusQuery.data && statusQuery.data.components.length > 0 && (
{statusQuery.data.overall} {statusQuery.data.components.length} Komponenten überwacht
)}
Komponenten {statusQuery.data && (
{statusQuery.data.components.map((component) => (
{component.name} {component.detail}
{component.status}
))}
)}
); }