"use client"; import type { Widget } from "@/lib/config/schema"; import { useWidgetSubscription } from "@/lib/ws/client"; import { StatusDot } from "@/components/widgets/StatusDot"; import { StatusTag } from "@/components/widgets/StatusTag"; import { SkeletonLines } from "@/components/widgets/Skeleton"; import { WidgetCard } from "@/components/widgets/WidgetCard"; import { MetricBar } from "@/components/widgets/MetricBar"; import { BrandIcon } from "@/components/widgets/BrandIcon"; import { formatBytes, formatUptime } from "@/lib/format"; type ServiceWidget = Extract; export function ServiceWidget({ widget, widgetId }: { widget: ServiceWidget; widgetId: string }) { const result = useWidgetSubscription(widgetId); const data = result?.type === "service" ? result.data : null; const errorMessage = result?.type === "error" ? result.message : null; const memPercent = data?.docker.memUsageBytes != null && data.docker.memLimitBytes ? (data.docker.memUsageBytes / data.docker.memLimitBytes) * 100 : null; return (
{widget.href ? ( {widget.name} ) : ( {widget.name} )}
{errorMessage && {errorMessage}} {!result && !errorMessage && } {data && ( <> {data.stats.length > 0 && (
{data.stats.map((stat, index) => (
0 ? "border-l border-border pl-4" : ""}`} > {stat.value} {stat.label}
))}
)} {data.statError && {data.statError}} {widget.showStats && data.docker.cpuPercent !== null && memPercent !== null && (
)}
{data.docker.uptimeSeconds !== null && up {formatUptime(data.docker.uptimeSeconds)}} {widget.showStats && data.docker.memUsageBytes !== null && memPercent === null && ( {formatBytes(data.docker.memUsageBytes)} )} {data.docker.restartCount > 0 && {data.docker.restartCount} restarts}
)}
); }