Add pod details metrics injection token.

Signed-off-by: Juho Heikka <juho.heikka@gmail.com>
This commit is contained in:
Juho Heikka committed 2023-04-05 16:01:26 +03:00
1 parent 66f3cc8bcf
commit be0028cc5e
5 files changed
+125 -16

No files matched your search

@@ -3,10 +3,11 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getFeature } from "@k8slens/feature-core";
import { clusterOverviewUIBlockInjectionToken } from "@k8slens/metrics";
import { clusterOverviewUIBlockInjectionToken, podDetailsMetricsInjectionToken } 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 PodMetricsDetailsComponent from "../../renderer/components/+workloads-pods/pod-metrics-details-component";
const clusterPieChartsClusterOverviewInjectable = getInjectable({
id: "cluster-pie-charts-cluster-overview",
@@ -32,11 +33,22 @@ const clusterMetricsOverviewBlockInjectable = getInjectable({
injectionToken: clusterOverviewUIBlockInjectionToken,
});
const podMetricsDetailsComponentInjectable = getInjectable({
id: "pod-metrics-details-component-injectable",
instantiate: () => ({
id: "pod-metrics-details-component-injectable",
Component: PodMetricsDetailsComponent,
}),
injectionToken: podDetailsMetricsInjectionToken,
});
export const metricsFeature = getFeature({
id: "core-metrics-feature",
register: (di) => {
di.register(clusterPieChartsClusterOverviewInjectable);
di.register(clusterMetricsOverviewBlockInjectable);
di.register(podMetricsDetailsComponentInjectable);
},
});
@@ -2,15 +2,11 @@
* 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, withInjectables } from "@ogre-tools/injectable-react";
import React from "react";
import { ClusterMetricsResourceType } from "../../../common/cluster-types";
import type { Pod } from "../../../common/k8s-api/endpoints";
import type { PodMetricData } from "../../../common/k8s-api/endpoints/metrics.api/request-pod-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 podMetricsInjectable from "./metrics.injectable";
import { PodCharts, podMetricTabs } from "./pod-charts";
@@ -39,14 +35,4 @@ const PodMetricsDetailsComponent = withInjectables<Dependencies, KubeObjectDetai
}),
});
const podMetricsDetailsComponentInjectable = getInjectable({
id: "pod-metrics-details-container",
instantiate: (di) => ({
Component: PodMetricsDetailsComponent,
enabled: di.inject(metricsDetailsComponentEnabledInjectable, ClusterMetricsResourceType.Pod),
orderNumber: -1,
}),
injectionToken: kubeObjectDetailItemInjectionToken,
});
export default podMetricsDetailsComponentInjectable;
export default PodMetricsDetailsComponent;
@@ -0,0 +1,31 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import React from "react";
import { podDetailsMetricsInjectionToken } 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";
const Empty = () => <></>;
const podMetricsInjectable = getInjectable({
id: "kube-object-pod-metrics-injectable",
instantiate: (di) => {
const podMetrics = di.injectMany(podDetailsMetricsInjectionToken);
const first = podMetrics[0];
const Component = first?.Component ?? Empty;
return {
Component,
enabled: di.inject(metricsDetailsComponentEnabledInjectable, ClusterMetricsResourceType.Pod),
orderNumber: -1,
};
},
injectionToken: kubeObjectDetailItemInjectionToken,
});
export default podMetricsInjectable;
+9
View File
@@ -15,3 +15,12 @@ export type ClusterOverviewUIBlock = {
export const clusterOverviewUIBlockInjectionToken = getInjectionToken<ClusterOverviewUIBlock>({
id: "cluster-overview-ui-block-injection-token",
});
export type KubeObjectDetailMetrics = {
id: string;
Component: React.ElementType;
};
export const podDetailsMetricsInjectionToken = getInjectionToken<KubeObjectDetailMetrics>({
id: "pod-details-metrics-injection-token",
});