private _parsePodInfo()

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);
    }
  }