diff --git a/src/renderer/api/endpoints/pods.api.ts b/src/renderer/api/endpoints/pods.api.ts index e1c91f6e36..65c2ecb1bf 100644 --- a/src/renderer/api/endpoints/pods.api.ts +++ b/src/renderer/api/endpoints/pods.api.ts @@ -152,7 +152,16 @@ export interface IPodContainerStatus { reason: string; }; }; - lastState: {}; + lastState: { + [index: string]: object; + terminated?: { + startedAt: string; + finishedAt: string; + exitCode: number; + reason: string; + containerID: string; + }; + }; ready: boolean; restartCount: number; image: string; diff --git a/src/renderer/components/+workloads-pods/pod-details-container.tsx b/src/renderer/components/+workloads-pods/pod-details-container.tsx index 79180b1130..df00721afd 100644 --- a/src/renderer/components/+workloads-pods/pod-details-container.tsx +++ b/src/renderer/components/+workloads-pods/pod-details-container.tsx @@ -2,7 +2,7 @@ import "./pod-details-container.scss" import React from "react"; import { t, Trans } from "@lingui/macro"; -import { IPodContainer, Pod } from "../../api/endpoints"; +import { IPodContainer, IPodContainerStatus, Pod } from "../../api/endpoints"; import { DrawerItem } from "../drawer"; import { cssNames } from "../../utils"; import { StatusBrick } from "../status-brick"; @@ -21,12 +21,37 @@ interface Props { } export class PodDetailsContainer extends React.Component { + + renderStatus(state: string, status: IPodContainerStatus) { + const ready = status ? status.ready : "" + return ( + + {state}{ready ? `, ${_i18n._(t`ready`)}` : ""} + {state === 'terminated' ? ` - ${status.state.terminated.reason} (${_i18n._(t`exit code`)}: ${status.state.terminated.exitCode})` : ''} + + ); + } + + renderLastState(lastState: string, status: IPodContainerStatus) { + if (lastState === 'terminated') { + return ( + + {lastState}
+ {_i18n._(t`Reason`)}: {status.lastState.terminated.reason} - {_i18n._(t`exit code`)}: {status.lastState.terminated.exitCode}
+ {_i18n._(t`Started at`)}: {status.lastState.terminated.startedAt}
+ {_i18n._(t`Finished at`)}: {status.lastState.terminated.finishedAt}
+
+ ) + } + } + render() { const { pod, container, metrics } = this.props if (!pod || !container) return null const { name, image, imagePullPolicy, ports, volumeMounts, command, args } = container const status = pod.getContainerStatuses().find(status => status.name === container.name) const state = status ? Object.keys(status.state)[0] : "" + const lastState = status ? Object.keys(status.lastState)[0] : "" const ready = status ? status.ready : "" const liveness = pod.getLivenessProbe(container) const readiness = pod.getReadinessProbe(container) @@ -48,10 +73,12 @@ export class PodDetailsContainer extends React.Component { } {status && Status}> - - {state}{ready ? `, ${_i18n._(t`ready`)}` : ""} - {state === 'terminated' ? ` - ${status.state.terminated.reason} (${_i18n._(t`exit code`)}: ${status.state.terminated.exitCode})` : ''} - + {this.renderStatus(state, status)} + + } + {lastState && + Last Status}> + {this.renderLastState(lastState, status)} } Image}>