import { type WebsocketStatus, ConnectionStatus, } from "@/components/ConnectionStatus"; import type { StatusMessage } from "@/services/types"; import { Header } from "@/components/Header"; import { DonutChart } from "@/components/DonutChart"; import { LineChartCard } from "@/components/LineChartCard"; import { MetricCard } from "@/components/MetricCard"; import { SysinfoCard } from "@/components/SysinfoCard"; import { useChartData } from "@/hooks/useChartData"; import { getLastMessage, setLastMessage } from "@/services/store"; import { formatBytes, formatPercentage, breakdownMetrics, } from "@/services/utils"; import { initializeConnection } from "@/services/websocket"; import { useEffect, useState } from "react"; import { useParams } from "react-router-dom"; export function AgentPage() { const { agent } = useParams(); const [status, setStatus] = useState(); const [message, setMessage] = useState( getLastMessage(), ); useEffect(() => { if (!agent) return; initializeConnection(agent, { onMessage: (data) => { const parsed = JSON.parse(data); setStatus("connected"); setMessage(parsed); setLastMessage(parsed); }, onOpen: () => setStatus("connecting"), onClose: () => setStatus("disconnected"), onError: () => setStatus("error"), }); }, [agent]); const { metrics } = message ?? {}; const { cpuData, memoryData, networkData } = useChartData(message); const getMetricStatus = (percentage: number | undefined) => { if (!percentage) return "nil"; if (percentage < 50) return "good"; if (percentage < 80) return "warning"; return "critical"; }; const { cpuThreads, cpuUsage, memoryUsage, memoryUsed, memoryTotal, diskUsage, diskFree, diskTotal, networkUp, networkDown, } = breakdownMetrics(message?.metrics); const networkUsage = networkUp + networkDown; return (
), }} />
); }