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. * 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 { ClusterMetricsResourceType } from "../../../common/cluster-types"; import { ClusterMetricsResourceType } from "../../../common/cluster-types";
import type { Ingress } from "../../../common/k8s-api/endpoints"; import type { Ingress } from "../../../common/k8s-api/endpoints";
import requestIngressMetricsInjectable from "../../../common/k8s-api/endpoints/metrics.api/request-ingress-metrics.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 { IngressCharts } from "./ingress-charts"; import { IngressCharts } from "./ingress-charts";
import ingressMetricsInjectable from "./metrics.injectable";
const ingressMetricsDetailsComponentInjectable = getInjectable({ const ingressMetricsDetailsComponentInjectable = getInjectable({
id: "ingress-metrics-details-component", id: "ingress-metrics-details-component",
instantiate: (di) => { instantiate: (di) => ({
const getActiveClusterEntity = di.inject(getActiveClusterEntityInjectable); Component: ({ object }: KubeObjectDetailsProps<Ingress>) => (
const requestIngressMetrics = di.inject(requestIngressMetricsInjectable); <ResourceMetrics
tabs={ [
return { "Network",
Component: ({ object }: KubeObjectDetailsProps<Ingress>) => ( "Duration",
<ResourceMetrics ] }
tabs={[ object={ object }
"Network", metrics={ di.inject(ingressMetricsInjectable, object) }
"Duration", >
]} <IngressCharts />
object={object} </ResourceMetrics>
metrics={asyncComputed(async () => { ),
now(60 * 1000); // Update every minute enabled: di.inject(enabledMetricsInjectable, ClusterMetricsResourceType.Ingress),
orderNumber: -1,
return requestIngressMetrics(object.getName(), object.getNs()); }),
})}
>
<IngressCharts />
</ResourceMetrics>
),
enabled: computed(() => !getActiveClusterEntity()?.isMetricHidden(ClusterMetricsResourceType.Ingress)),
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 { 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;