diff --git a/src/renderer/components/+workloads-daemonsets/daemonset-details.tsx b/src/renderer/components/+workloads-daemonsets/daemonset-details.tsx index 40c6026659..e159d72ab3 100644 --- a/src/renderer/components/+workloads-daemonsets/daemonset-details.tsx +++ b/src/renderer/components/+workloads-daemonsets/daemonset-details.tsx @@ -16,22 +16,16 @@ import type { DaemonSetStore } from "./store"; import type { PodStore } from "../+workloads-pods/store"; import type { KubeObjectDetailsProps } from "../kube-object-details"; import { DaemonSet } from "../../../common/k8s-api/endpoints"; -import { ResourceMetrics, ResourceMetricsText } from "../resource-metrics"; -import { PodCharts, podMetricTabs } from "../+workloads-pods/pod-charts"; -import { makeObservable, observable, reaction } from "mobx"; import { PodDetailsList } from "../+workloads-pods/pod-details-list"; -import { KubeObjectMeta } from "../kube-object-meta"; -import { ClusterMetricsResourceType } from "../../../common/cluster-types"; -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"; import daemonSetStoreInjectable from "./store.injectable"; import podStoreInjectable from "../+workloads-pods/store.injectable"; -import type { GetActiveClusterEntity } from "../../api/catalog/entity/get-active-cluster-entity.injectable"; import getActiveClusterEntityInjectable from "../../api/catalog/entity/get-active-cluster-entity.injectable"; -import type { DaemonSetPodMetricData, RequestPodMetricsForDaemonSets } from "../../../common/k8s-api/endpoints/metrics.api/request-pod-metrics-for-daemon-sets.injectable"; import requestPodMetricsForDaemonSetsInjectable from "../../../common/k8s-api/endpoints/metrics.api/request-pod-metrics-for-daemon-sets.injectable"; +import loggerInjectable from "../../../common/logger.injectable"; export interface DaemonSetDetailsProps extends KubeObjectDetailsProps { } @@ -40,38 +34,21 @@ interface Dependencies { subscribeStores: SubscribeStores; daemonSetStore: DaemonSetStore; podStore: PodStore; - getActiveClusterEntity: GetActiveClusterEntity; - requestPodMetricsForDaemonSets: RequestPodMetricsForDaemonSets; + logger: Logger; } @observer class NonInjectedDaemonSetDetails extends React.Component { - @observable metrics: DaemonSetPodMetricData | null = null; - - constructor(props: DaemonSetDetailsProps & Dependencies) { - super(props); - makeObservable(this); - } - componentDidMount() { disposeOnUnmount(this, [ - reaction(() => this.props.object, () => { - this.metrics = null; - }), this.props.subscribeStores([ this.props.podStore, ]), ]); } - loadMetrics = async () => { - const { object: daemonSet, requestPodMetricsForDaemonSets } = this.props; - - this.metrics = await requestPodMetricsForDaemonSets([daemonSet], daemonSet.getNs()); - }; - render() { - const { object: daemonSet, daemonSetStore, podStore, getActiveClusterEntity } = this.props; + const { object: daemonSet, daemonSetStore, logger } = this.props; if (!daemonSet) { return null; @@ -88,21 +65,9 @@ class NonInjectedDaemonSetDetails extends React.Component - {!isMetricHidden && podStore.isLoaded && ( - - - - )} - {selectors.length > 0 && ( { @@ -132,7 +97,6 @@ class NonInjectedDaemonSetDetails extends React.Component - ); @@ -147,5 +111,6 @@ export const DaemonSetDetails = withInjectables ({ + Component: ({ object }: KubeObjectDetailsProps) => ( + + + + ), + enabled: di.inject(enabledMetricsInjectable, ClusterMetricsResourceType.DaemonSet), + orderNumber: -1, + }), + injectionToken: kubeObjectDetailItemInjectionToken, +}); + +export default daemonSetMetricsDetailsComponentInjectable; diff --git a/src/renderer/components/+workloads-daemonsets/metrics.injectable.ts b/src/renderer/components/+workloads-daemonsets/metrics.injectable.ts new file mode 100644 index 0000000000..1b04daf976 --- /dev/null +++ b/src/renderer/components/+workloads-daemonsets/metrics.injectable.ts @@ -0,0 +1,27 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable"; +import { asyncComputed } from "@ogre-tools/injectable-react"; +import { now } from "mobx-utils"; +import type { DaemonSet } from "../../../common/k8s-api/endpoints"; +import requestPodMetricsForDaemonSetsInjectable from "../../../common/k8s-api/endpoints/metrics.api/request-pod-metrics-for-daemon-sets.injectable"; + +const daemonSetMetricsInjectable = getInjectable({ + id: "daemon-set-metrics", + instantiate: (di, daemonSet) => { + const requestPodMetricsForDaemonSets = di.inject(requestPodMetricsForDaemonSetsInjectable); + + return asyncComputed(() => { + now(60 * 1000); // update every minute + + return requestPodMetricsForDaemonSets([daemonSet], daemonSet.getNs()); + }); + }, + lifecycle: lifecycleEnum.keyedSingleton({ + getInstanceKey: (di, daemonSet: DaemonSet) => daemonSet.getId(), + }), +}); + +export default daemonSetMetricsInjectable;