import React from "react"; import { Cpu, X, Maximize2 } from "lucide-react"; import { Progress } from "@/components/ui/progress.tsx"; import { useTranslation } from "react-i18next"; import type { ServerMetrics } from "@/ui/main-axios.ts"; import type { WidgetSize } from "@/types/stats-widgets"; import { ChartContainer, RechartsPrimitive } from "@/components/ui/chart.tsx"; const { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, } = RechartsPrimitive; interface CpuWidgetProps { metrics: ServerMetrics | null; metricsHistory: ServerMetrics[]; isEditMode: boolean; widgetId: string; widgetSize: WidgetSize; onDelete: (widgetId: string, e: React.MouseEvent) => void; onChangeSize: ( widgetId: string, newSize: WidgetSize, e: React.MouseEvent, ) => void; } export function CpuWidget({ metrics, metricsHistory, isEditMode, widgetId, widgetSize, onDelete, onChangeSize, }: CpuWidgetProps) { const { t } = useTranslation(); const sizeOrder: WidgetSize[] = ["small", "medium", "large"]; const nextSize = sizeOrder[(sizeOrder.indexOf(widgetSize) + 1) % sizeOrder.length]; // Prepare chart data const chartData = React.useMemo(() => { return metricsHistory.map((m, index) => ({ index, cpu: m.cpu?.percent || 0, })); }, [metricsHistory]); return (
{isEditMode && ( <> )}

CPU Usage

{widgetSize === "small" && (
{typeof metrics?.cpu?.percent === "number" ? `${metrics.cpu.percent}%` : "N/A"}
{typeof metrics?.cpu?.cores === "number" ? t("serverStats.cpuCores", { count: metrics.cpu.cores }) : t("serverStats.naCpus")}
)} {widgetSize === "medium" && (
{(() => { const pct = metrics?.cpu?.percent; const cores = metrics?.cpu?.cores; const pctText = typeof pct === "number" ? `${pct}%` : "N/A"; const coresText = typeof cores === "number" ? t("serverStats.cpuCores", { count: cores }) : t("serverStats.naCpus"); return `${pctText} ${t("serverStats.of")} ${coresText}`; })()}
{metrics?.cpu?.load ? `Load: ${metrics.cpu.load[0].toFixed(2)}, ${metrics.cpu.load[1].toFixed(2)}, ${metrics.cpu.load[2].toFixed(2)}` : "Load: N/A"}
)} {widgetSize === "large" && (
{typeof metrics?.cpu?.percent === "number" ? `${metrics.cpu.percent}%` : "N/A"}
{typeof metrics?.cpu?.cores === "number" ? t("serverStats.cpuCores", { count: metrics.cpu.cores }) : t("serverStats.naCpus")}
{metrics?.cpu?.load ? `Load: ${metrics.cpu.load[0].toFixed(2)} / ${metrics.cpu.load[1].toFixed(2)} / ${metrics.cpu.load[2].toFixed(2)}` : "Load: N/A"}
[`${value.toFixed(1)}%`, "CPU"]} />
)}
); }