diff --git a/src/renderer/api/endpoints/cluster.api.ts b/src/renderer/api/endpoints/cluster.api.ts index aefaac07e9..f0879fa501 100644 --- a/src/renderer/api/endpoints/cluster.api.ts +++ b/src/renderer/api/endpoints/cluster.api.ts @@ -26,30 +26,6 @@ import { KubeApi } from "../kube-api"; export class ClusterApi extends KubeApi { static kind = "Cluster"; static namespaced = true; - - async getMetrics(nodeNames: string[], params?: IMetricsReqParams): Promise { - const nodes = nodeNames.join("|"); - const opts = { category: "cluster", nodes }; - - return metricsApi.getMetrics({ - memoryUsage: opts, - workloadMemoryUsage: opts, - memoryRequests: opts, - memoryLimits: opts, - memoryCapacity: opts, - memoryAllocatableCapacity: opts, - cpuUsage: opts, - cpuRequests: opts, - cpuLimits: opts, - cpuCapacity: opts, - cpuAllocatableCapacity: opts, - podUsage: opts, - podCapacity: opts, - podAllocatableCapacity: opts, - fsSize: opts, - fsUsage: opts - }, params); - } } export function getMetricsByNodeNames(nodeNames: string[], params?: IMetricsReqParams): Promise { @@ -58,15 +34,19 @@ export function getMetricsByNodeNames(nodeNames: string[], params?: IMetricsReqP return metricsApi.getMetrics({ memoryUsage: opts, + workloadMemoryUsage: opts, memoryRequests: opts, memoryLimits: opts, memoryCapacity: opts, + memoryAllocatableCapacity: opts, cpuUsage: opts, cpuRequests: opts, cpuLimits: opts, cpuCapacity: opts, + cpuAllocatableCapacity: opts, podUsage: opts, podCapacity: opts, + podAllocatableCapacity: opts, fsSize: opts, fsUsage: opts }, params); diff --git a/src/renderer/components/+cluster/cluster-overview.store.ts b/src/renderer/components/+cluster/cluster-overview.store.ts index 846f2466b4..547eb6832f 100644 --- a/src/renderer/components/+cluster/cluster-overview.store.ts +++ b/src/renderer/components/+cluster/cluster-overview.store.ts @@ -21,7 +21,7 @@ import { action, observable, reaction, when, makeObservable } from "mobx"; import { KubeObjectStore } from "../../kube-object.store"; -import { Cluster, clusterApi, IClusterMetrics } from "../../api/endpoints"; +import { Cluster, clusterApi, getMetricsByNodeNames, IClusterMetrics } from "../../api/endpoints"; import { autoBind, createStorage } from "../../utils"; import { IMetricsReqParams, normalizeMetrics } from "../../api/endpoints/metrics.api"; import { nodesStore } from "../+nodes/nodes.store"; @@ -101,7 +101,7 @@ export class ClusterOverviewStore extends KubeObjectStore implements Cl const { masterNodes, workerNodes } = nodesStore; const nodes = this.metricNodeRole === MetricNodeRole.MASTER && masterNodes.length ? masterNodes : workerNodes; - this.metrics = await clusterApi.getMetrics(nodes.map(node => node.getName()), params); + this.metrics = await getMetricsByNodeNames(nodes.map(node => node.getName()), params); this.metricsLoaded = true; } diff --git a/src/renderer/components/+nodes/node-details.tsx b/src/renderer/components/+nodes/node-details.tsx index 80b10b67f2..9d1f697dfa 100644 --- a/src/renderer/components/+nodes/node-details.tsx +++ b/src/renderer/components/+nodes/node-details.tsx @@ -32,13 +32,14 @@ import { podsStore } from "../+workloads-pods/pods.store"; import type { KubeObjectDetailsProps } from "../kube-object"; import { getMetricsByNodeNames, IClusterMetrics, Node } from "../../api/endpoints"; import { NodeCharts } from "./node-charts"; -import { action, observable, reaction } from "mobx"; +import { observable, reaction } from "mobx"; import { PodDetailsList } from "../+workloads-pods/pod-details-list"; import { KubeObjectMeta } from "../kube-object/kube-object-meta"; import { getActiveClusterEntity } from "../../api/catalog-entity-registry"; import { ClusterMetricsResourceType } from "../../../main/cluster"; import { NodeDetailsResources } from "./node-details-resources"; import { DrawerTitle } from "../drawer/drawer-title"; +import { boundMethod } from "../../utils"; interface Props extends KubeObjectDetailsProps { } @@ -56,7 +57,7 @@ export class NodeDetails extends React.Component { podsStore.reloadAll(); } - @action + @boundMethod async loadMetrics() { const { object: node } = this.props; diff --git a/src/renderer/components/+nodes/nodes.tsx b/src/renderer/components/+nodes/nodes.tsx index fcab99667d..4b5672b816 100644 --- a/src/renderer/components/+nodes/nodes.tsx +++ b/src/renderer/components/+nodes/nodes.tsx @@ -61,7 +61,7 @@ interface Props extends RouteComponentProps { @observer export class Nodes extends React.Component { @observable metrics: Partial = {}; - private metricsWatcher = interval(30, async () => await getMetricsForAllNodes()); + private metricsWatcher = interval(30, async () => this.metrics = await getMetricsForAllNodes()); componentDidMount() { this.metricsWatcher.start(true); diff --git a/src/renderer/components/+workloads-daemonsets/daemonset-details.tsx b/src/renderer/components/+workloads-daemonsets/daemonset-details.tsx index 25c1995fad..c9f363c5e9 100644 --- a/src/renderer/components/+workloads-daemonsets/daemonset-details.tsx +++ b/src/renderer/components/+workloads-daemonsets/daemonset-details.tsx @@ -39,6 +39,7 @@ import { PodDetailsList } from "../+workloads-pods/pod-details-list"; import { KubeObjectMeta } from "../kube-object/kube-object-meta"; import { getActiveClusterEntity } from "../../api/catalog-entity-registry"; import { ClusterMetricsResourceType } from "../../../main/cluster"; +import { boundMethod } from "../../utils"; interface Props extends KubeObjectDetailsProps { } @@ -56,6 +57,7 @@ export class DaemonSetDetails extends React.Component { podsStore.reloadAll(); } + @boundMethod async loadMetrics() { const { object: daemonSet } = this.props; diff --git a/src/renderer/components/+workloads-deployments/deployment-details.tsx b/src/renderer/components/+workloads-deployments/deployment-details.tsx index d1cc3120be..18ac512038 100644 --- a/src/renderer/components/+workloads-deployments/deployment-details.tsx +++ b/src/renderer/components/+workloads-deployments/deployment-details.tsx @@ -41,6 +41,7 @@ import { replicaSetStore } from "../+workloads-replicasets/replicasets.store"; import { DeploymentReplicaSets } from "./deployment-replicasets"; import { getActiveClusterEntity } from "../../api/catalog-entity-registry"; import { ClusterMetricsResourceType } from "../../../main/cluster"; +import { boundMethod } from "../../utils"; interface Props extends KubeObjectDetailsProps { } @@ -59,6 +60,7 @@ export class DeploymentDetails extends React.Component { replicaSetStore.reloadAll(); } + @boundMethod async loadMetrics() { const { object: deployment } = this.props; diff --git a/src/renderer/components/+workloads-jobs/job-details.tsx b/src/renderer/components/+workloads-jobs/job-details.tsx index a371b2d46f..ba9f463147 100644 --- a/src/renderer/components/+workloads-jobs/job-details.tsx +++ b/src/renderer/components/+workloads-jobs/job-details.tsx @@ -42,6 +42,7 @@ import { podMetricTabs, PodCharts } from "../+workloads-pods/pod-charts"; import { ClusterMetricsResourceType } from "../../../main/cluster"; import { getActiveClusterEntity } from "../../api/catalog-entity-registry"; import { ResourceMetrics } from "../resource-metrics"; +import { boundMethod } from "autobind-decorator"; interface Props extends KubeObjectDetailsProps { } @@ -54,6 +55,7 @@ export class JobDetails extends React.Component { podsStore.reloadAll(); } + @boundMethod async loadMetrics() { const { object: job } = this.props; diff --git a/src/renderer/components/+workloads-replicasets/replicaset-details.tsx b/src/renderer/components/+workloads-replicasets/replicaset-details.tsx index ba91740191..26b4e585dd 100644 --- a/src/renderer/components/+workloads-replicasets/replicaset-details.tsx +++ b/src/renderer/components/+workloads-replicasets/replicaset-details.tsx @@ -38,6 +38,7 @@ import { PodDetailsList } from "../+workloads-pods/pod-details-list"; import { KubeObjectMeta } from "../kube-object/kube-object-meta"; import { getActiveClusterEntity } from "../../api/catalog-entity-registry"; import { ClusterMetricsResourceType } from "../../../main/cluster"; +import { boundMethod } from "../../utils"; interface Props extends KubeObjectDetailsProps { } @@ -55,6 +56,7 @@ export class ReplicaSetDetails extends React.Component { podsStore.reloadAll(); } + @boundMethod async loadMetrics() { const { object: replicaSet } = this.props; diff --git a/src/renderer/components/+workloads-statefulsets/statefulset-details.tsx b/src/renderer/components/+workloads-statefulsets/statefulset-details.tsx index dea7e0674b..1d5acfecae 100644 --- a/src/renderer/components/+workloads-statefulsets/statefulset-details.tsx +++ b/src/renderer/components/+workloads-statefulsets/statefulset-details.tsx @@ -39,6 +39,7 @@ import { PodDetailsList } from "../+workloads-pods/pod-details-list"; import { KubeObjectMeta } from "../kube-object/kube-object-meta"; import { getActiveClusterEntity } from "../../api/catalog-entity-registry"; import { ClusterMetricsResourceType } from "../../../main/cluster"; +import { boundMethod } from "../../utils"; interface Props extends KubeObjectDetailsProps { } @@ -56,6 +57,7 @@ export class StatefulSetDetails extends React.Component { podsStore.reloadAll(); } + @boundMethod async loadMetrics() { const { object: statefulSet } = this.props;