diff --git a/src/renderer/components/+cluster/cluster-metric-switchers.tsx b/src/renderer/components/+cluster/cluster-metric-switchers.tsx index 716084026d..7c072118dc 100644 --- a/src/renderer/components/+cluster/cluster-metric-switchers.tsx +++ b/src/renderer/components/+cluster/cluster-metric-switchers.tsx @@ -24,7 +24,7 @@ const NonInjectedClusterMetricSwitchers = observer(({ nodeStore, }: Dependencies) => { const { masterNodes, workerNodes } = nodeStore; - const { cpuUsage, memoryUsage } = clusterOverviewStore.metrics; + const { cpuUsage, memoryUsage } = clusterOverviewStore.metrics ?? {}; const hasMasterNodes = masterNodes.length > 0; const hasWorkerNodes = workerNodes.length > 0; const hasCpuMetrics = normalizeMetrics(cpuUsage).data.result[0].values.length > 0; diff --git a/src/renderer/components/+cluster/cluster-metrics.tsx b/src/renderer/components/+cluster/cluster-metrics.tsx index e744383a94..028885e7f3 100644 --- a/src/renderer/components/+cluster/cluster-metrics.tsx +++ b/src/renderer/components/+cluster/cluster-metrics.tsx @@ -26,8 +26,8 @@ interface Dependencies { const NonInjectedClusterMetrics = observer(({ clusterOverviewStore: { metricType, metricNodeRole, getMetricsValues, metricsLoaded, metrics }}: Dependencies) => { const [plugins] = useState([new ZebraStripesPlugin()]); - const { memoryCapacity, cpuCapacity } = getMetricLastPoints(metrics); - const metricValues = getMetricsValues(metrics); + const { memoryCapacity, cpuCapacity } = getMetricLastPoints(metrics ?? {}); + const metricValues = getMetricsValues(metrics ?? {}); const colors = { cpu: "#3D90CE", memory: "#C93DCE" }; const data = metricValues.map(value => ({ x: value[0], diff --git a/src/renderer/components/+cluster/cluster-overview-store/cluster-overview-store.injectable.ts b/src/renderer/components/+cluster/cluster-overview-store/cluster-overview-store.injectable.ts index b81cb5c3ac..2b19614bb6 100644 --- a/src/renderer/components/+cluster/cluster-overview-store/cluster-overview-store.injectable.ts +++ b/src/renderer/components/+cluster/cluster-overview-store/cluster-overview-store.injectable.ts @@ -12,6 +12,7 @@ import clusterApiInjectable from "../../../../common/k8s-api/endpoints/cluster.a import storesAndApisCanBeCreatedInjectable from "../../../stores-apis-can-be-created.injectable"; import assert from "assert"; import nodeStoreInjectable from "../../+nodes/store.injectable"; +import requestClusterMetricsByNodeNamesInjectable from "../../../../common/k8s-api/endpoints/metrics.api/get-cluster-metrics-by-node-names.injectable"; const clusterOverviewStoreInjectable = getInjectable({ id: "cluster-overview-store", @@ -30,6 +31,7 @@ const clusterOverviewStoreInjectable = getInjectable({ }, ), nodeStore: di.inject(nodeStoreInjectable), + requestClusterMetricsByNodeNames: di.inject(requestClusterMetricsByNodeNamesInjectable), }, clusterApi); }, injectionToken: kubeObjectStoreInjectionToken, diff --git a/src/renderer/components/+cluster/cluster-overview-store/cluster-overview-store.ts b/src/renderer/components/+cluster/cluster-overview-store/cluster-overview-store.ts index 31fcd8af39..23eff55615 100644 --- a/src/renderer/components/+cluster/cluster-overview-store/cluster-overview-store.ts +++ b/src/renderer/components/+cluster/cluster-overview-store/cluster-overview-store.ts @@ -37,6 +37,10 @@ interface ClusterOverviewStoreDependencies { export class ClusterOverviewStore extends KubeObjectStore implements ClusterOverviewStorageState { @observable metrics: ClusterMetricData | undefined = undefined; + get metricsLoaded() { + return !!this.metrics; + } + get metricType(): MetricType { return this.dependencies.storage.get().metricType; } diff --git a/src/renderer/components/+workloads-pods/pod-details-container.tsx b/src/renderer/components/+workloads-pods/pod-details-container.tsx index 263192473c..947dec01ac 100644 --- a/src/renderer/components/+workloads-pods/pod-details-container.tsx +++ b/src/renderer/components/+workloads-pods/pod-details-container.tsx @@ -105,7 +105,7 @@ class NonInjectedPodDetailsContainer extends React.Component {name} - {!isMetricHidden && !isInitContainer && ( + {(!isMetricHidden && !isInitContainer && metrics) && ( { loader?: () => void; interval?: number; className?: string; - metrics: Record | null | undefined; + metrics: Partial> | null | undefined; children: React.ReactChild | React.ReactChild[]; }