diff --git a/packages/core/src/common/k8s-api/endpoints/metrics.api/request-pod-metrics.injectable.ts b/packages/core/src/common/k8s-api/endpoints/metrics.api/request-pod-metrics.injectable.ts index d2de4f4d40..ca181e1f2b 100644 --- a/packages/core/src/common/k8s-api/endpoints/metrics.api/request-pod-metrics.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/metrics.api/request-pod-metrics.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import type { MetricData } from "../metrics.api"; -import type { Pod } from "@k8slens/kube-object"; +import type { Pod, Container } from "@k8slens/kube-object"; import requestMetricsInjectable from "./request-metrics.injectable"; export interface PodMetricData { @@ -21,16 +21,16 @@ export interface PodMetricData { memoryLimits: MetricData; } -export type RequestPodMetrics = (pods: Pod[], namespace: string, selector?: string) => Promise; +export type RequestPodMetrics = (pods: Pod[], namespace: string, container?: Container, selector?: string) => Promise; const requestPodMetricsInjectable = getInjectable({ id: "request-pod-metrics", instantiate: (di): RequestPodMetrics => { const requestMetrics = di.inject(requestMetricsInjectable); - return (pods, namespace, selector = "pod, namespace") => { + return (pods, namespace, container, selector = "pod, namespace") => { const podSelector = pods.map(pod => pod.getName()).join("|"); - const opts = { category: "pods", pods: podSelector, namespace, selector }; + const opts = { category: "pods", pods: podSelector, container: container?.name, namespace, selector }; return requestMetrics({ cpuUsage: opts, diff --git a/packages/core/src/renderer/components/workloads-pods/container-metrics.injectable.ts b/packages/core/src/renderer/components/workloads-pods/container-metrics.injectable.ts index 2491dd1753..e9cf98e2c4 100644 --- a/packages/core/src/renderer/components/workloads-pods/container-metrics.injectable.ts +++ b/packages/core/src/renderer/components/workloads-pods/container-metrics.injectable.ts @@ -5,9 +5,14 @@ import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable"; import { asyncComputed } from "@ogre-tools/injectable-react"; import { now } from "mobx-utils"; -import type { Pod } from "@k8slens/kube-object"; +import type { Pod, Container } from "@k8slens/kube-object"; import requestPodMetricsInjectable from "../../../common/k8s-api/endpoints/metrics.api/request-pod-metrics.injectable"; +interface PodContainerParams { + pod: Pod; + container: Container; +} + const podContainerMetricsInjectable = getInjectable({ id: "pod-container-metrics", instantiate: (di, pod) => { @@ -17,12 +22,14 @@ const podContainerMetricsInjectable = getInjectable({ getValueFromObservedPromise: () => { now(60 * 1000); - return requestPodMetrics([pod], pod.getNs(), "container, namespace"); + return requestPodMetrics([pod], pod.getNs(), container, "pod, container, namespace"); }, }); }, lifecycle: lifecycleEnum.keyedSingleton({ - getInstanceKey: (di, pod: Pod) => pod.getId(), + getInstanceKey: (di, { pod, container }: PodContainerParams) => { + return `${pod.getId()}-${container.name}`; + }, }), }); diff --git a/packages/core/src/renderer/components/workloads-pods/pod-details-container-metrics.tsx b/packages/core/src/renderer/components/workloads-pods/pod-details-container-metrics.tsx index d920fc9bd9..382444468c 100644 --- a/packages/core/src/renderer/components/workloads-pods/pod-details-container-metrics.tsx +++ b/packages/core/src/renderer/components/workloads-pods/pod-details-container-metrics.tsx @@ -48,6 +48,6 @@ const NonInjectedPodDetailsContainerMetrics = observer(({ pod, container, podCon export const PodDetailsContainerMetrics = withInjectables(NonInjectedPodDetailsContainerMetrics, { getProps: (di, props) => ({ ...props, - podContainerMetrics: di.inject(podContainerMetricsInjectable, props.pod), + podContainerMetrics: di.inject(podContainerMetricsInjectable, { pod: props.pod, container: props.container }), }), });