in web/src/app/services/graph-converter.service.ts [283:405]
private _parsePodInfo(
timelines: MappedTimelineEntry,
t: number,
podTimeline: ResourceTimeline,
podManifest: k8s.K8sPodResource,
dest: PodGraphDataGroupedByNode,
) {
const podName = podTimeline.getNameOfLayer(TimelineLayer.Name);
const podNamespace = podTimeline.getNameOfLayer(TimelineLayer.Namespace);
const podSpec = podManifest.spec;
if (!podSpec) return;
let nodeName = podSpec.nodeName;
if (!nodeName) {
const bindingResource = timelines[`${podTimeline.resourcePath}#binding`];
if (bindingResource) {
const bindingManifest = bindingResource.getLatestRevisionOfTime(t);
const bindingResourceManifest = bindingManifest?.parsedManifest;
if (bindingResourceManifest) {
nodeName = (
bindingResourceManifest as unknown as k8s.K8sPodBindingResource
).target?.name;
}
}
if (!nodeName) {
return;
}
}
if (!(nodeName in dest)) dest[nodeName] = [];
const containerGraphData: ContainerGraphDataMap = {};
if (podSpec.initContainers) {
for (const container of podSpec.initContainers) {
containerGraphData[container.name] = {
name: container.name,
status: 'Unknown',
isInitContainer: true,
isStatusHealthy: false,
ready: false,
code: 0,
reason: 'Unknown',
statusReadFromManifest: false,
};
}
}
if (podSpec.containers) {
for (const container of podSpec.containers) {
containerGraphData[container.name] = {
name: container.name,
status: 'Unknown',
isInitContainer: false,
isStatusHealthy: false,
ready: false,
code: 0,
reason: 'Unknown',
statusReadFromManifest: false,
};
}
}
const podStatus = podManifest.status;
if (podStatus) {
if (podStatus.initContainerStatuses) {
for (const containerStatus of podStatus.initContainerStatuses) {
containerGraphData[containerStatus.name].statusReadFromManifest =
true;
containerGraphData[containerStatus.name].ready =
containerStatus.ready;
this._convertContainerStatusStateToString(
containerStatus.state,
containerGraphData[containerStatus.name],
);
}
}
if (podStatus.containerStatuses) {
for (const containerStatus of podStatus.containerStatuses) {
containerGraphData[containerStatus.name].statusReadFromManifest =
true;
containerGraphData[containerStatus.name].ready =
containerStatus.ready;
this._convertContainerStatusStateToString(
containerStatus.state,
containerGraphData[containerStatus.name],
);
}
}
}
const podPhase = podManifest.status?.phase ?? 'Unknown';
const ownerUids = new Set<string>();
if (podManifest.metadata?.ownerReferences) {
for (const owner of podManifest.metadata.ownerReferences) {
ownerUids.add(owner.uid);
}
}
const podGraphResource: PodGraphData = {
uid: podManifest.metadata?.uid,
name: podName,
namespace: podNamespace,
labels: podManifest.metadata?.labels ?? {},
containers: Object.values(containerGraphData),
podIP: podManifest.status?.podIP ?? '-',
phase: podPhase,
isPhaseHealthy: podPhase == 'Running' || podPhase == 'Completed',
conditions: this._parseConditions('pod', podManifest.status),
ownerUids,
};
if (
this._checkDeletionThresholdAndUpdateTimestamp(
t,
timelines,
podTimeline,
podGraphResource,
)
) {
dest[nodeName].push(podGraphResource);
}
}