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-blue-500/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-blue-600"
>
{metrics.cpuUsage}
)}
{metrics.memoryUsage && (
}
valueClassName="font-semibold text-xs text-blue-600"
>
{metrics.memoryUsage}
)}
)}
{node.age}
{node.hostname && (
{node.hostname}
)}
{(node.internalIP || node.externalIP) && (
{node.internalIP && (
{node.internalIP}
)}
{node.externalIP && (
{node.externalIP}
)}
)}
);
}