import type { NodeProps } from "@xyflow/react"; import { Box, Cpu, HardDrive, Server } from "lucide-react"; import { Badge } from "@/components/ui/badge"; import { cn } from "@/lib/cn"; import type { ServerMetadata, TopologyNodeData } from "@/lib/topology-types"; import { CompactRow, CopyableCode, MetricRow, TopologyNodeCard } from "../topology-primitives"; export function ServerNode({ data, selected }: NodeProps) { const nodeData = data as TopologyNodeData; const metadata = nodeData.metadata as ServerMetadata; const { server, readyPods, podCount, health } = metadata; const { k8sNodes, connectedProxies, connectionInfo, metrics, pods } = metadata; const restartCount = pods.reduce((sum, pod) => sum + (pod.restarts || 0), 0); return ( } iconClassName="bg-primary/10" title={server.id} description={server.description} health={health} >
{server.jar_type} MC {server.minecraft_version} {server.type} {connectionInfo && ( {connectionInfo.type} )}
{readyPods}/{podCount}
} usage={metrics?.memoryUsage} limit={`${server.memory_request}/${server.memory}MB`} /> } usage={metrics?.cpuUsage} limit={`${server.cpu_request || "N/A"}/${server.cpu_limit || "N/A"}`} />
{connectionInfo?.connectionString && (
{connectionInfo.note && (

{connectionInfo.note}

)}
)} {pods.length > 0 && (
0 ? "text-warning" : "text-success"} > {restartCount} {pods[0]?.age && {pods[0].age}} {pods[0]?.ip && ( {pods[0].ip} )}
)} {(k8sNodes.length > 0 || connectedProxies.length > 0) && (
{connectedProxies.length > 0 && ( {connectedProxies.length} proxies )} {k8sNodes.length > 0 && ( }> {k8sNodes[0]} )}
)}
); }