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

Change ingress 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:10:51 -04:00
parent 84dbb5f86a
commit 4328f03976
2 changed files with 45 additions and 30 deletions

View File

@ -3,46 +3,34 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
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 { ClusterMetricsResourceType } from "../../../common/cluster-types";
import type { Ingress } from "../../../common/k8s-api/endpoints";
import requestIngressMetricsInjectable from "../../../common/k8s-api/endpoints/metrics.api/request-ingress-metrics.injectable";
import getActiveClusterEntityInjectable from "../../api/catalog/entity/get-active-cluster-entity.injectable";
import enabledMetricsInjectable from "../../api/catalog/entity/metrics-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 { IngressCharts } from "./ingress-charts";
import ingressMetricsInjectable from "./metrics.injectable";
const ingressMetricsDetailsComponentInjectable = getInjectable({
id: "ingress-metrics-details-component",
instantiate: (di) => {
const getActiveClusterEntity = di.inject(getActiveClusterEntityInjectable);
const requestIngressMetrics = di.inject(requestIngressMetricsInjectable);
return {
Component: ({ object }: KubeObjectDetailsProps<Ingress>) => (
<ResourceMetrics
tabs={[
"Network",
"Duration",
]}
object={object}
metrics={asyncComputed(async () => {
now(60 * 1000); // Update every minute
return requestIngressMetrics(object.getName(), object.getNs());
})}
>
<IngressCharts />
</ResourceMetrics>
),
enabled: computed(() => !getActiveClusterEntity()?.isMetricHidden(ClusterMetricsResourceType.Ingress)),
orderNumber: -1,
};
},
instantiate: (di) => ({
Component: ({ object }: KubeObjectDetailsProps<Ingress>) => (
<ResourceMetrics
tabs={ [
"Network",
"Duration",
] }
object={ object }
metrics={ di.inject(ingressMetricsInjectable, object) }
>
<IngressCharts />
</ResourceMetrics>
),
enabled: di.inject(enabledMetricsInjectable, ClusterMetricsResourceType.Ingress),
orderNumber: -1,
}),
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 { Ingress } from "../../../common/k8s-api/endpoints";
import requestIngressMetricsInjectable from "../../../common/k8s-api/endpoints/metrics.api/request-ingress-metrics.injectable";
const ingressMetricsInjectable = getInjectable({
id: "ingress-metrics",
instantiate: (di, ingress) => {
const requestIngressMetrics = di.inject(requestIngressMetricsInjectable);
return asyncComputed(async () => {
now(60 * 1000); // Update every minute
return requestIngressMetrics(ingress.getName(), ingress.getNs());
});
},
lifecycle: lifecycleEnum.keyedSingleton({
getInstanceKey: (di, ingress: Ingress) => ingress.getId(),
}),
});
export default ingressMetricsInjectable;