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 { formatBits, formatPercentage, calcPercentage, formatBytes, } 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 cpuUsage = metrics?.cpu.usage ?? 0; const memoryUsed = metrics?.memory.used ?? 0; const memoryTotal = metrics?.memory.total ?? 0; const memoryUsage = calcPercentage(memoryUsed, memoryTotal); const diskFree = (metrics?.disk.total ?? 0) - (metrics?.disk.free ?? 0); const diskTotal = metrics?.disk.total ?? 0; const diskUsage = calcPercentage(diskFree, diskTotal); const networkUp = metrics?.network.up ?? 0; const networkDown = metrics?.network.down ?? 0; const networkUsage = networkUp + networkDown; return (
), }} />
); }