import type { NodeProps } from "@xyflow/react"; import { Box, Cpu, Globe, HardDrive, Network } from "lucide-react"; import { Badge } from "@/components/ui/badge"; import { cn } from "@/lib/cn"; import type { ProxyMetadata, TopologyNodeData } from "@/lib/topology-types"; import { CompactRow, CopyableCode, MetricRow, TopologyNodeCard } from "../topology-primitives"; export function ProxyNode({ data, selected }: NodeProps) { const nodeData = data as TopologyNodeData; const metadata = nodeData.metadata as ProxyMetadata; const { proxy, readyPods, podCount, health, connectedServers } = metadata; const { k8sNodes, connectionInfo, metrics, pods } = metadata; const restartCount = pods.reduce((sum, pod) => sum + (pod.restarts || 0), 0); return ( } iconClassName="bg-info/10" title={proxy.id} description={proxy.description} health={health} >
{proxy.type} {connectionInfo && ( {connectionInfo.type} )}
{readyPods}/{podCount} {proxy.node_port && (
}> {proxy.node_port}
)} {connectionInfo?.connectionString && (
{connectionInfo.note && (

{connectionInfo.note}

)}
)}
} usage={metrics?.memoryUsage} limit={`${proxy.memory}MB`} /> } usage={metrics?.cpuUsage} limit={`${proxy.cpu_request || "N/A"}/${proxy.cpu_limit || "N/A"}`} />
{pods.length > 0 && (
0 ? "text-warning" : "text-success"} > {restartCount} {pods[0]?.age && {pods[0].age}} {pods[0]?.ip && ( {pods[0].ip} )} {connectedServers.length} servers {k8sNodes.length > 0 && ( }> {k8sNodes[0]} )}
)}
); }