import { Color } from '@signozhq/design-tokens'; import { Tag, Tooltip } from 'antd'; import { ColumnType } from 'antd/es/table'; import { K8sNodesData, K8sNodesListPayload, } from 'api/infraMonitoring/getK8sNodesList'; import { Group } from 'lucide-react'; import { IBuilderQuery } from 'types/api/queryBuilder/queryBuilderData'; import { formatBytes, ValidateColumnValueWrapper } from '../commonUtils'; import { IEntityColumn } from '../utils'; export const defaultAddedColumns: IEntityColumn[] = [ { label: 'Node Name', value: 'nodeName', id: 'nodeName', canRemove: false, }, { label: 'Cluster Name', value: 'clusterStatus', id: 'clusterStatus', canRemove: false, }, { label: 'CPU Usage (cores)', value: 'cpu', id: 'cpu', canRemove: false, }, { label: 'CPU Alloc (cores)', value: 'cpu_allocatable', id: 'cpu_allocatable', canRemove: false, }, { label: 'Memory Usage (bytes)', value: 'memory', id: 'memory', canRemove: false, }, { label: 'Memory Alloc (bytes)', value: 'memory_allocatable', id: 'memory_allocatable', canRemove: false, }, ]; export interface K8sNodesRowData { key: string; nodeUID: string; nodeName: React.ReactNode; clusterName: string; cpu: React.ReactNode; cpu_allocatable: React.ReactNode; memory: React.ReactNode; memory_allocatable: React.ReactNode; groupedByMeta?: any; } const nodeGroupColumnConfig = { title: (
NODE GROUP
), dataIndex: 'nodeGroup', key: 'nodeGroup', ellipsis: true, width: 150, align: 'left', sorter: false, }; export const getK8sNodesListQuery = (): K8sNodesListPayload => ({ filters: { items: [], op: 'and', }, orderBy: { columnName: 'cpu', order: 'desc' }, }); const columnsConfig = [ { title:
Node Name
, dataIndex: 'nodeName', key: 'nodeName', ellipsis: true, width: 80, sorter: false, align: 'left', }, { title:
Cluster Name
, dataIndex: 'clusterName', key: 'clusterName', ellipsis: true, width: 80, sorter: false, align: 'left', }, { title:
CPU Usage (cores)
, dataIndex: 'cpu', key: 'cpu', width: 80, sorter: true, align: 'left', }, { title:
CPU Alloc (cores)
, dataIndex: 'cpu_allocatable', key: 'cpu_allocatable', width: 80, sorter: true, align: 'left', }, { title:
Memory Usage (bytes)
, dataIndex: 'memory', key: 'memory', width: 80, sorter: true, align: 'left', }, { title:
Memory Alloc (bytes)
, dataIndex: 'memory_allocatable', key: 'memory_allocatable', width: 80, sorter: true, align: 'left', }, ]; export const getK8sNodesListColumns = ( groupBy: IBuilderQuery['groupBy'], ): ColumnType[] => { if (groupBy.length > 0) { const filteredColumns = [...columnsConfig].filter( (column) => column.key !== 'nodeName', ); filteredColumns.unshift(nodeGroupColumnConfig); return filteredColumns as ColumnType[]; } return columnsConfig as ColumnType[]; }; const getGroupByEle = ( node: K8sNodesData, groupBy: IBuilderQuery['groupBy'], ): React.ReactNode => { const groupByValues: string[] = []; groupBy.forEach((group) => { groupByValues.push(node.meta[group.key as keyof typeof node.meta]); }); return (
{groupByValues.map((value) => ( {value === '' ? '' : value} ))}
); }; export const formatDataForTable = ( data: K8sNodesData[], groupBy: IBuilderQuery['groupBy'], ): K8sNodesRowData[] => data.map((node, index) => ({ key: `${node.nodeUID}-${index}`, nodeUID: node.nodeUID || '', nodeName: ( {node.meta.k8s_node_name || ''} ), clusterName: node.meta.k8s_cluster_name, cpu: ( {node.nodeCPUUsage} ), memory: ( {formatBytes(node.nodeMemoryUsage)} ), cpu_allocatable: ( {node.nodeCPUAllocatable} ), memory_allocatable: ( {formatBytes(node.nodeMemoryAllocatable)} ), nodeGroup: getGroupByEle(node, groupBy), meta: node.meta, ...node.meta, groupedByMeta: node.meta, }));