Browse Source

..

Signed-off-by: min.tian <min.tian.cn@gmail.com>
min.tian 2 years ago
parent
commit
11cf7e56ba

+ 18 - 16
client/src/pages/systemHealthy/SystemHealthyView.tsx

@@ -187,22 +187,24 @@ const SystemHealthyView = () => {
 
   return (
     <div className={classes.root}>
-      <div className={classes.mainView}>
-        <Topology
-          nodeTree={nodeTree}
-          selectedService={selectedService}
-          onClick={setSelectedService}
-        />
-        <HealthyIndexOverview
-          selectedNode={selectedNode}
-          lineChartsData={lineChartsData}
-          threshold={threshold}
-          setThreshold={changeThreshold}
-          timeRange={timeRange}
-          setTimeRange={setTimeRange}
-          setSelectedService={setSelectedService}
-        />
-      </div>
+      {!!prometheusData && (
+        <div className={classes.mainView}>
+          <Topology
+            nodeTree={nodeTree}
+            selectedService={selectedService}
+            onClick={setSelectedService}
+          />
+          <HealthyIndexOverview
+            selectedNode={selectedNode}
+            lineChartsData={lineChartsData}
+            threshold={threshold}
+            setThreshold={changeThreshold}
+            timeRange={timeRange}
+            setTimeRange={setTimeRange}
+            setSelectedService={setSelectedService}
+          />
+        </div>
+      )}
     </div>
   );
 };

+ 5 - 0
client/src/pages/systemHealthy/Types.ts

@@ -38,6 +38,11 @@ export interface INodeTreeStructure {
   children: INodeTreeStructure[];
 }
 
+export enum EPrometheusDataStatus {
+  noData = -1,
+  failed = -2,
+}
+
 export enum EHealthyStatus {
   noData = 0,
   healthy,

+ 5 - 0
client/src/pages/systemHealthy/consts.ts

@@ -38,4 +38,9 @@ export const timeRangeOptions: ITimeRangeOption[] = [
       value: 7 * 24 * 60 * 60 * 1000,
       step: 8 * 60 * 60 * 1000,
     },
+    {
+      label: '30d',
+      value: 30 * 24 * 60 * 60 * 1000,
+      step: 24 * 60 * 60 * 1000,
+    },
   ];

+ 3 - 2
client/src/pages/systemHealthy/dataHandler.ts

@@ -3,6 +3,7 @@ import {
   EHealthyStatus,
   ENodeService,
   ENodeType,
+  EPrometheusDataStatus,
   INodeTreeStructure,
   IPrometheusAllData,
   IPrometheusNode,
@@ -21,8 +22,8 @@ export const getInternalNode = (
       const healthyStatus = d3.range(length).map((_, i: number) => {
         const cpu = node.cpu[i];
         const memory = node.memory[i];
-        if (cpu === -1) return EHealthyStatus.noData;
-        if (cpu === -2) return EHealthyStatus.failed;
+        if (cpu === EPrometheusDataStatus.noData) return EHealthyStatus.noData;
+        if (cpu === EPrometheusDataStatus.failed) return EHealthyStatus.failed;
         return cpu >= threshold.cpu || memory >= threshold.memory
           ? EHealthyStatus.warning
           : EHealthyStatus.healthy;

+ 15 - 22
server/src/prometheus/prometheus.service.ts

@@ -91,7 +91,6 @@ export class PrometheusService {
       .get(`${prometheusAddress}/-/ready`)
       .then(res => res?.status === 200)
       .catch(err => {
-        console.log(err);
         return false;
       });
     if (addressValid) {
@@ -104,7 +103,6 @@ export class PrometheusService {
         .get(url)
         .then(res => res?.data?.data?.result?.length > 0)
         .catch(err => {
-          console.log(err);
           return false;
         });
       if (instanceValid) return true;
@@ -120,14 +118,7 @@ export class PrometheusService {
       `&start=${new Date(+start).toISOString()}` +
       `&end=${new Date(+end).toISOString()}` +
       `&step=${step / 1000}s`;
-    const result = await http
-      .get(url)
-      .then(res => res.data)
-      .catch(err => {
-        console.log(err);
-        return { status: 'failed' };
-      });
-    return result;
+    return await http.get(url).then(res => res.data);
   }
 
   async getVectorsCount(
@@ -159,17 +150,16 @@ export class PrometheusService {
     this.getVectorsCount(totalVectorsCountMetric, start, end, step);
 
   async getSearchVectorsCount(start: number, end: number, step: number) {
-    const expr = `${searchVectorsCountMetric}${PrometheusService.selector}`;
+    const expr = `rate(${searchVectorsCountMetric}${
+      PrometheusService.selector
+    }[${step / 1000}s])`;
     const result = await this.queryRange(expr, start, end, step);
     const data = result.data.result;
     const length = Math.floor((end - start) / step);
 
     if (data.length === 0) return Array(length).fill(0);
 
-    const totalCount = data[0].values.map((d: any) => +d[1]);
-    const res = totalCount
-      .map((d: number, i: number) => (i > 0 ? d - totalCount[i - 1] : d))
-      .slice(1);
+    const res = data[0].values.map((d: any) => +d[1]);
 
     let leftLossCount;
     let rightLossCount;
@@ -237,7 +227,9 @@ export class PrometheusService {
   }
 
   async getInternalNodesCPUData(start: number, end: number, step: number) {
-    const expr = `${cpuMetric}${PrometheusService.selector}`;
+    const expr = `rate(${cpuMetric}${PrometheusService.selector}[${
+      step / 1000
+    }s])`;
     const result = await this.queryRange(expr, start, end, step);
     return result.data.result;
   }
@@ -266,11 +258,7 @@ export class PrometheusService {
       const nodeType =
         d.metric.container.indexOf('coord') >= 0 ? 'coord' : 'node';
       const pod = d.metric.pod;
-      const cpuProcessTotal = d.values.map((v: any) => +v[1]);
-      const cpu = cpuProcessTotal
-        .map((v: number, i: number) => (i > 0 ? v - cpuProcessTotal[i - 1] : 0))
-        .slice(1)
-        .map((v: number) => v / (step / 1000));
+      const cpu = d.values.map((v: any) => +v[1]);
 
       let leftLossCount;
       let rightLossCount;
@@ -294,7 +282,7 @@ export class PrometheusService {
       return {
         type: nodeType,
         pod,
-        cpu,
+        cpu: cpu.slice(1),
         memory: memory.slice(1),
       } as IPrometheusNode;
     });
@@ -326,6 +314,11 @@ export class PrometheusService {
     end: number;
     step: number;
   }) {
+    if (!PrometheusService.isReady) {
+      return {
+
+      }
+    }
     const meta = await this.getThirdPartyServiceHealthStatus(
       metaMetric,
       start,