Files
2026-05-18 19:59:01 +12:00

62 lines
1.6 KiB
TypeScript

import { Pod } from 'kubernetes-types/core/v1';
import { ContainerStatusInfo } from './types';
export function computePodStatus(pod: Pod): ContainerStatusInfo {
if (pod.metadata?.deletionTimestamp) {
return {
status: 'Terminating',
type: 'warn',
message: 'Pod is being deleted.',
};
}
const phase = pod.status?.phase;
const message = pod.status?.message;
const reason = pod.status?.reason;
const containerStatuses = pod.status?.containerStatuses ?? [];
switch (phase) {
case undefined:
return {
status: 'Unknown',
type: 'muted',
message: message || 'Pod status cannot be determined from the cluster.',
};
case 'Running': {
const total = containerStatuses.length;
const ready = containerStatuses.filter((c) => c.ready).length;
if (total > 0 && ready < total) {
return {
status: 'Running (not ready)',
type: 'warn',
message:
message ||
`${ready} of ${total} containers are ready. Check readiness probes.`,
};
}
return { status: 'Running', type: 'success' };
}
case 'Pending':
return {
status: 'Pending',
type: 'muted',
message: message || reason,
};
case 'Succeeded':
return { status: 'Succeeded', type: 'info', message };
case 'Failed':
return {
status: 'Failed',
type: 'danger',
message: message || reason || 'Pod failed.',
};
default:
return {
status: 'Unknown',
type: 'muted',
message: message || 'Pod status cannot be determined from the cluster.',
};
}
}