diff --git a/src/renderer/components/+namespaces/metrics-details-component.injectable.tsx b/src/renderer/components/+namespaces/metrics-details-component.injectable.tsx index ab4d3aacdf..026aace4f5 100644 --- a/src/renderer/components/+namespaces/metrics-details-component.injectable.tsx +++ b/src/renderer/components/+namespaces/metrics-details-component.injectable.tsx @@ -3,28 +3,47 @@ * 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 { PodCharts, podMetricTabs } from "../+workloads-pods/pod-charts"; import { ClusterMetricsResourceType } from "../../../common/cluster-types"; import type { Namespace } from "../../../common/k8s-api/endpoints"; +import type { PodMetricInNamespaceData } from "../../../common/k8s-api/endpoints/metrics.api/request-pod-metrics-in-namespace.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 namespaceMetricsInjectable from "./metrics.injectable"; +interface Dependencies { + metrics: IAsyncComputed; +} + +const NonInjectedNamespaceMetricsDetailsComponent = ({ + object, + metrics, +}: KubeObjectDetailsProps & Dependencies) => ( + + + +); + +const NamespaceMetricsDetailsComponent = withInjectables>(NonInjectedNamespaceMetricsDetailsComponent, { + getProps: (di, props) => ({ + metrics: di.inject(namespaceMetricsInjectable, props.object), + ...props, + }), +}); + const namespaceMetricsDetailsComponentInjectable = getInjectable({ id: "namespace-metrics-details-component", instantiate: (di) => ({ - Component: ({ object }: KubeObjectDetailsProps) => ( - - - - ), + Component: NamespaceMetricsDetailsComponent, enabled: di.inject(metricsDetailsComponentEnabledInjectable, ClusterMetricsResourceType.Namespace), orderNumber: -1, }), diff --git a/src/renderer/components/+network-ingresses/metrics-details-component.injectable.tsx b/src/renderer/components/+network-ingresses/metrics-details-component.injectable.tsx index b85062d224..62d8569ee5 100644 --- a/src/renderer/components/+network-ingresses/metrics-details-component.injectable.tsx +++ b/src/renderer/components/+network-ingresses/metrics-details-component.injectable.tsx @@ -3,9 +3,12 @@ * 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 { Ingress } from "../../../common/k8s-api/endpoints"; +import type { IngressMetricData } from "../../../common/k8s-api/endpoints/metrics.api/request-ingress-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"; @@ -13,21 +16,37 @@ import { ResourceMetrics } from "../resource-metrics"; import { IngressCharts } from "./ingress-charts"; import ingressMetricsInjectable from "./metrics.injectable"; +interface Dependencies { + metrics: IAsyncComputed; +} + +const NonInjectedIngressMetricsDetailsComponent = ({ + object, + metrics, +}: KubeObjectDetailsProps & Dependencies) => ( + + + +); + +const IngressMetricsDetailsComponent = withInjectables>(NonInjectedIngressMetricsDetailsComponent, { + getProps: (di, props) => ({ + metrics: di.inject(ingressMetricsInjectable, props.object), + ...props, + }), +}); + const ingressMetricsDetailsComponentInjectable = getInjectable({ id: "ingress-metrics-details-component", instantiate: (di) => ({ - Component: ({ object }: KubeObjectDetailsProps) => ( - - - - ), + Component: IngressMetricsDetailsComponent, enabled: di.inject(metricsDetailsComponentEnabledInjectable, ClusterMetricsResourceType.Ingress), orderNumber: -1, }), diff --git a/src/renderer/components/+nodes/metrics-details-component.injectable.tsx b/src/renderer/components/+nodes/metrics-details-component.injectable.tsx index 4e438f842b..9a8d593d74 100644 --- a/src/renderer/components/+nodes/metrics-details-component.injectable.tsx +++ b/src/renderer/components/+nodes/metrics-details-component.injectable.tsx @@ -3,9 +3,12 @@ * 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 { Node } from "../../../common/k8s-api/endpoints"; +import type { ClusterMetricData } from "../../../common/k8s-api/endpoints/metrics.api/request-cluster-metrics-by-node-names.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"; @@ -13,23 +16,39 @@ import { ResourceMetrics } from "../resource-metrics"; import nodeMetricsInjectable from "./metrics.injectable"; import { NodeCharts } from "./node-charts"; +interface Dependencies { + metrics: IAsyncComputed; +} + +const NonInjectedNodeMetricsDetailsComponent = ({ + object, + metrics, +}: KubeObjectDetailsProps & Dependencies) => ( + + + +); + +const NodeMetricsDetailsComponent = withInjectables>(NonInjectedNodeMetricsDetailsComponent, { + getProps: (di, props) => ({ + metrics: di.inject(nodeMetricsInjectable, props.object), + ...props, + }), +}); + const nodeMetricsDetailsComponentInjectable = getInjectable({ id: "node-metrics-details-component", instantiate: (di) => ({ - Component: ({ object }: KubeObjectDetailsProps) => ( - - - - ), + Component: NodeMetricsDetailsComponent, enabled: di.inject(metricsDetailsComponentEnabledInjectable, ClusterMetricsResourceType.Node), orderNumber: -1, }), diff --git a/src/renderer/components/+storage-volume-claims/metrics-details-component.injectable.tsx b/src/renderer/components/+storage-volume-claims/metrics-details-component.injectable.tsx index 27dc00d42a..b9edddf157 100644 --- a/src/renderer/components/+storage-volume-claims/metrics-details-component.injectable.tsx +++ b/src/renderer/components/+storage-volume-claims/metrics-details-component.injectable.tsx @@ -3,28 +3,49 @@ * 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"; +interface Dependencies { + metrics: IAsyncComputed; +} + +const NonInjectedPersistentVolumeClaimMetricsDetailsComponent = ({ + object, + metrics, +}: KubeObjectDetailsProps & Dependencies) => ( + + + +); + +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: ({ object }) => ( - - - - ), + Component: PersistentVolumeClaimMetricsDetailsComponent, enabled: di.inject(metricsDetailsComponentEnabledInjectable, ClusterMetricsResourceType.VolumeClaim), orderNumber: -1, }), diff --git a/src/renderer/components/+workloads-daemonsets/metrics-details-component.injectable.tsx b/src/renderer/components/+workloads-daemonsets/metrics-details-component.injectable.tsx index 999717a71d..3975308f46 100644 --- a/src/renderer/components/+workloads-daemonsets/metrics-details-component.injectable.tsx +++ b/src/renderer/components/+workloads-daemonsets/metrics-details-component.injectable.tsx @@ -3,28 +3,47 @@ * 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 { PodCharts, podMetricTabs } from "../+workloads-pods/pod-charts"; import { ClusterMetricsResourceType } from "../../../common/cluster-types"; import type { DaemonSet } from "../../../common/k8s-api/endpoints"; +import type { DaemonSetPodMetricData } from "../../../common/k8s-api/endpoints/metrics.api/request-pod-metrics-for-daemon-sets.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 daemonSetMetricsInjectable from "./metrics.injectable"; +interface Dependencies { + metrics: IAsyncComputed; +} + +const NonInjectedDaemonSetMetricsDetailsComponent = ({ + object, + metrics, +}: KubeObjectDetailsProps & Dependencies) => ( + + + +); + +const DaemonSetMetricsDetailsComponent = withInjectables>(NonInjectedDaemonSetMetricsDetailsComponent, { + getProps: (di, props) => ({ + metrics: di.inject(daemonSetMetricsInjectable, props.object), + ...props, + }), +}); + const daemonSetMetricsDetailsComponentInjectable = getInjectable({ id: "daemon-set-metrics-details-component", instantiate: (di) => ({ - Component: ({ object }: KubeObjectDetailsProps) => ( - - - - ), + Component: DaemonSetMetricsDetailsComponent, enabled: di.inject(metricsDetailsComponentEnabledInjectable, ClusterMetricsResourceType.DaemonSet), orderNumber: -1, }), diff --git a/src/renderer/components/+workloads-deployments/metrics-details-component.injectable.tsx b/src/renderer/components/+workloads-deployments/metrics-details-component.injectable.tsx index 540aa1c9b2..d40e93641d 100644 --- a/src/renderer/components/+workloads-deployments/metrics-details-component.injectable.tsx +++ b/src/renderer/components/+workloads-deployments/metrics-details-component.injectable.tsx @@ -3,28 +3,47 @@ * 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 { PodCharts, podMetricTabs } from "../+workloads-pods/pod-charts"; import { ClusterMetricsResourceType } from "../../../common/cluster-types"; import type { Deployment } from "../../../common/k8s-api/endpoints"; +import type { DeploymentPodMetricData } from "../../../common/k8s-api/endpoints/metrics.api/request-pod-metrics-for-deployments.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 deploymentMetricsInjectable from "./metrics.injectable"; +interface Dependencies { + metrics: IAsyncComputed; +} + +const NonInjectedDeploymentMetricsDetailsComponent = ({ + object, + metrics, +}: KubeObjectDetailsProps & Dependencies) => ( + + + +); + +const DeploymentMetricsDetailsComponent = withInjectables>(NonInjectedDeploymentMetricsDetailsComponent, { + getProps: (di, props) => ({ + metrics: di.inject(deploymentMetricsInjectable, props.object), + ...props, + }), +}); + const deploymentMetricsDetailsComponentInjectable = getInjectable({ id: "deployment-metrics-details-component", instantiate: (di) => ({ - Component: ({ object }: KubeObjectDetailsProps) => ( - - - - ), + Component: DeploymentMetricsDetailsComponent, enabled: di.inject(metricsDetailsComponentEnabledInjectable, ClusterMetricsResourceType.Deployment), orderNumber: -1, }), diff --git a/src/renderer/components/+workloads-jobs/metrics-details-component.injectable.tsx b/src/renderer/components/+workloads-jobs/metrics-details-component.injectable.tsx index 8828c31804..479086c17c 100644 --- a/src/renderer/components/+workloads-jobs/metrics-details-component.injectable.tsx +++ b/src/renderer/components/+workloads-jobs/metrics-details-component.injectable.tsx @@ -3,28 +3,46 @@ * 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 { PodCharts, podMetricTabs } from "../+workloads-pods/pod-charts"; import { ClusterMetricsResourceType } from "../../../common/cluster-types"; import type { Job } from "../../../common/k8s-api/endpoints"; +import type { JobPodMetricData } from "../../../common/k8s-api/endpoints/metrics.api/request-pod-metrics-for-jobs.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 jobMetricsInjectable from "./metrics.injectable"; +interface Dependencies { + metrics: IAsyncComputed; +} + +const NonInjectedJobMetricsDetailsComponent = ({ + object, + metrics, +}: KubeObjectDetailsProps & Dependencies) => ( + + + +); + +const JobMetricsDetailsComponent = withInjectables>(NonInjectedJobMetricsDetailsComponent, { + getProps: (di, props) => ({ + metrics: di.inject(jobMetricsInjectable, props.object), + ...props, + }), +}); + const jobMetricsDetailsComponentInjectable = getInjectable({ id: "job-metrics-details-component", instantiate: (di) => ({ - Component: ({ object }: KubeObjectDetailsProps) => ( - - - - ), + Component: JobMetricsDetailsComponent, enabled: di.inject(metricsDetailsComponentEnabledInjectable, ClusterMetricsResourceType.Job), orderNumber: -1, }), diff --git a/src/renderer/components/+workloads-pods/metrics-detail-container.injectable.tsx b/src/renderer/components/+workloads-pods/metrics-detail-container.injectable.tsx index 7f4db35b9e..aab325ab9b 100644 --- a/src/renderer/components/+workloads-pods/metrics-detail-container.injectable.tsx +++ b/src/renderer/components/+workloads-pods/metrics-detail-container.injectable.tsx @@ -3,9 +3,11 @@ * 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"; @@ -13,18 +15,34 @@ import { ResourceMetrics } from "../resource-metrics"; import podMetricsInjectable from "./metrics.injectable"; import { PodCharts, podMetricTabs } from "./pod-charts"; +interface Dependencies { + metrics: IAsyncComputed; +} + +const NonInjectedPodMetricsDetailsComponent = ({ + object, + metrics, +}: KubeObjectDetailsProps & Dependencies) => ( + + + +); + +const PodMetricsDetailsComponent = withInjectables>(NonInjectedPodMetricsDetailsComponent, { + getProps: (di, props) => ({ + metrics: di.inject(podMetricsInjectable, props.object), + ...props, + }), +}); + const podMetricsDetailsComponentInjectable = getInjectable({ id: "pod-metrics-details-container", instantiate: (di) => ({ - Component: ({ object }: KubeObjectDetailsProps) => ( - - - - ), + Component: PodMetricsDetailsComponent, enabled: di.inject(metricsDetailsComponentEnabledInjectable, ClusterMetricsResourceType.Pod), orderNumber: -1, }), diff --git a/src/renderer/components/+workloads-replicasets/metrics-details-component.injectable.tsx b/src/renderer/components/+workloads-replicasets/metrics-details-component.injectable.tsx index 2c7498c457..9c57bea78e 100644 --- a/src/renderer/components/+workloads-replicasets/metrics-details-component.injectable.tsx +++ b/src/renderer/components/+workloads-replicasets/metrics-details-component.injectable.tsx @@ -3,28 +3,46 @@ * 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 { PodCharts, podMetricTabs } from "../+workloads-pods/pod-charts"; import { ClusterMetricsResourceType } from "../../../common/cluster-types"; import type { ReplicaSet } from "../../../common/k8s-api/endpoints"; +import type { ReplicaSetPodMetricData } from "../../../common/k8s-api/endpoints/metrics.api/request-pod-metrics-for-replica-sets.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 replicaSetMetricsInjectable from "./metrics.injectable"; +interface Dependencies { + metrics: IAsyncComputed; +} + +const NonInjectedReplicaSetMetricsDetailsComponent = ({ + object, + metrics, +}: KubeObjectDetailsProps & Dependencies) => ( + + + +); + +const ReplicaSetMetricsDetailsComponent = withInjectables>(NonInjectedReplicaSetMetricsDetailsComponent, { + getProps: (di, props) => ({ + metrics: di.inject(replicaSetMetricsInjectable, props.object), + ...props, + }), +}); + const replicaSetMetricsDetailsComponentInjectable = getInjectable({ id: "replica-set-metrics-details-component", instantiate: (di) => ({ - Component: ({ object }: KubeObjectDetailsProps) => ( - - - - ), + Component: ReplicaSetMetricsDetailsComponent, enabled: di.inject(metricsDetailsComponentEnabledInjectable, ClusterMetricsResourceType.ReplicaSet), orderNumber: -1, }), diff --git a/src/renderer/components/+workloads-statefulsets/metrics-details-component.injectable.tsx b/src/renderer/components/+workloads-statefulsets/metrics-details-component.injectable.tsx index 54c70d9b81..ad4bb6d677 100644 --- a/src/renderer/components/+workloads-statefulsets/metrics-details-component.injectable.tsx +++ b/src/renderer/components/+workloads-statefulsets/metrics-details-component.injectable.tsx @@ -3,28 +3,46 @@ * 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 { PodCharts, podMetricTabs } from "../+workloads-pods/pod-charts"; import { ClusterMetricsResourceType } from "../../../common/cluster-types"; import type { StatefulSet } from "../../../common/k8s-api/endpoints"; +import type { StatefulSetPodMetricData } from "../../../common/k8s-api/endpoints/metrics.api/request-pod-metrics-for-stateful-sets.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 statefulSetMetricsInjectable from "./metrics.injectable"; +interface Dependencies { + metrics: IAsyncComputed; +} + +const NonInjectedStatefulSetMetricsDetailsComponent = ({ + object, + metrics, +}: KubeObjectDetailsProps & Dependencies) => ( + + + +); + +const StatefulSetMetricsDetailsComponent = withInjectables>(NonInjectedStatefulSetMetricsDetailsComponent, { + getProps: (di, props) => ({ + metrics: di.inject(statefulSetMetricsInjectable, props.object), + ...props, + }), +}); + const statefulSetMetricsDetailsComponentInjectable = getInjectable({ id: "stateful-set-metrics-details-component", instantiate: (di) => ({ - Component: ({ object }: KubeObjectDetailsProps) => ( - - - - ), + Component: StatefulSetMetricsDetailsComponent, enabled: di.inject(metricsDetailsComponentEnabledInjectable, ClusterMetricsResourceType.StatefulSet), orderNumber: -1, }),