This is an automated email from the ASF dual-hosted git repository.

wilfreds pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/yunikorn-web.git


The following commit(s) were added to refs/heads/master by this push:
     new d1a26e7  [YUNIKORN-2150] Use dominant resource utilization in UI (#147)
d1a26e7 is described below

commit d1a26e7f05d7008435f973974e7601b47b8a89a6
Author: Yu-Lin Chen <[email protected]>
AuthorDate: Wed Nov 15 13:38:59 2023 +1100

    [YUNIKORN-2150] Use dominant resource utilization in UI (#147)
    
    Node resource utilization chart does not render properly as it expects
    multiple resources types. Node utilisation REST was changed to dominant
    resource only.i
    Multiple resource types in the REST response  could lead to showing the
    incorrect usage (non dominant one) or for different types after a
    reload. The REST content shows types in a random way.
    
    Closes: #147
    
    Signed-off-by: Wilfred Spiegelenburg <[email protected]>
---
 json-db.json                                       | 473 +++------------------
 json-routes.json                                   |   2 +-
 .../components/dashboard/dashboard.component.ts    |  16 +-
 src/app/services/scheduler/scheduler.service.ts    |   4 +-
 4 files changed, 67 insertions(+), 428 deletions(-)

diff --git a/json-db.json b/json-db.json
index 9ba1666..09ffc7c 100644
--- a/json-db.json
+++ b/json-db.json
@@ -751,422 +751,63 @@
       "reservations": []
     }
   ],
-  "utilization": [
-    {
-      "type": "ephemeral-storage",
-      "utilization": [
-        {
-          "bucketName": "0-10%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "10-20%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "20-30%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "30-40%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "40-50%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "50-60%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "60-70%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "70-80%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "80-90%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "90-100%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        }
-      ]
-    },
-    {
-      "type": "hugepages-1Gi",
-      "utilization": [
-        {
-          "bucketName": "0-10%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "10-20%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "20-30%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "30-40%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "40-50%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "50-60%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "60-70%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "70-80%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "80-90%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "90-100%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        }
-      ]
-    },
-    {
-      "type": "hugepages-2Mi",
-      "utilization": [
-        {
-          "bucketName": "0-10%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "10-20%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "20-30%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "30-40%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "40-50%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "50-60%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "60-70%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "70-80%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "80-90%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "90-100%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        }
-      ]
-    },
-    {
-      "type": "memory",
-      "utilization": [
-        {
-          "bucketName": "0-10%",
-          "numOfNodes": 0,
-          "nodeNames": null
-        },
-        {
-          "bucketName": "10-20%",
-          "numOfNodes": 1,
-          "nodeNames": [
-            "aethergpu"
-          ]
-        },
-        {
-          "bucketName": "20-30%",
-          "numOfNodes": 0,
-          "nodeNames": null
-        },
-        {
-          "bucketName": "30-40%",
-          "numOfNodes": 0,
-          "nodeNames": null
-        },
-        {
-          "bucketName": "40-50%",
-          "numOfNodes": 0,
-          "nodeNames": null
-        },
-        {
-          "bucketName": "50-60%",
-          "numOfNodes": 0,
-          "nodeNames": null
-        },
-        {
-          "bucketName": "60-70%",
-          "numOfNodes": 0,
-          "nodeNames": null
-        },
-        {
-          "bucketName": "70-80%",
-          "numOfNodes": 0,
-          "nodeNames": null
-        },
-        {
-          "bucketName": "80-90%",
-          "numOfNodes": 0,
-          "nodeNames": null
-        },
-        {
-          "bucketName": "90-100%",
-          "numOfNodes": 0,
-          "nodeNames": null
-        }
-      ]
-    },
-    {
-      "type": "pods",
-      "utilization": [
-        {
-          "bucketName": "0-10%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "10-20%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "20-30%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "30-40%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "40-50%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "50-60%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "60-70%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "70-80%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "80-90%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        },
-        {
-          "bucketName": "90-100%",
-          "numOfNodes": -1,
-          "nodeNames": [
-            "N/A"
-          ]
-        }
-      ]
-    },
-    {
-      "type": "vcore",
-      "utilization": [
-        {
-          "bucketName": "0-10%",
-          "numOfNodes": 1,
-          "nodeNames": [
-            "aethergpu"
-          ]
-        },
-        {
-          "bucketName": "10-20%",
-          "numOfNodes": 0,
-          "nodeNames": null
-        },
-        {
-          "bucketName": "20-30%",
-          "numOfNodes": 0,
-          "nodeNames": null
-        },
-        {
-          "bucketName": "30-40%",
-          "numOfNodes": 0,
-          "nodeNames": null
-        },
-        {
-          "bucketName": "40-50%",
-          "numOfNodes": 0,
-          "nodeNames": null
-        },
-        {
-          "bucketName": "50-60%",
-          "numOfNodes": 0,
-          "nodeNames": null
-        },
-        {
-          "bucketName": "60-70%",
-          "numOfNodes": 0,
-          "nodeNames": null
-        },
-        {
-          "bucketName": "70-80%",
-          "numOfNodes": 0,
-          "nodeNames": null
-        },
-        {
-          "bucketName": "80-90%",
-          "numOfNodes": 0,
-          "nodeNames": null
-        },
-        {
-          "bucketName": "90-100%",
-          "numOfNodes": 0,
-          "nodeNames": null
-        }
-      ]
-    }
-  ],
+  "node-utilization": {
+    "type": "vcore",
+    "utilization": [
+      {
+        "bucketName": "0-10%",
+        "numOfNodes": 1,
+        "nodeNames": [
+          "aethergpu"
+        ]
+      },
+      {
+        "bucketName": "10-20%",
+        "numOfNodes": 3,
+        "nodeNames": null
+      },
+      {
+        "bucketName": "20-30%",
+        "numOfNodes": 0,
+        "nodeNames": null
+      },
+      {
+        "bucketName": "30-40%",
+        "numOfNodes": 0,
+        "nodeNames": null
+      },
+      {
+        "bucketName": "40-50%",
+        "numOfNodes": 0,
+        "nodeNames": null
+      },
+      {
+        "bucketName": "50-60%",
+        "numOfNodes": 0,
+        "nodeNames": null
+      },
+      {
+        "bucketName": "60-70%",
+        "numOfNodes": 0,
+        "nodeNames": null
+      },
+      {
+        "bucketName": "70-80%",
+        "numOfNodes": 0,
+        "nodeNames": null
+      },
+      {
+        "bucketName": "80-90%",
+        "numOfNodes": 0,
+        "nodeNames": null
+      },
+      {
+        "bucketName": "90-100%",
+        "numOfNodes": 0,
+        "nodeNames": null
+      }
+    ]
+  },
   "partitions": [
     {
       "clusterId": "mycluster",
diff --git a/json-routes.json b/json-routes.json
index 797c575..7b2086a 100644
--- a/json-routes.json
+++ b/json-routes.json
@@ -1,5 +1,5 @@
 {
-  "/ws/v1/scheduler/node-utilization": "/utilization",
+  "/ws/v1/scheduler/node-utilization": "/node-utilization",
   "/ws/v1/*": "/$1",
   "/history/apps": "/appHistory",
   "/history/containers": "/containerHistory",
diff --git a/src/app/components/dashboard/dashboard.component.ts 
b/src/app/components/dashboard/dashboard.component.ts
index 233eab0..f38ab9b 100644
--- a/src/app/components/dashboard/dashboard.component.ts
+++ b/src/app/components/dashboard/dashboard.component.ts
@@ -112,15 +112,13 @@ export class DashboardComponent implements OnInit {
 
     this.scheduler.fetchNodeUtilization().subscribe((data) => {
       const utilizationData: Record<string, number> = {};
-      data.forEach((utilizationInfo) => {
-        utilizationInfo.utilization.forEach(({ bucketName, numOfNodes }) => {
-          const numOfNodesValue = numOfNodes === -1 ? 0 : numOfNodes;
-          if (utilizationData[bucketName]) {
-            utilizationData[bucketName] += numOfNodesValue;
-          } else {
-            utilizationData[bucketName] = numOfNodesValue;
-          }
-        });
+      data.utilization.forEach(({ bucketName, numOfNodes }) => {
+        const numOfNodesValue = numOfNodes === -1 ? 0 : numOfNodes;
+        if (utilizationData[bucketName]) {
+          utilizationData[bucketName] += numOfNodesValue;
+        } else {
+          utilizationData[bucketName] = numOfNodesValue;
+        }
       });
 
       this.nodeUtilizationData = [];
diff --git a/src/app/services/scheduler/scheduler.service.ts 
b/src/app/services/scheduler/scheduler.service.ts
index 25f0d05..c5b2801 100644
--- a/src/app/services/scheduler/scheduler.service.ts
+++ b/src/app/services/scheduler/scheduler.service.ts
@@ -254,9 +254,9 @@ export class SchedulerService {
     );
   }
 
-  fetchNodeUtilization(): Observable<NodeUtilization[]>{
+  fetchNodeUtilization(): Observable<NodeUtilization>{
     const nodeUtilizationUrl = 
`${this.envConfig.getSchedulerWebAddress()}/ws/v1/scheduler/node-utilization`;
-    return this.httpClient.get(nodeUtilizationUrl).pipe(map((data: any) => 
data as NodeUtilization[]));
+    return this.httpClient.get(nodeUtilizationUrl).pipe(map((data: any) => 
data as NodeUtilization));
   }
 
   fecthHealthchecks(): Observable<SchedulerHealthInfo> {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to