import type { NodeProps } from "@xyflow/react"; import { Box, Cpu, HardDrive, Network, Server as ServerIcon } from "lucide-react"; import { Badge } from "@/components/ui/badge"; import type { K8sNodeMetadata, TopologyNodeData } from "@/lib/topology-types"; import { CompactRow, TopologyNodeCard } from "../topology-primitives"; export function K8sNodeComponent({ data, selected }: NodeProps) { const nodeData = data as TopologyNodeData; const metadata = nodeData.metadata as K8sNodeMetadata; const { node, podCount, serverPods, proxyPods, health, metrics } = metadata; return ( } iconClassName="bg-info/10" title={node.name || "Unknown"} description="Kubernetes Node" health={health} >
{node.status} {node.version && ( {node.version} )} {node.roles}
{podCount}
}> {serverPods.length} }> {proxyPods.length}
{metrics && (metrics.cpuUsage || metrics.memoryUsage) && (
{metrics.cpuUsage && ( } valueClassName="font-semibold text-xs text-info" > {metrics.cpuUsage} )} {metrics.memoryUsage && ( } valueClassName="font-semibold text-xs text-info" > {metrics.memoryUsage} )}
)}
{node.age} {node.hostname && ( {node.hostname} )}
{(node.internalIP || node.externalIP) && (
{node.internalIP && ( {node.internalIP} )} {node.externalIP && ( {node.externalIP} )}
)}
); }