فهرست منبع

Added hpa replicas chart

jnfrati 4 سال پیش
والد
کامیت
315febe964

+ 16 - 1
dashboard/src/main/home/cluster-dashboard/expanded-chart/metrics/MetricNormalizer.ts

@@ -6,6 +6,7 @@ import {
   MetricsNetworkDataResponse,
   MetricsNGINXErrorsDataResponse,
   AvailableMetrics,
+  MetricsHpaReplicasDataResponse,
 } from "./types";
 
 export class MetricNormalizer {
@@ -33,6 +34,9 @@ export class MetricNormalizer {
     if (this.kind.includes("nginx:errors")) {
       return this.parseNGINXErrorsMetrics(this.metric_results);
     }
+    if (this.kind.includes("hpa_replicas")) {
+      return this.parseHpaReplicaMetrics(this.metric_results);
+    }
     return [];
   }
 
@@ -69,7 +73,18 @@ export class MetricNormalizer {
     return arr.map((d) => {
       return {
         date: d.date,
-        value: parseFloat(d.error_pct), // put units in Ki
+        value: parseFloat(d.error_pct),
+      };
+    });
+  }
+
+  private parseHpaReplicaMetrics(
+    arr: MetricsHpaReplicasDataResponse["results"]
+  ) {
+    return arr.map((d) => {
+      return {
+        date: d.date,
+        value: parseInt(d.replicas),
       };
     });
   }

+ 21 - 0
dashboard/src/main/home/cluster-dashboard/expanded-chart/metrics/MetricsSection.tsx

@@ -65,6 +65,27 @@ const MetricsSection: React.FunctionComponent<PropsType> = ({
     Context
   );
 
+  // Add or remove hpa replicas chart option when current chart is updated
+  useEffect(() => {
+    if (currentChart?.config?.autoscaling?.enabled) {
+      setMetricsOptions((prev) => {
+        if (prev.find((option) => option.value === "hpa_replicas")) {
+          return [...prev];
+        }
+        return [...prev, { value: "hpa_replicas", label: "HPA Replicas" }];
+      });
+    } else {
+      setMetricsOptions((prev) => {
+        const hpaReplicasOptionIndex = prev.findIndex(
+          (option) => option.value === "hpa_replicas"
+        );
+        const options = [...prev];
+        options.splice(hpaReplicasOptionIndex, 1);
+        return [...options];
+      });
+    }
+  }, [currentChart]);
+
   useEffect(() => {
     if (currentChart?.chart?.metadata?.name == "ingress-nginx") {
       setIsLoading((prev) => prev + 1);

+ 11 - 1
dashboard/src/main/home/cluster-dashboard/expanded-chart/metrics/types.ts

@@ -30,6 +30,14 @@ export type MetricsNGINXErrorsDataResponse = {
   }[];
 };
 
+export type MetricsHpaReplicasDataResponse = {
+  pod?: string;
+  results: {
+    date: number;
+    replicas: string;
+  }[];
+};
+
 export type GenericMetricResponse = {
   pod?: string;
   results: {
@@ -38,6 +46,7 @@ export type GenericMetricResponse = {
     memory: string;
     bytes: string;
     error_pct: string;
+    replicas: string;
   }[];
 };
 
@@ -52,4 +61,5 @@ export type AvailableMetrics =
   | "network"
   | "nginx:errors"
   | "cpu_hpa_threshold"
-  | "memory_hpa_threshold";
+  | "memory_hpa_threshold"
+  | "hpa_replicas";