From ecd8af3892b2a6b19b852fd7ae24e7421384094f Mon Sep 17 00:00:00 2001 From: Juho Heikka Date: Wed, 5 Apr 2023 13:46:41 +0300 Subject: [PATCH] Add persistent volume claim details metrics injection token. Signed-off-by: Juho Heikka --- .../src/features/metrics/metrics-feature.ts | 13 ++++++++- ...able.tsx => metrics-details-component.tsx} | 18 +----------- ...istent-volume-claim-metrics.injectable.tsx | 29 +++++++++++++++++++ ...replica-set-details-metrics.injectable.tsx | 2 +- packages/metrics/index.ts | 5 ++++ 5 files changed, 48 insertions(+), 19 deletions(-) rename packages/core/src/renderer/components/+storage-volume-claims/{metrics-details-component.injectable.tsx => metrics-details-component.tsx} (55%) create mode 100644 packages/core/src/renderer/components/kube-object-details/kube-object-detail-items/metrics/persistent-volume-claim-metrics.injectable.tsx diff --git a/packages/core/src/features/metrics/metrics-feature.ts b/packages/core/src/features/metrics/metrics-feature.ts index 763f19e2d2..0cec9a218a 100644 --- a/packages/core/src/features/metrics/metrics-feature.ts +++ b/packages/core/src/features/metrics/metrics-feature.ts @@ -3,11 +3,12 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getFeature } from "@k8slens/feature-core"; -import { clusterOverviewUIBlockInjectionToken, deploymentDetailsMetricsInjectionToken, nodeDetailsMetricsInjectionToken, podDetailsContainerMetricsInjectionToken, podDetailsMetricsInjectionToken, replicaSetDetailsMetricsInjectionToken } from "@k8slens/metrics"; +import { clusterOverviewUIBlockInjectionToken, deploymentDetailsMetricsInjectionToken, nodeDetailsMetricsInjectionToken, persistentVolumeClaimDetailsMetricsInjectionToken, podDetailsContainerMetricsInjectionToken, podDetailsMetricsInjectionToken, replicaSetDetailsMetricsInjectionToken } from "@k8slens/metrics"; import { getInjectable } from "@ogre-tools/injectable"; import { ClusterMetrics } from "../../renderer/components/+cluster/cluster-metrics"; import { ClusterPieCharts } from "../../renderer/components/+cluster/cluster-pie-charts"; import { NodeMetricsDetailsComponent } from "../../renderer/components/+nodes/metrics-details-component"; +import { PersistentVolumeClaimMetricsDetailsComponent } from "../../renderer/components/+storage-volume-claims/metrics-details-component"; import { DeploymentMetricsDetailsComponent } from "../../renderer/components/+workloads-deployments/metrics-details-component"; import { PodDetailsContainerMetrics } from "../../renderer/components/+workloads-pods/pod-details-container-metrics"; import PodMetricsDetailsComponent from "../../renderer/components/+workloads-pods/pod-metrics-details-component"; @@ -82,6 +83,15 @@ const replicaSetDetailsMetricsInjectable = getInjectable({ injectionToken: replicaSetDetailsMetricsInjectionToken, }); +const persistentVolumeClaimDetailsMetricsInjectable = getInjectable({ + id: "persistent-volume-claim-details-metrics-injectable", + instantiate: () => ({ + id: "persistent-volume-claim-details-metrics", + Component: PersistentVolumeClaimMetricsDetailsComponent, + }), + injectionToken: persistentVolumeClaimDetailsMetricsInjectionToken, +}); + export const metricsFeature = getFeature({ id: "core-metrics-feature", @@ -94,5 +104,6 @@ export const metricsFeature = getFeature({ di.register(deploymentDetailsMetricsInjectable); di.register(nodeDetailsMetricsInjectable); di.register(replicaSetDetailsMetricsInjectable); + di.register(persistentVolumeClaimDetailsMetricsInjectable); }, }); diff --git a/packages/core/src/renderer/components/+storage-volume-claims/metrics-details-component.injectable.tsx b/packages/core/src/renderer/components/+storage-volume-claims/metrics-details-component.tsx similarity index 55% rename from packages/core/src/renderer/components/+storage-volume-claims/metrics-details-component.injectable.tsx rename to packages/core/src/renderer/components/+storage-volume-claims/metrics-details-component.tsx index b9edddf157..d59d04ba23 100644 --- a/packages/core/src/renderer/components/+storage-volume-claims/metrics-details-component.injectable.tsx +++ b/packages/core/src/renderer/components/+storage-volume-claims/metrics-details-component.tsx @@ -2,16 +2,12 @@ * 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 type { IAsyncComputed } from "@ogre-tools/injectable-react"; import { withInjectables } from "@ogre-tools/injectable-react"; import React from "react"; -import { ClusterMetricsResourceType } from "../../../common/cluster-types"; import type { PersistentVolumeClaim } from "../../../common/k8s-api/endpoints"; import type { PersistentVolumeClaimMetricData } from "../../../common/k8s-api/endpoints/metrics.api/request-persistent-volume-claim-metrics.injectable"; -import metricsDetailsComponentEnabledInjectable from "../../api/catalog/entity/metrics-details-component-enabled.injectable"; import type { KubeObjectDetailsProps } from "../kube-object-details"; -import { kubeObjectDetailItemInjectionToken } from "../kube-object-details/kube-object-detail-items/kube-object-detail-item-injection-token"; import { ResourceMetrics } from "../resource-metrics"; import persistentVolumeClaimMetricsInjectable from "./metrics.injectable"; import { VolumeClaimDiskChart } from "./volume-claim-disk-chart"; @@ -35,21 +31,9 @@ const NonInjectedPersistentVolumeClaimMetricsDetailsComponent = ({ ); -const PersistentVolumeClaimMetricsDetailsComponent = withInjectables>(NonInjectedPersistentVolumeClaimMetricsDetailsComponent, { +export const PersistentVolumeClaimMetricsDetailsComponent = withInjectables>(NonInjectedPersistentVolumeClaimMetricsDetailsComponent, { getProps: (di, props) => ({ metrics: di.inject(persistentVolumeClaimMetricsInjectable, props.object), ...props, }), }); - -const persistentVolumeClaimMetricsDetailsComponentInjectable = getInjectable({ - id: "persistent-volume-claim-metrics-details-component", - instantiate: (di) => ({ - Component: PersistentVolumeClaimMetricsDetailsComponent, - enabled: di.inject(metricsDetailsComponentEnabledInjectable, ClusterMetricsResourceType.VolumeClaim), - orderNumber: -1, - }), - injectionToken: kubeObjectDetailItemInjectionToken, -}); - -export default persistentVolumeClaimMetricsDetailsComponentInjectable; diff --git a/packages/core/src/renderer/components/kube-object-details/kube-object-detail-items/metrics/persistent-volume-claim-metrics.injectable.tsx b/packages/core/src/renderer/components/kube-object-details/kube-object-detail-items/metrics/persistent-volume-claim-metrics.injectable.tsx new file mode 100644 index 0000000000..02d9e7059d --- /dev/null +++ b/packages/core/src/renderer/components/kube-object-details/kube-object-detail-items/metrics/persistent-volume-claim-metrics.injectable.tsx @@ -0,0 +1,29 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { persistentVolumeClaimDetailsMetricsInjectionToken } from "@k8slens/metrics"; +import { getInjectable } from "@ogre-tools/injectable"; +import { ClusterMetricsResourceType } from "../../../../../common/cluster-types"; +import metricsDetailsComponentEnabledInjectable from "../../../../api/catalog/entity/metrics-details-component-enabled.injectable"; +import { kubeObjectDetailItemInjectionToken } from "../kube-object-detail-item-injection-token"; +import { EmptyMetrics } from "./empty-metrics"; + +const persistentVolumeClaimMetricsInjectable = getInjectable({ + id: "persistent-volume-claim-details-metrics", + instantiate: (di) => { + const persistentVolumeClaimMetrics = di.injectMany(persistentVolumeClaimDetailsMetricsInjectionToken); + const first = persistentVolumeClaimMetrics[0]; + + const Component = first?.Component ?? EmptyMetrics; + + return { + Component, + enabled: di.inject(metricsDetailsComponentEnabledInjectable, ClusterMetricsResourceType.VolumeClaim), + orderNumber: -1, + }; + }, + injectionToken: kubeObjectDetailItemInjectionToken, +}); + +export default persistentVolumeClaimMetricsInjectable; diff --git a/packages/core/src/renderer/components/kube-object-details/kube-object-detail-items/metrics/replica-set-details-metrics.injectable.tsx b/packages/core/src/renderer/components/kube-object-details/kube-object-detail-items/metrics/replica-set-details-metrics.injectable.tsx index 374b9d5a30..1ec67bacea 100644 --- a/packages/core/src/renderer/components/kube-object-details/kube-object-detail-items/metrics/replica-set-details-metrics.injectable.tsx +++ b/packages/core/src/renderer/components/kube-object-details/kube-object-detail-items/metrics/replica-set-details-metrics.injectable.tsx @@ -10,7 +10,7 @@ import { kubeObjectDetailItemInjectionToken } from "../kube-object-detail-item-i import { EmptyMetrics } from "./empty-metrics"; const replicaSetMetricsInjectable = getInjectable({ - id: "replicaSet-details-metrics", + id: "replica-set-details-metrics", instantiate: (di) => { const replicaSetMetrics = di.injectMany(replicaSetDetailsMetricsInjectionToken); const first = replicaSetMetrics[0]; diff --git a/packages/metrics/index.ts b/packages/metrics/index.ts index 058c418840..8486a74ba1 100644 --- a/packages/metrics/index.ts +++ b/packages/metrics/index.ts @@ -41,6 +41,11 @@ export const replicaSetDetailsMetricsInjectionToken = getInjectionToken({ + id: "persistent-volume-claim-details-metrics-injection-token", + }); + export interface PodDetailsContainerMetricsComponentProps { container: any; pod: any;