From 8460832d0f78b6d38b569f634535d1b5a139fa1e Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 9 Mar 2023 10:04:30 -0500 Subject: [PATCH] Optimize StatefulSet workloads status computation Signed-off-by: Sebastian Malton --- .../statefulsets-workload.injectable.ts | 40 ++++++------------- .../statuses.injectable.ts | 20 ++++++++++ .../total-count.injectable.ts | 18 +++++++++ 3 files changed, 51 insertions(+), 27 deletions(-) create mode 100644 packages/core/src/renderer/components/+workloads-statefulsets/statuses.injectable.ts create mode 100644 packages/core/src/renderer/components/+workloads-statefulsets/total-count.injectable.ts diff --git a/packages/core/src/renderer/components/+workloads-overview/workloads/implementations/statefulsets-workload.injectable.ts b/packages/core/src/renderer/components/+workloads-overview/workloads/implementations/statefulsets-workload.injectable.ts index 19b85c4fa0..e0afb6150c 100644 --- a/packages/core/src/renderer/components/+workloads-overview/workloads/implementations/statefulsets-workload.injectable.ts +++ b/packages/core/src/renderer/components/+workloads-overview/workloads/implementations/statefulsets-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 statefulsetsStoreInjectable from "../../../+workloads-statefulsets/store.injectable"; -import { computed } from "mobx"; import navigateToStatefulsetsInjectable from "../../../../../common/front-end-routing/routes/cluster/workloads/statefulsets/navigate-to-statefulsets.injectable"; +import totalCountOfStatefulSetsInSelectedNamespacesInjectable from "../../../+workloads-statefulsets/total-count.injectable"; +import totalStatusesForStatefulSetsInSelectedNamespacesInjectable from "../../../+workloads-statefulsets/statuses.injectable"; const statefulsetsWorkloadInjectable = getInjectable({ id: "statefulsets-workload", - instantiate: (di) => { - const navigate = di.inject(navigateToStatefulsetsInjectable); - const namespaceStore = di.inject(namespaceStoreInjectable); - const store = di.inject(statefulsetsStoreInjectable); - - return { - resource: { - apiName: "statefulsets", - group: "apps", - }, - open: navigate, - - amountOfItems: computed( - () => store.getAllByNs(namespaceStore.contextNamespaces).length, - ), - - status: computed(() => - store.getStatuses(store.getAllByNs(namespaceStore.contextNamespaces)), - ), - - title: ResourceNames.statefulsets, - orderNumber: 40, - }; - }, + instantiate: (di) => ({ + resource: { + apiName: "statefulsets", + group: "apps", + }, + open: di.inject(navigateToStatefulsetsInjectable), + amountOfItems: di.inject(totalCountOfStatefulSetsInSelectedNamespacesInjectable), + status: di.inject(totalStatusesForStatefulSetsInSelectedNamespacesInjectable), + title: ResourceNames.statefulsets, + orderNumber: 40, + }), injectionToken: workloadInjectionToken, }); diff --git a/packages/core/src/renderer/components/+workloads-statefulsets/statuses.injectable.ts b/packages/core/src/renderer/components/+workloads-statefulsets/statuses.injectable.ts new file mode 100644 index 0000000000..6f4ace1f2b --- /dev/null +++ b/packages/core/src/renderer/components/+workloads-statefulsets/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 statefulSetStoreInjectable from "./store.injectable"; + +const totalStatusesForStatefulSetsInSelectedNamespacesInjectable = getInjectable({ + id: "total-statuses-for-stateful-sets-in-selected-namespaces", + instantiate: (di) => { + const statefulSetStore = di.inject(statefulSetStoreInjectable); + const computeStatusCountsForOwners = di.inject(computeStatusCountsForOwnersInjectable); + + return computed(() => computeStatusCountsForOwners(statefulSetStore.contextItems)); + }, +}); + +export default totalStatusesForStatefulSetsInSelectedNamespacesInjectable; diff --git a/packages/core/src/renderer/components/+workloads-statefulsets/total-count.injectable.ts b/packages/core/src/renderer/components/+workloads-statefulsets/total-count.injectable.ts new file mode 100644 index 0000000000..38e5322e55 --- /dev/null +++ b/packages/core/src/renderer/components/+workloads-statefulsets/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 statefulSetStoreInjectable from "./store.injectable"; + +const totalCountOfStatefulSetsInSelectedNamespacesInjectable = getInjectable({ + id: "total-count-of-stateful-sets-in-selected-namespaces", + instantiate: (di) => { + const statefulSetStore = di.inject(statefulSetStoreInjectable); + + return computed(() => statefulSetStore.getTotalCount()); + }, +}); + +export default totalCountOfStatefulSetsInSelectedNamespacesInjectable;