[] = [
{
name: COLUMNS_NAMES.VERSIONS,
header: COLUMNS_TITLES[COLUMNS_NAMES.VERSIONS],
width: 400,
defaultOrder: DataTable.DESCENDING,
sortAccessor: ({preparedVersions}) => getFirstVersion(preparedVersions),
render: ({row}) => {
return ;
},
},
{
name: COLUMNS_NAMES.COMPUTE_NODES_VERSIONS,
header: COLUMNS_TITLES[COLUMNS_NAMES.COMPUTE_NODES_VERSIONS],
width: 400,
defaultOrder: DataTable.DESCENDING,
sortAccessor: ({preparedComputeVersions}) => getFirstVersion(preparedComputeVersions),
render: ({row}) => {
return ;
},
},
{
name: COLUMNS_NAMES.STORAGE_NODES_VERSIONS,
header: COLUMNS_TITLES[COLUMNS_NAMES.STORAGE_NODES_VERSIONS],
width: 400,
defaultOrder: DataTable.DESCENDING,
sortAccessor: ({preparedStorageVersions}) => getFirstVersion(preparedStorageVersions),
render: ({row}) => {
return ;
},
},
{
name: COLUMNS_NAMES.STATUS,
header: COLUMNS_TITLES[COLUMNS_NAMES.STATUS],
width: 180,
sortable: true,
render: ({row}) => {
return ;
},
},
{
name: COLUMNS_NAMES.SERVICE,
header: COLUMNS_TITLES[COLUMNS_NAMES.SERVICE],
width: 100,
sortable: true,
},
{
name: COLUMNS_NAMES.DOMAIN,
header: COLUMNS_TITLES[COLUMNS_NAMES.DOMAIN],
width: 170,
sortable: true,
},
{
name: COLUMNS_NAMES.GALAXY,
header: COLUMNS_TITLES[COLUMNS_NAMES.GALAXY],
width: 120,
sortable: true,
render: ({row}) => {
return row.galaxy || EMPTY_CELL;
},
},
{
name: COLUMNS_NAMES.DC,
header: COLUMNS_TITLES[COLUMNS_NAMES.DC],
width: 120,
sortable: false,
render: ({row}) => {
const dc = (row.cluster && row.cluster.DataCenters) || [];
return (
// For some reason DC list could contain empty strings
{dc.filter(Boolean).join(', ') || EMPTY_CELL}
);
},
},
{
name: COLUMNS_NAMES.NODES,
header: COLUMNS_TITLES[COLUMNS_NAMES.NODES],
width: 170,
resizeMinWidth: 170,
defaultOrder: DataTable.DESCENDING,
sortAccessor: ({cluster = {}}) => {
const {NodesTotal = 0} = cluster;
return NodesTotal;
},
render: ({row}) => {
const {NodesAlive = 0, NodesTotal = 0, Overall} = row.cluster || {};
if (!Overall) {
return EMPTY_CELL;
}
return (
);
},
},
{
name: COLUMNS_NAMES.LOAD,
header: COLUMNS_TITLES[COLUMNS_NAMES.LOAD],
width: 170,
resizeMinWidth: 170,
defaultOrder: DataTable.DESCENDING,
sortAccessor: ({cluster}) => {
return cluster?.NumberOfCpus || 0;
},
render: ({row}) => {
const {
LoadAverage = 0,
NumberOfCpus = 0,
RealNumberOfCpus,
Overall,
} = row.cluster || {};
if (!Overall) {
return EMPTY_CELL;
}
return (
);
},
},
{
name: COLUMNS_NAMES.STORAGE,
header: COLUMNS_TITLES[COLUMNS_NAMES.STORAGE],
width: 170,
resizeMinWidth: 170,
defaultOrder: DataTable.DESCENDING,
sortAccessor: ({cluster}) => {
return Number(cluster?.StorageTotal) || 0;
},
render: ({row}) => {
const {StorageUsed = 0, StorageTotal = 0, Overall} = row.cluster || {};
if (!Overall) {
return EMPTY_CELL;
}
const [valueString, capacityString] = formatStorageValuesToTb(
Number(StorageUsed),
Number(StorageTotal),
);
return (
);
},
},
{
name: COLUMNS_NAMES.HOSTS,
header: COLUMNS_TITLES[COLUMNS_NAMES.HOSTS],
width: 80,
defaultOrder: DataTable.DESCENDING,
sortAccessor: ({cluster}) => {
return Number(cluster?.Hosts) || 0;
},
render: ({row}) => {
return Number(row.cluster?.Hosts) || EMPTY_CELL;
},
},
{
name: COLUMNS_NAMES.TENANTS,
header: COLUMNS_TITLES[COLUMNS_NAMES.TENANTS],
width: 80,
defaultOrder: DataTable.DESCENDING,
sortAccessor: ({cluster}) => {
return Number(cluster?.Tenants) || 0;
},
render: ({row}) => {
return Number(row.cluster?.Tenants) || EMPTY_CELL;
},
},
{
name: COLUMNS_NAMES.DESCRIPTION,
header: COLUMNS_TITLES[COLUMNS_NAMES.DESCRIPTION],
sortable: false,
width: 200,
render: ({row}) => {
return row.description ? (
{row.description}
) : (
EMPTY_CELL
);
},
},
];
interface VersionsProps {
row: PreparedCluster;
preparedVersions: PreparedVersion[];
}
function Versions({row, preparedVersions}: VersionsProps) {
const hasErrors = !preparedVersions.length || preparedVersions.some((item) => !item.version);
if (hasErrors) {
return EMPTY_CELL;
}
const clusterPath = calculateClusterPath(row, clusterTabsIds.versions);
return (
);
}
export function getClustersColumns(params: ClustersColumnsParams) {
return [getTitleColumn(params), ...CLUSTERS_COLUMNS];
}
function ClustersTableProgressBar({
value,
capacity,
description,
}: {
value: number;
capacity: number;
description?: string;
}) {
const usage = capacity ? (value / capacity) * 100 : 0;
return (
{description}
);
}