import { ConnectionStatus } from "@/components/ConnectionStatus"; 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 { formatBits, formatPercentage, calcPercentage, formatBytes, } from "@/services/utils"; import { useParams } from "react-router-dom"; import { useWebsocket } from "@/hooks/useWebsocket"; import { getHistoricalData, TimePeriod } from "@/services/store"; import { useEffect, useState } from "react"; import { StatusMessage } from "@/services/types"; import { TimePeriodSelector } from "@/components/TimePeriodSelector"; export function AgentPage() { const { agent } = useParams(); const { status, message } = useWebsocket(`ws://localhost:3000/ws/${agent}`); const [period, setPeriod] = useState("all"); const [history, setHistory] = useState(null); useEffect(() => { const fetchData = async () => { const data = await getHistoricalData( `http://localhost:3000/history/${agent}/${period}`, ); setHistory(data); }; fetchData(); }, [agent, period]); const { metrics } = message ?? {}; const { cpuData, memoryData, networkData } = useChartData( period === "realtime" ? message! : history, ); 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 (
), }} />

Overview

Details

); }