"use client"; import { Progress } from "@/components/ui/progress"; import { useWebSocketContext } from "@/hooks/use-websocket-context"; import { formatNezhaInfo } from "@/lib/utils"; import type { NezhaWebsocketResponse } from "@/types/nezha-api"; export default function ServerDetailSummary({ server_id, }: { server_id: number; }) { const { lastMessage, connected } = useWebSocketContext(); if (!connected && !lastMessage) { return null; } const nezhaWsData = lastMessage ? (JSON.parse(lastMessage.data) as NezhaWebsocketResponse) : null; if (!nezhaWsData) { return null; } const server = nezhaWsData.servers.find((s) => s.id === Number(server_id)); if (!server) { return null; } const { cpu, mem, disk, up, down, tcp, udp, process } = formatNezhaInfo( nezhaWsData.now, server, ); return (
CPU {cpu.toFixed(2)}%
Mem {mem.toFixed(2)}%
Disk {disk.toFixed(2)}%
Process {process}
TCP {tcp}
UDP {udp}
Upload {up.toFixed(2)}M/s
Download {down.toFixed(2)}M/s
); } type UsageBarProps = { value: number; }; function UsageBar({ value }: UsageBarProps) { return ( 90 ? "bg-red-500" : value > 70 ? "bg-orange-400" : "bg-green-500" } className={"h-[3px] rounded-sm bg-stone-200 dark:bg-stone-800"} /> ); }