You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by li...@apache.org on 2022/05/14 11:27:00 UTC

[dolphinscheduler] branch 2.0.6-prepare updated: Monitoring: Added disk available capacity monitoring (#10030)

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

lidongdai pushed a commit to branch 2.0.6-prepare
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/2.0.6-prepare by this push:
     new 930c7d4f62 Monitoring: Added disk available capacity monitoring (#10030)
930c7d4f62 is described below

commit 930c7d4f6261b793f9edb9249513e904f17e2b77
Author: retime123 <78...@qq.com>
AuthorDate: Sat May 14 19:26:54 2022 +0800

    Monitoring: Added disk available capacity monitoring (#10030)
---
 .../apache/dolphinscheduler/common/Constants.java  |  2 +-
 .../dolphinscheduler/common/utils/HeartBeat.java   | 35 +++++++++++++++-------
 .../dolphinscheduler/common/utils/OSUtils.java     | 19 ++++++++++++
 .../dolphinscheduler/common/os/OSUtilsTest.java    |  7 +++++
 .../common/utils/HeartBeatTest.java                |  3 +-
 .../home/pages/monitor/pages/servers/master.vue    | 16 ++++++++--
 .../home/pages/monitor/pages/servers/worker.vue    | 16 ++++++++--
 .../src/js/module/i18n/locale/en_US.js             |  1 +
 .../src/js/module/i18n/locale/zh_CN.js             |  1 +
 9 files changed, 81 insertions(+), 19 deletions(-)

diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
index 2bd6844727..9b76a0eab5 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
@@ -514,7 +514,7 @@ public final class Constants {
     /**
      * heartbeat for zk info length
      */
-    public static final int HEARTBEAT_FOR_ZOOKEEPER_INFO_LENGTH = 13;
+    public static final int HEARTBEAT_FOR_ZOOKEEPER_INFO_LENGTH = 14;
 
     /**
      * jar
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HeartBeat.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HeartBeat.java
index d28cd3db08..e9830c52e4 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HeartBeat.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HeartBeat.java
@@ -42,6 +42,16 @@ public class HeartBeat {
     private int workerWaitingTaskCount; // worker waiting task count
     private int workerExecThreadCount; // worker thread pool thread count
 
+    private double diskAvailable;
+
+    public double getDiskAvailable() {
+        return diskAvailable;
+    }
+
+    public void setDiskAvailable(double diskAvailable) {
+        this.diskAvailable = diskAvailable;
+    }
+
     public long getStartupTime() {
         return startupTime;
     }
@@ -177,6 +187,7 @@ public class HeartBeat {
         this.loadAverage = OSUtils.loadAverage();
         this.availablePhysicalMemorySize = OSUtils.availablePhysicalMemorySize();
         this.memoryUsage = OSUtils.memoryUsage();
+        this.diskAvailable = OSUtils.diskAvailable();
         this.processId = OSUtils.getProcessID();
     }
 
@@ -207,6 +218,7 @@ public class HeartBeat {
         StringBuilder builder = new StringBuilder(100);
         builder.append(cpuUsage).append(COMMA);
         builder.append(memoryUsage).append(COMMA);
+        builder.append(diskAvailable).append(COMMA);
         builder.append(loadAverage).append(COMMA);
         builder.append(availablePhysicalMemorySize).append(Constants.COMMA);
         builder.append(maxCpuloadAvg).append(Constants.COMMA);
@@ -233,17 +245,18 @@ public class HeartBeat {
         HeartBeat heartBeat = new HeartBeat();
         heartBeat.cpuUsage = Double.parseDouble(parts[0]);
         heartBeat.memoryUsage = Double.parseDouble(parts[1]);
-        heartBeat.loadAverage = Double.parseDouble(parts[2]);
-        heartBeat.availablePhysicalMemorySize = Double.parseDouble(parts[3]);
-        heartBeat.maxCpuloadAvg = Double.parseDouble(parts[4]);
-        heartBeat.reservedMemory = Double.parseDouble(parts[5]);
-        heartBeat.startupTime = Long.parseLong(parts[6]);
-        heartBeat.reportTime = Long.parseLong(parts[7]);
-        heartBeat.serverStatus = Integer.parseInt(parts[8]);
-        heartBeat.processId = Integer.parseInt(parts[9]);
-        heartBeat.workerHostWeight = Integer.parseInt(parts[10]);
-        heartBeat.workerExecThreadCount = Integer.parseInt(parts[11]);
-        heartBeat.workerWaitingTaskCount = Integer.parseInt(parts[12]);
+        heartBeat.diskAvailable = Double.parseDouble(parts[2]);
+        heartBeat.loadAverage = Double.parseDouble(parts[3]);
+        heartBeat.availablePhysicalMemorySize = Double.parseDouble(parts[4]);
+        heartBeat.maxCpuloadAvg = Double.parseDouble(parts[5]);
+        heartBeat.reservedMemory = Double.parseDouble(parts[6]);
+        heartBeat.startupTime = Long.parseLong(parts[7]);
+        heartBeat.reportTime = Long.parseLong(parts[8]);
+        heartBeat.serverStatus = Integer.parseInt(parts[9]);
+        heartBeat.processId = Integer.parseInt(parts[10]);
+        heartBeat.workerHostWeight = Integer.parseInt(parts[11]);
+        heartBeat.workerExecThreadCount = Integer.parseInt(parts[12]);
+        heartBeat.workerWaitingTaskCount = Integer.parseInt(parts[13]);
         return heartBeat;
     }
 }
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/OSUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/OSUtils.java
index f21d3d2d7e..756d7b8381 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/OSUtils.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/OSUtils.java
@@ -31,6 +31,7 @@ import java.io.BufferedReader;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.io.File;
 import java.lang.management.ManagementFactory;
 import java.lang.management.OperatingSystemMXBean;
 import java.lang.management.RuntimeMXBean;
@@ -82,6 +83,24 @@ public class OSUtils {
         return Double.parseDouble(df.format(memoryUsage));
     }
 
+    /**
+     * get disk usage
+     * Keep 2 decimal
+     *
+     * @return disk free space  (GB)
+     */
+    public static double diskAvailable() {
+        File file = new File(".");
+        long totalSpace = file.getTotalSpace(); //total disk space in bytes.
+        long freeSpace = file.getFreeSpace(); //unallocated / free disk space in bytes.
+
+        double diskAvailable = freeSpace / 1024.0 / 1024 / 1024;
+
+        DecimalFormat df = new DecimalFormat(TWO_DECIMAL);
+        df.setRoundingMode(RoundingMode.HALF_UP);
+        return Double.parseDouble(df.format(diskAvailable));
+    }
+
     /**
      * get available physical memory size
      * <p>
diff --git a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/os/OSUtilsTest.java b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/os/OSUtilsTest.java
index 64ef52ed50..480ff2dd8b 100644
--- a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/os/OSUtilsTest.java
+++ b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/os/OSUtilsTest.java
@@ -39,6 +39,13 @@ public class OSUtilsTest {
         Assert.assertTrue(memoryUsage >= 0.0);
     }
 
+    @Test
+    public void diskAvailable() {
+        double diskAvailable = OSUtils.diskAvailable();
+        logger.info("diskAvailable : {}", diskAvailable);
+        Assert.assertTrue(diskAvailable >= 0.0);
+    }
+
     @Test
     public void loadAverage() {
         double loadAverage = OSUtils.loadAverage();
diff --git a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/HeartBeatTest.java b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/HeartBeatTest.java
index c71450fa3d..487fbe97d0 100644
--- a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/HeartBeatTest.java
+++ b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/HeartBeatTest.java
@@ -55,12 +55,13 @@ public class HeartBeatTest {
 
     @Test
     public void testDecodeHeartBeat() throws Exception {
-        String heartBeatInfo = "0.35,0.58,3.09,6.47,5.0,1.0,1634033006749,1634033006857,1,29732,1,199,200";
+        String heartBeatInfo = "0.35,0.58,5.86,3.09,6.47,5.0,1.0,1634033006749,1634033006857,1,29732,1,199,200";
         HeartBeat heartBeat = HeartBeat.decodeHeartBeat(heartBeatInfo);
 
         double delta = 0.001;
         assertEquals(0.35, heartBeat.getCpuUsage(), delta);
         assertEquals(0.58, heartBeat.getMemoryUsage(), delta);
+        assertEquals(5.86, heartBeat.getDiskAvailable(), delta);
         assertEquals(3.09, heartBeat.getLoadAverage(), delta);
         assertEquals(6.47, heartBeat.getAvailablePhysicalMemorySize(), delta);
         assertEquals(5.0, heartBeat.getMaxCpuloadAvg(), delta);
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/master.vue b/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/master.vue
index 3f257e5fe8..34327c807c 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/master.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/master.vue
@@ -30,21 +30,31 @@
             </div>
           </div>
           <div class="row-cont">
-            <div class="col-md-4">
+            <div class="col-md-3">
               <m-gauge
                       :value="(item.resInfo.cpuUsage * 100).toFixed(2)"
                       :name="'cpuUsage'"
                       :id="'gauge-cpu-' + item.id">
               </m-gauge>
             </div>
-            <div class="col-md-4">
+            <div class="col-md-3">
               <m-gauge
                       :value="(item.resInfo.memoryUsage * 100).toFixed(2)"
                       :name="'memoryUsage'"
                       :id="'gauge-memory-' + item.id">
               </m-gauge>
             </div>
-            <div class="col-md-4">
+            <div class="col-md-3">
+              <div class="text-num-model">
+                <div class="value-p">
+                  <strong :style="{color:color[$index]}">{{item.resInfo.diskAvailable.toFixed(2)}}</strong>
+                </div>
+                <div class="text-1">
+                  diskAvailable(GB)
+                </div>
+              </div>
+            </div>
+            <div class="col-md-3">
               <div class="text-num-model">
                 <div class="value-p">
                   <strong :style="{color:color[$index]}">{{item.resInfo.loadAverage > 0? item.resInfo.loadAverage.toFixed(2):0}}</strong>
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/worker.vue b/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/worker.vue
index 2d853ae701..72e990fcf7 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/worker.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/worker.vue
@@ -30,21 +30,31 @@
             </div>
           </div>
           <div class="row-cont">
-            <div class="col-md-4">
+            <div class="col-md-3">
               <m-gauge
                       :value="(item.resInfo.cpuUsage * 100).toFixed(2)"
                       :name="'cpuUsage'"
                       :id="'gauge-cpu-' + item.id">
               </m-gauge>
             </div>
-            <div class="col-md-4">
+            <div class="col-md-3">
               <m-gauge
                       :value="(item.resInfo.memoryUsage * 100).toFixed(2)"
                       :name="'memoryUsage'"
                       :id="'gauge-memory-' + item.id">
               </m-gauge>
             </div>
-            <div class="col-md-4">
+            <div class="col-md-3">
+              <div class="text-num-model">
+                <div class="value-p">
+                  <strong :style="{color:color[$index]}">{{item.resInfo.diskAvailable.toFixed(2)}}</strong>
+                </div>
+                <div class="text-1">
+                  diskAvailable(GB)
+                </div>
+              </div>
+            </div>
+            <div class="col-md-3">
               <div class="text-num-model">
                 <div class="value-p">
                   <strong :style="{color:color[$index]}">{{item.resInfo.loadAverage > 0? item.resInfo.loadAverage.toFixed(2):0}}</strong>
diff --git a/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js b/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js
index 05caaf3cff..cd8d9939d1 100755
--- a/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js
+++ b/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js
@@ -197,6 +197,7 @@ export default {
   'Zk registration directory': 'Zk registration directory',
   cpuUsage: 'cpuUsage',
   memoryUsage: 'memoryUsage',
+  diskAvailable: 'diskAvailable',
   'Last heartbeat time': 'Last heartbeat time',
   'Edit Tenant': 'Edit Tenant',
   'OS Tenant Code': 'OS Tenant Code',
diff --git a/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js b/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js
index 8d76c7279c..f1a58e2e14 100644
--- a/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js
+++ b/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js
@@ -196,6 +196,7 @@ export default {
   'Zk registration directory': 'zk注册目录',
   cpuUsage: 'cpuUsage',
   memoryUsage: 'memoryUsage',
+  diskAvailable: 'diskAvailable',
   'Last heartbeat time': '最后心跳时间',
   'Edit Tenant': '编辑租户',
   'OS Tenant Code': '操作系统租户',