From 83f4a53eaab97c46ba75574d2ca5f2b544547e39 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 9 Mar 2023 09:53:26 -0500 Subject: [PATCH] Optimize DaemonSet workloads status computation Signed-off-by: Sebastian Malton --- .../statuses.injectable.ts | 20 ++++++++++ .../total-count.injectable.ts | 18 +++++++++ .../daemonsets-workload.injectable.ts | 40 ++++++------------- 3 files changed, 51 insertions(+), 27 deletions(-) create mode 100644 packages/core/src/renderer/components/+workloads-daemonsets/statuses.injectable.ts create mode 100644 packages/core/src/renderer/components/+workloads-daemonsets/total-count.injectable.ts diff --git a/packages/core/src/renderer/components/+workloads-daemonsets/statuses.injectable.ts b/packages/core/src/renderer/components/+workloads-daemonsets/statuses.injectable.ts new file mode 100644 index 0000000000..bb63dbb641 --- /dev/null +++ b/packages/core/src/renderer/components/+workloads-daemonsets/statuses.injectable.ts @@ -0,0 +1,20 @@ +/** + * 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 { computed } from "mobx"; +import computeStatusCountsForOwnersInjectable from "../../utils/compute-status-counts.injectable"; +import daemonSetStoreInjectable from "./store.injectable"; + +const totalStatusesForDaemonSetsInSelectedNamespacesInjectable = getInjectable({ + id: "total-statuses-for-daemon-sets-in-selected-namespaces", + instantiate: (di) => { + const daemonSetStore = di.inject(daemonSetStoreInjectable); + const computeStatusCountsForOwners = di.inject(computeStatusCountsForOwnersInjectable); + + return computed(() => computeStatusCountsForOwners(daemonSetStore.contextItems)); + }, +}); + +export default totalStatusesForDaemonSetsInSelectedNamespacesInjectable; diff --git a/packages/core/src/renderer/components/+workloads-daemonsets/total-count.injectable.ts b/packages/core/src/renderer/components/+workloads-daemonsets/total-count.injectable.ts new file mode 100644 index 0000000000..0185fdfe2c --- /dev/null +++ b/packages/core/src/renderer/components/+workloads-daemonsets/total-count.injectable.ts @@ -0,0 +1,18 @@ +/** + * 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 { computed } from "mobx"; +import daemonSetStoreInjectable from "./store.injectable"; + +const totalCountOfDaemonSetsInSelectedNamespacesInjectable = getInjectable({ + id: "total-count-of-daemon-sets-in-selected-namespaces", + instantiate: (di) => { + const daemonSetStore = di.inject(daemonSetStoreInjectable); + + return computed(() => daemonSetStore.getTotalCount()); + }, +}); + +export default totalCountOfDaemonSetsInSelectedNamespacesInjectable; diff --git a/packages/core/src/renderer/components/+workloads-overview/workloads/implementations/daemonsets-workload.injectable.ts b/packages/core/src/renderer/components/+workloads-overview/workloads/implementations/daemonsets-workload.injectable.ts index 7b6d7d750f..ca8147c1f5 100644 --- a/packages/core/src/renderer/components/+workloads-overview/workloads/implementations/daemonsets-workload.injectable.ts +++ b/packages/core/src/renderer/components/+workloads-overview/workloads/implementations/daemonsets-workload.injectable.ts @@ -5,38 +5,24 @@ import { getInjectable } from "@ogre-tools/injectable"; import { workloadInjectionToken } from "../workload-injection-token"; import { ResourceNames } from "../../../../utils/rbac"; -import namespaceStoreInjectable from "../../../+namespaces/store.injectable"; -import daemonsetsStoreInjectable from "../../../+workloads-daemonsets/store.injectable"; import navigateToDaemonsetsInjectable from "../../../../../common/front-end-routing/routes/cluster/workloads/daemonsets/navigate-to-daemonsets.injectable"; -import { computed } from "mobx"; +import totalCountOfDaemonSetsInSelectedNamespacesInjectable from "../../../+workloads-daemonsets/total-count.injectable"; +import totalStatusesForDaemonSetsInSelectedNamespacesInjectable from "../../../+workloads-daemonsets/statuses.injectable"; const daemonsetsWorkloadInjectable = getInjectable({ id: "daemonsets-workload", - instantiate: (di) => { - const navigate = di.inject(navigateToDaemonsetsInjectable); - const namespaceStore = di.inject(namespaceStoreInjectable); - const store = di.inject(daemonsetsStoreInjectable); - - return { - resource: { - apiName: "daemonsets", - group: "apps", - }, - open: navigate, - - amountOfItems: computed( - () => store.getAllByNs(namespaceStore.contextNamespaces).length, - ), - - status: computed(() => - store.getStatuses(store.getAllByNs(namespaceStore.contextNamespaces)), - ), - - title: ResourceNames.daemonsets, - orderNumber: 30, - }; - }, + instantiate: (di) => ({ + resource: { + apiName: "daemonsets", + group: "apps", + }, + open: di.inject(navigateToDaemonsetsInjectable), + amountOfItems: di.inject(totalCountOfDaemonSetsInSelectedNamespacesInjectable), + status: di.inject(totalStatusesForDaemonSetsInSelectedNamespacesInjectable), + title: ResourceNames.daemonsets, + orderNumber: 30, + }), injectionToken: workloadInjectionToken, });