From 7b1a0926169a4fee5bc0e661e163a4733b8d7a0c Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 7 Oct 2021 16:17:20 -0400 Subject: [PATCH] Refactor Nodes view metrics renderer - Use a common base function to simplify logic Signed-off-by: Sebastian Malton --- src/common/k8s-api/endpoints/nodes.api.ts | 12 ++-- src/renderer/components/+nodes/nodes.tsx | 86 +++++++++++------------ 2 files changed, 46 insertions(+), 52 deletions(-) diff --git a/src/common/k8s-api/endpoints/nodes.api.ts b/src/common/k8s-api/endpoints/nodes.api.ts index 3f4e0fb412..9dddc70d12 100644 --- a/src/common/k8s-api/endpoints/nodes.api.ts +++ b/src/common/k8s-api/endpoints/nodes.api.ts @@ -95,17 +95,17 @@ export interface Node { status: { capacity?: { cpu: string; - ["ephemeral-storage"]: string; - ["hugepages-1Gi"]: string; - ["hugepages-2Mi"]: string; + "ephemeral-storage": string; + "hugepages-1Gi": string; + "hugepages-2Mi": string; memory: string; pods: string; }; allocatable?: { cpu: string; - ["ephemeral-storage"]: string; - ["hugepages-1Gi"]: string; - ["hugepages-2Mi"]: string; + "ephemeral-storage": string; + "hugepages-1Gi": string; + "hugepages-2Mi": string; memory: string; pods: string; }; diff --git a/src/renderer/components/+nodes/nodes.tsx b/src/renderer/components/+nodes/nodes.tsx index a2b5849611..5d75f3ffcc 100644 --- a/src/renderer/components/+nodes/nodes.tsx +++ b/src/renderer/components/+nodes/nodes.tsx @@ -56,6 +56,13 @@ enum columnId { interface Props extends RouteComponentProps { } +interface UsageArgs { + node: Node; + title: string; + metricNames: [string, string]; + secondFormater: (metrics: [number, number]) => string; +} + @observer export class Nodes extends React.Component { @observable.ref metrics: Partial = {}; @@ -98,74 +105,60 @@ export class Nodes extends React.Component { }); } - renderCpuUsage(node: Node) { - const metrics = this.getLastMetricValues(node, ["cpuUsage", "cpuCapacity"]); + private renderUsage({ node, title, metricNames, secondFormater }: UsageArgs) { + const metrics = this.getLastMetricValues(node, metricNames); - if (!metrics || !metrics[1]) return ; - const usage = metrics[0]; - const cores = metrics[1]; - const cpuUsagePercent = Math.ceil(usage * 100) / cores; - const cpuUsagePercentLabel: String = cpuUsagePercent % 1 === 0 - ? cpuUsagePercent.toString() - : cpuUsagePercent.toFixed(2); + if (!metrics || metrics.length < 2) { + return ; + } + + const [usage, capacity] = metrics; return ( ); } + renderCpuUsage(node: Node) { + return this.renderUsage({ + node, + title: "CPU", + metricNames: ["cpuUsage", "cpuCapacity"], + secondFormater: ([, cap]) => `cores: ${cap}`, + }); + } + renderMemoryUsage(node: Node) { - const metrics = this.getLastMetricValues(node, ["workloadMemoryUsage", "memoryAllocatableCapacity"]); - - if (!metrics || !metrics[1]) return ; - const usage = metrics[0]; - const capacity = metrics[1]; - - return ( - - ); + return this.renderUsage({ + node, + title: "Memory", + metricNames: ["workloadMemoryUsage", "memoryAllocatableCapacity"], + secondFormater: ([usage]) => bytesToUnits(usage, 3), + }); } renderDiskUsage(node: Node): any { - const metrics = this.getLastMetricValues(node, ["fsUsage", "fsSize"]); - - if (!metrics || !metrics[1]) return ; - const usage = metrics[0]; - const capacity = metrics[1]; - - return ( - - ); + return this.renderUsage({ + node, + title: "Disk", + metricNames: ["fsUsage", "fsSize"], + secondFormater: ([usage]) => bytesToUnits(usage, 3), + }); } renderConditions(node: Node) { if (!node.status.conditions) { return null; } - const conditions = node.getActiveConditions(); - return conditions.map(condition => { + return node.getActiveConditions().map(condition => { const { type } = condition; const tooltipId = `node-${node.getName()}-condition-${type}`; @@ -180,7 +173,8 @@ export class Nodes extends React.Component { , )} - ); + + ); }); }