import React from "react"; import { Card, CardContent, CardHeader, CardTitle, } from "@/components/ui/card.tsx"; import { Progress } from "@/components/ui/progress.tsx"; import { Cpu, MemoryStick, Network, HardDrive, Activity } from "lucide-react"; import type { DockerStats } from "@/types"; import { getContainerStats } from "@/ui/main-axios.ts"; import { SimpleLoader } from "@/ui/desktop/navigation/animations/SimpleLoader.tsx"; import { useTranslation } from "react-i18next"; interface ContainerStatsProps { sessionId: string; containerId: string; containerName: string; containerState: string; } export function ContainerStats({ sessionId, containerId, containerName, containerState, }: ContainerStatsProps): React.ReactElement { const { t } = useTranslation(); const [stats, setStats] = React.useState(null); const [isLoading, setIsLoading] = React.useState(false); const [error, setError] = React.useState(null); const fetchStats = React.useCallback(async () => { if (containerState !== "running") { setError(t("docker.containerMustBeRunningToViewStats")); return; } setIsLoading(true); setError(null); try { const data = await getContainerStats(sessionId, containerId); setStats(data); } catch (err) { setError( err instanceof Error ? err.message : t("docker.failedToFetchStats"), ); } finally { setIsLoading(false); } }, [sessionId, containerId, containerState]); React.useEffect(() => { fetchStats(); const interval = setInterval(fetchStats, 2000); return () => clearInterval(interval); }, [fetchStats]); if (containerState !== "running") { return (

{t("docker.containerNotRunning")}

{t("docker.startContainerToViewStats")}

); } if (isLoading && !stats) { return (

{t("docker.loadingStats")}

); } if (error) { return (

{t("docker.errorLoadingStats")}

{error}

); } if (!stats) { return (

{t("docker.noStatsAvailable")}

); } const cpuPercent = parseFloat(stats.cpu) || 0; const memPercent = parseFloat(stats.memoryPercent) || 0; return (
{t("docker.cpuUsage")}
{t("docker.current")} {" "} {stats.cpu}
{t("docker.memoryUsage")}
{t("docker.usedLimit")} {stats.memoryUsed} / {stats.memoryLimit}
{t("docker.percentage")} {stats.memoryPercent}
{t("docker.networkIo")}
{t("docker.input")} {stats.netInput}
{t("docker.output")} {stats.netOutput}
{t("docker.blockIo")}
{t("docker.read")} {stats.blockRead}
{t("docker.write")} {stats.blockWrite}
{stats.pids && (
{t("docker.pids")} {stats.pids}
)}
{t("docker.containerInformation")}
{t("docker.name")} {containerName}
{t("docker.id")} {containerId.substring(0, 12)}
{t("docker.state")} {containerState}
); }