1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Change namespace metrics details to use more injectables

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2022-10-24 15:08:39 -04:00
parent a1c9b9a22b
commit 84dbb5f86a
2 changed files with 42 additions and 27 deletions

View File

@ -3,43 +3,31 @@
* Licensed under MIT License. See LICENSE in root directory for more information. * Licensed under MIT License. See LICENSE in root directory for more information.
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { asyncComputed } from "@ogre-tools/injectable-react";
import { computed } from "mobx";
import { now } from "mobx-utils";
import React from "react"; import React from "react";
import { PodCharts, podMetricTabs } from "../+workloads-pods/pod-charts"; import { PodCharts, podMetricTabs } from "../+workloads-pods/pod-charts";
import { ClusterMetricsResourceType } from "../../../common/cluster-types"; import { ClusterMetricsResourceType } from "../../../common/cluster-types";
import type { Namespace } from "../../../common/k8s-api/endpoints"; import type { Namespace } from "../../../common/k8s-api/endpoints";
import requestPodMetricsInNamespaceInjectable from "../../../common/k8s-api/endpoints/metrics.api/request-pod-metrics-in-namespace.injectable"; import enabledMetricsInjectable from "../../api/catalog/entity/metrics-enabled.injectable";
import getActiveClusterEntityInjectable from "../../api/catalog/entity/get-active-cluster-entity.injectable";
import type { KubeObjectDetailsProps } from "../kube-object-details"; import type { KubeObjectDetailsProps } from "../kube-object-details";
import { kubeObjectDetailItemInjectionToken } from "../kube-object-details/kube-object-detail-items/kube-object-detail-item-injection-token"; import { kubeObjectDetailItemInjectionToken } from "../kube-object-details/kube-object-detail-items/kube-object-detail-item-injection-token";
import { ResourceMetrics } from "../resource-metrics"; import { ResourceMetrics } from "../resource-metrics";
import namespaceMetricsInjectable from "./metrics.injectable";
const namespaceMetricsDetailsComponentInjectable = getInjectable({ const namespaceMetricsDetailsComponentInjectable = getInjectable({
id: "namespace-metrics-details-component", id: "namespace-metrics-details-component",
instantiate: (di) => { instantiate: (di) => ({
const getActiveClusterEntity = di.inject(getActiveClusterEntityInjectable); Component: ({ object }: KubeObjectDetailsProps<Namespace>) => (
const requestPodMetricsInNamespace = di.inject(requestPodMetricsInNamespaceInjectable); <ResourceMetrics
tabs={ podMetricTabs }
return { object={ object }
Component: (props: KubeObjectDetailsProps<Namespace>) => ( metrics={ di.inject(namespaceMetricsInjectable, object) }
<ResourceMetrics >
tabs={podMetricTabs} <PodCharts />
object={props.object} </ResourceMetrics>
metrics={asyncComputed(async () => { ),
now(60 * 1000); // Update every minute enabled: di.inject(enabledMetricsInjectable, ClusterMetricsResourceType.Namespace),
orderNumber: -1,
return requestPodMetricsInNamespace(props.object.getName()); }),
})}
>
<PodCharts />
</ResourceMetrics>
),
enabled: computed(() => !getActiveClusterEntity()?.isMetricHidden(ClusterMetricsResourceType.Namespace)),
orderNumber: -1,
};
},
injectionToken: kubeObjectDetailItemInjectionToken, injectionToken: kubeObjectDetailItemInjectionToken,
}); });

View File

@ -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 { Namespace } from "../../../common/k8s-api/endpoints";
import requestPodMetricsInNamespaceInjectable from "../../../common/k8s-api/endpoints/metrics.api/request-pod-metrics-in-namespace.injectable";
const namespaceMetricsInjectable = getInjectable({
id: "namespace-metrics",
instantiate: (di, namespace) => {
const requestPodMetricsInNamespace = di.inject(requestPodMetricsInNamespaceInjectable);
return asyncComputed(async () => {
now(60 * 1000); // Update every minute
return requestPodMetricsInNamespace(namespace.getName());
});
},
lifecycle: lifecycleEnum.keyedSingleton({
getInstanceKey: (di, namespace: Namespace) => namespace.getId(),
}),
});
export default namespaceMetricsInjectable;