From 25b594de7ee0269470974600141dc691e417cd67 Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Mon, 16 Jan 2023 15:36:42 +0300 Subject: [PATCH] Add more types for ObjectMetricStatus Signed-off-by: Alex Andreev --- .../horizontal-pod-autoscaler.api.test.ts | 39 +++++++++++++++++ .../horizontal-pod-autoscaler.api.ts | 42 +++++++++++-------- 2 files changed, 64 insertions(+), 17 deletions(-) diff --git a/src/common/k8s-api/__tests__/horizontal-pod-autoscaler.api.test.ts b/src/common/k8s-api/__tests__/horizontal-pod-autoscaler.api.test.ts index 60f8457879..90f48a7ff0 100644 --- a/src/common/k8s-api/__tests__/horizontal-pod-autoscaler.api.test.ts +++ b/src/common/k8s-api/__tests__/horizontal-pod-autoscaler.api.test.ts @@ -51,6 +51,45 @@ describe("HorizontalPodAutoscalerApi", () => { expect(hpa.getMetricValues(hpa.getMetrics()[0])).toEqual("unknown / 50%"); }); + it("should return correct resource metrics with current metrics", () => { + const hpa = new HorizontalPodAutoscaler({ + ...hpaV2, + spec: { + ...hpaV2.spec, + metrics: [ + { + type: HpaMetricType.Resource, + resource: { + name: "cpu", + target: { + type: "Utilization", + averageUtilization: 50 + } + } + } + ] + }, + status: { + currentReplicas: 1, + desiredReplicas: 10, + currentMetrics: [ + { + type: HpaMetricType.Resource, + resource: { + name: "cpu", + current: { + averageValue: "100m", + averageUtilization: 10 + } + } + } + ], + } + }); + + expect(hpa.getMetricValues(hpa.getMetrics()[0])).toEqual("10% / 50%"); + }); + it("should return correct container resource metrics", () => { const hpa = new HorizontalPodAutoscaler( { diff --git a/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.ts b/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.ts index a9de7f928b..50f7c19aea 100644 --- a/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.ts +++ b/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.ts @@ -94,6 +94,7 @@ export interface ResourceMetricSource { // autoscaling/v2 target?: { averageUtilization?: number; + averageValue?: string; type?: string; } } @@ -151,9 +152,18 @@ export interface ExternalMetricStatus { export interface ObjectMetricStatus { averageValue?: string; currentValue?: string; - metricName: string; + metricName?: string; selector?: LabelSelector; - target: CrossVersionObjectReference; + + // autoscaling/v2 + metric?: { + name?: string; + }, + current: { + type?: string; + value?: string; + }; + describedObject?: CrossVersionObjectReference; } export interface PodsMetricStatus { @@ -164,8 +174,14 @@ export interface PodsMetricStatus { export interface ResourceMetricStatus { currentAverageUtilization?: number; - currentAverageValue: string; + currentAverageValue?: string; name: string; + + // autoscaling/v2 + current?: { + averageUtilization?: number; + averageValue?: string; + } } export interface BaseHorizontalPodAutoscalerMetricStatus { @@ -325,23 +341,15 @@ function getMetricName(metric: HorizontalPodAutoscalerMetricSpec | HorizontalPod } function getResourceMetricValue(currentMetric: ResourceMetricStatus | undefined, targetMetric: ResourceMetricSource): MetricCurrentTarget { - let target = "unknown"; - - if (targetMetric.target) { - target = targetMetric.target.averageUtilization ? `${targetMetric.target.averageUtilization}%` : "unknown"; - } else { - target = typeof targetMetric?.targetAverageUtilization === "number" - ? `${targetMetric.targetAverageUtilization}%` - : targetMetric?.targetAverageValue ?? "unknown"; - } - return { current: ( - typeof currentMetric?.currentAverageUtilization === "number" - ? `${currentMetric.currentAverageUtilization}%` - : currentMetric?.currentAverageValue + typeof currentMetric?.current?.averageUtilization === "number" + ? `${currentMetric.current?.averageUtilization}%` + : currentMetric?.current?.averageValue ), - target, + target: typeof targetMetric?.target?.averageUtilization === "number" + ? `${targetMetric.target.averageUtilization}%` + : targetMetric?.target?.averageValue ?? "unknown" }; }