142 lines
3.6 KiB
JavaScript
142 lines
3.6 KiB
JavaScript
|
import { differenceInSeconds } from '~/lib/utils/datetime_utility';
|
||
|
|
||
|
export function generateServicePortsString(ports) {
|
||
|
if (!ports?.length) return '';
|
||
|
|
||
|
return ports
|
||
|
.map((port) => {
|
||
|
const nodePort = port.nodePort ? `:${port.nodePort}` : '';
|
||
|
return `${port.port}${nodePort}/${port.protocol}`;
|
||
|
})
|
||
|
.join(', ');
|
||
|
}
|
||
|
|
||
|
export function getServiceAge(creationTimestamp) {
|
||
|
if (!creationTimestamp) return '';
|
||
|
|
||
|
const timeDifference = differenceInSeconds(new Date(creationTimestamp), new Date());
|
||
|
|
||
|
const seconds = Math.floor(timeDifference);
|
||
|
const minutes = Math.floor(seconds / 60) % 60;
|
||
|
const hours = Math.floor(seconds / 60 / 60) % 24;
|
||
|
const days = Math.floor(seconds / 60 / 60 / 24);
|
||
|
|
||
|
let ageString;
|
||
|
if (days > 0) {
|
||
|
ageString = `${days}d`;
|
||
|
} else if (hours > 0) {
|
||
|
ageString = `${hours}h`;
|
||
|
} else if (minutes > 0) {
|
||
|
ageString = `${minutes}m`;
|
||
|
} else {
|
||
|
ageString = `${seconds}s`;
|
||
|
}
|
||
|
|
||
|
return ageString;
|
||
|
}
|
||
|
|
||
|
export function getDeploymentsStatuses(items) {
|
||
|
const failed = [];
|
||
|
const ready = [];
|
||
|
|
||
|
items.forEach((item) => {
|
||
|
const [available, progressing] = item.status?.conditions ?? [];
|
||
|
// eslint-disable-next-line @gitlab/require-i18n-strings
|
||
|
if (available.status === 'True') {
|
||
|
ready.push(item);
|
||
|
// eslint-disable-next-line @gitlab/require-i18n-strings
|
||
|
} else if (available.status !== 'True' && progressing.status !== 'True') {
|
||
|
failed.push(item);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
return {
|
||
|
...(failed.length && { failed }),
|
||
|
...(ready.length && { ready }),
|
||
|
};
|
||
|
}
|
||
|
|
||
|
export function getDaemonSetStatuses(items) {
|
||
|
const failed = items.filter((item) => {
|
||
|
return (
|
||
|
item.status?.numberMisscheduled > 0 ||
|
||
|
item.status?.numberReady !== item.status?.desiredNumberScheduled
|
||
|
);
|
||
|
});
|
||
|
const ready = items.filter((item) => {
|
||
|
return (
|
||
|
item.status?.numberReady === item.status?.desiredNumberScheduled &&
|
||
|
!item.status?.numberMisscheduled
|
||
|
);
|
||
|
});
|
||
|
|
||
|
return {
|
||
|
...(failed.length && { failed }),
|
||
|
...(ready.length && { ready }),
|
||
|
};
|
||
|
}
|
||
|
|
||
|
export function getStatefulSetStatuses(items) {
|
||
|
const failed = items.filter((item) => {
|
||
|
return item.status?.readyReplicas < item.spec?.replicas;
|
||
|
});
|
||
|
const ready = items.filter((item) => {
|
||
|
return item.status?.readyReplicas === item.spec?.replicas;
|
||
|
});
|
||
|
|
||
|
return {
|
||
|
...(failed.length && { failed }),
|
||
|
...(ready.length && { ready }),
|
||
|
};
|
||
|
}
|
||
|
|
||
|
export function getReplicaSetStatuses(items) {
|
||
|
const failed = items.filter((item) => {
|
||
|
return item.status?.readyReplicas < item.spec?.replicas;
|
||
|
});
|
||
|
const ready = items.filter((item) => {
|
||
|
return item.status?.readyReplicas === item.spec?.replicas;
|
||
|
});
|
||
|
|
||
|
return {
|
||
|
...(failed.length && { failed }),
|
||
|
...(ready.length && { ready }),
|
||
|
};
|
||
|
}
|
||
|
|
||
|
export function getJobsStatuses(items) {
|
||
|
const failed = items.filter((item) => {
|
||
|
return item.status.failed > 0 || item.status?.succeeded !== item.spec?.completions;
|
||
|
});
|
||
|
const completed = items.filter((item) => {
|
||
|
return item.status?.succeeded === item.spec?.completions;
|
||
|
});
|
||
|
|
||
|
return {
|
||
|
...(failed.length && { failed }),
|
||
|
...(completed.length && { completed }),
|
||
|
};
|
||
|
}
|
||
|
|
||
|
export function getCronJobsStatuses(items) {
|
||
|
const failed = [];
|
||
|
const ready = [];
|
||
|
const suspended = [];
|
||
|
|
||
|
items.forEach((item) => {
|
||
|
if (item.status?.active > 0 && !item.status?.lastScheduleTime) {
|
||
|
failed.push(item);
|
||
|
} else if (item.spec?.suspend) {
|
||
|
suspended.push(item);
|
||
|
} else if (item.status?.lastScheduleTime) {
|
||
|
ready.push(item);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
return {
|
||
|
...(failed.length && { failed }),
|
||
|
...(suspended.length && { suspended }),
|
||
|
...(ready.length && { ready }),
|
||
|
};
|
||
|
}
|