From 4377cd8102e8dd049c06f1ee5005dd949d18a3ae Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Tue, 20 Dec 2022 16:34:43 +0300 Subject: [PATCH] Fix: load pods from all namespaces in node details (#6794) * Load pods from all namespaces in Node details Signed-off-by: Alex Andreev * Lint fixes Signed-off-by: Alex Andreev Signed-off-by: Alex Andreev Signed-off-by: Sebastian Malton --- src/renderer/components/+nodes/details.tsx | 12 ++++++-- ...oad-pods-from-all-namespaces.injectable.ts | 28 +++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 src/renderer/components/+workloads-pods/load-pods-from-all-namespaces.injectable.ts diff --git a/src/renderer/components/+nodes/details.tsx b/src/renderer/components/+nodes/details.tsx index f71d5bfa5f..ba363f160c 100644 --- a/src/renderer/components/+nodes/details.tsx +++ b/src/renderer/components/+nodes/details.tsx @@ -21,7 +21,7 @@ import { KubeObjectMeta } from "../kube-object-meta"; import { ClusterMetricsResourceType } from "../../../common/cluster-types"; import { NodeDetailsResources } from "./details-resources"; import { DrawerTitle } from "../drawer/drawer-title"; -import logger from "../../../common/logger"; +import type { Logger } from "../../../common/logger"; import { withInjectables } from "@ogre-tools/injectable-react"; import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api"; import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable"; @@ -31,6 +31,8 @@ import type { GetActiveClusterEntity } from "../../api/catalog/entity/get-active import getActiveClusterEntityInjectable from "../../api/catalog/entity/get-active-cluster-entity.injectable"; import type { ClusterMetricData, RequestClusterMetricsByNodeNames } from "../../../common/k8s-api/endpoints/metrics.api/request-cluster-metrics-by-node-names.injectable"; import requestClusterMetricsByNodeNamesInjectable from "../../../common/k8s-api/endpoints/metrics.api/request-cluster-metrics-by-node-names.injectable"; +import loggerInjectable from "../../../common/logger.injectable"; +import loadPodsFromAllNamespacesInjectable from "../+workloads-pods/load-pods-from-all-namespaces.injectable"; export interface NodeDetailsProps extends KubeObjectDetailsProps { } @@ -40,6 +42,8 @@ interface Dependencies { podStore: PodStore; getActiveClusterEntity: GetActiveClusterEntity; requestClusterMetricsByNodeNames: RequestClusterMetricsByNodeNames; + logger: Logger; + loadPodsFromAllNamespaces: () => void; } @observer @@ -61,6 +65,8 @@ class NonInjectedNodeDetails extends React.Component { @@ -77,7 +83,7 @@ class NonInjectedNodeDetails extends React.Component(NonIn podStore: di.inject(podStoreInjectable), getActiveClusterEntity: di.inject(getActiveClusterEntityInjectable), requestClusterMetricsByNodeNames: di.inject(requestClusterMetricsByNodeNamesInjectable), + logger: di.inject(loggerInjectable), + loadPodsFromAllNamespaces: di.inject(loadPodsFromAllNamespacesInjectable), }), }); diff --git a/src/renderer/components/+workloads-pods/load-pods-from-all-namespaces.injectable.ts b/src/renderer/components/+workloads-pods/load-pods-from-all-namespaces.injectable.ts new file mode 100644 index 0000000000..f6e96d5b79 --- /dev/null +++ b/src/renderer/components/+workloads-pods/load-pods-from-all-namespaces.injectable.ts @@ -0,0 +1,28 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import { getInjectable } from "@ogre-tools/injectable"; +import namespaceStoreInjectable from "../+namespaces/store.injectable"; +import showErrorNotificationInjectable from "../notifications/show-error-notification.injectable"; +import podStoreInjectable from "./store.injectable"; + +const loadPodsFromAllNamespacesInjectable = getInjectable({ + id: "load-pods-from-all-namespaces", + instantiate: (di) => { + const podStore = di.inject(podStoreInjectable); + const namespaceStore = di.inject(namespaceStoreInjectable); + const showErrorNotification = di.inject(showErrorNotificationInjectable); + + return () => { + podStore.loadAll({ + namespaces: [...namespaceStore.getItems().map(ns => ns.getName())], + onLoadFailure: error => + showErrorNotification(`Can not load Pods. ${String(error)}`), + }); + }; + }, +}); + +export default loadPodsFromAllNamespacesInjectable;