You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by ca...@apache.org on 2022/06/06 03:06:40 UTC
[dolphinscheduler] branch dev updated: [Feature][Monitoring] Added disk available capacity monitoring (#10287)
This is an automated email from the ASF dual-hosted git repository.
caishunfeng pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new 67c4f2b259 [Feature][Monitoring] Added disk available capacity monitoring (#10287)
67c4f2b259 is described below
commit 67c4f2b25941392d66f282fd67a7f2b16388ef45
Author: retime123 <78...@qq.com>
AuthorDate: Mon Jun 6 11:06:33 2022 +0800
[Feature][Monitoring] Added disk available capacity monitoring (#10287)
* Added disk available capacity monitoring
* resolve conflict
Added disk available capacity monitoring
* resolve conflict
Added disk available capacity monitoring
* resolve conflict
Added disk available capacity monitoring
---
.../org/apache/dolphinscheduler/common/Constants.java | 2 +-
.../dolphinscheduler/common/utils/HeartBeat.java | 15 ++++++++++++++-
.../apache/dolphinscheduler/common/utils/OSUtils.java | 18 ++++++++++++++++++
.../apache/dolphinscheduler/common/os/OSUtilsTest.java | 7 +++++++
.../dolphinscheduler/common/utils/HeartBeatTest.java | 3 ++-
dolphinscheduler-ui/src/locales/en_US/monitor.ts | 2 ++
dolphinscheduler-ui/src/locales/zh_CN/monitor.ts | 2 ++
.../src/views/monitor/servers/master/index.tsx | 15 ++++++++++++++-
.../src/views/monitor/servers/worker/index.tsx | 15 ++++++++++++++-
9 files changed, 74 insertions(+), 5 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 997ead7ef2..7af48d14d2 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
@@ -389,7 +389,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 b4df08f4b7..ecfa814cc6 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
@@ -41,6 +41,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;
}
@@ -176,6 +186,7 @@ public class HeartBeat {
this.loadAverage = OSUtils.loadAverage();
this.availablePhysicalMemorySize = OSUtils.availablePhysicalMemorySize();
this.memoryUsage = OSUtils.memoryUsage();
+ this.diskAvailable = OSUtils.diskAvailable();
this.processId = OSUtils.getProcessID();
}
@@ -216,7 +227,8 @@ public class HeartBeat {
builder.append(processId).append(Constants.COMMA);
builder.append(workerHostWeight).append(Constants.COMMA);
builder.append(workerExecThreadCount).append(Constants.COMMA);
- builder.append(workerWaitingTaskCount);
+ builder.append(workerWaitingTaskCount).append(Constants.COMMA);
+ builder.append(diskAvailable);
return builder.toString();
}
@@ -243,6 +255,7 @@ public class HeartBeat {
heartBeat.workerHostWeight = Integer.parseInt(parts[10]);
heartBeat.workerExecThreadCount = Integer.parseInt(parts[11]);
heartBeat.workerWaitingTaskCount = Integer.parseInt(parts[12]);
+ heartBeat.diskAvailable = Double.parseDouble(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 1cec5a2913..723a6639c3 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
@@ -26,6 +26,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;
@@ -92,6 +93,23 @@ public class OSUtils {
return Double.parseDouble(df.format(memoryUsage));
}
+ /**
+ * get disk usage
+ * Keep 2 decimal
+ *
+ * @return disk free size, unit: GB
+ */
+ public static double diskAvailable() {
+ File file = new File(".");
+ 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 5300a64d82..caea9322c7 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
@@ -42,6 +42,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..c207f6bfb5 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,7 +55,7 @@ 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,3.09,6.47,5.0,1.0,1634033006749,1634033006857,1,29732,1,199,200,65.86";
HeartBeat heartBeat = HeartBeat.decodeHeartBeat(heartBeatInfo);
double delta = 0.001;
@@ -71,6 +71,7 @@ public class HeartBeatTest {
assertEquals(29732, heartBeat.getProcessId());
assertEquals(199, heartBeat.getWorkerExecThreadCount());
assertEquals(200, heartBeat.getWorkerWaitingTaskCount());
+ assertEquals(65.86, heartBeat.getDiskAvailable(), delta);
}
}
diff --git a/dolphinscheduler-ui/src/locales/en_US/monitor.ts b/dolphinscheduler-ui/src/locales/en_US/monitor.ts
index 2b9102f20e..27bd82ce70 100644
--- a/dolphinscheduler-ui/src/locales/en_US/monitor.ts
+++ b/dolphinscheduler-ui/src/locales/en_US/monitor.ts
@@ -19,6 +19,7 @@ export default {
master: {
cpu_usage: 'CPU Usage',
memory_usage: 'Memory Usage',
+ disk_available: 'Disk Available',
load_average: 'Load Average',
create_time: 'Create Time',
last_heartbeat_time: 'Last Heartbeat Time',
@@ -32,6 +33,7 @@ export default {
worker: {
cpu_usage: 'CPU Usage',
memory_usage: 'Memory Usage',
+ disk_available: 'Disk Available',
load_average: 'Load Average',
create_time: 'Create Time',
last_heartbeat_time: 'Last Heartbeat Time',
diff --git a/dolphinscheduler-ui/src/locales/zh_CN/monitor.ts b/dolphinscheduler-ui/src/locales/zh_CN/monitor.ts
index 1d319297a6..eca2fe7a20 100644
--- a/dolphinscheduler-ui/src/locales/zh_CN/monitor.ts
+++ b/dolphinscheduler-ui/src/locales/zh_CN/monitor.ts
@@ -19,6 +19,7 @@ export default {
master: {
cpu_usage: '处理器使用量',
memory_usage: '内存使用量',
+ disk_available: '磁盘可用容量',
load_average: '平均负载量',
create_time: '创建时间',
last_heartbeat_time: '最后心跳时间',
@@ -32,6 +33,7 @@ export default {
worker: {
cpu_usage: '处理器使用量',
memory_usage: '内存使用量',
+ disk_available: '磁盘可用容量',
load_average: '平均负载量',
create_time: '创建时间',
last_heartbeat_time: '最后心跳时间',
diff --git a/dolphinscheduler-ui/src/views/monitor/servers/master/index.tsx b/dolphinscheduler-ui/src/views/monitor/servers/master/index.tsx
index 78563bc514..c01f841b35 100644
--- a/dolphinscheduler-ui/src/views/monitor/servers/master/index.tsx
+++ b/dolphinscheduler-ui/src/views/monitor/servers/master/index.tsx
@@ -98,7 +98,7 @@ const master = defineComponent({
</NSpace>
</NSpace>
</NCard>
- <NGrid x-gap='12' cols='3'>
+ <NGrid x-gap='12' cols='4'>
<NGi>
<Card title={t('monitor.master.cpu_usage')}>
<div class={styles.card}>
@@ -125,6 +125,19 @@ const master = defineComponent({
</div>
</Card>
</NGi>
+ <NGi>
+ <Card title={t('monitor.master.disk_available')}>
+ <div class={[styles.card, styles['load-average']]}>
+ {item && (
+ <NNumberAnimation
+ precision={2}
+ from={0}
+ to={JSON.parse(item.resInfo).diskAvailable}
+ />
+ )}
+ </div>
+ </Card>
+ </NGi>
<NGi>
<Card title={t('monitor.master.load_average')}>
<div class={[styles.card, styles['load-average']]}>
diff --git a/dolphinscheduler-ui/src/views/monitor/servers/worker/index.tsx b/dolphinscheduler-ui/src/views/monitor/servers/worker/index.tsx
index e532d539a2..2eb682310f 100644
--- a/dolphinscheduler-ui/src/views/monitor/servers/worker/index.tsx
+++ b/dolphinscheduler-ui/src/views/monitor/servers/worker/index.tsx
@@ -102,7 +102,7 @@ const worker = defineComponent({
</NSpace>
</NSpace>
</NCard>
- <NGrid x-gap='12' cols='3'>
+ <NGrid x-gap='12' cols='4'>
<NGi>
<Card title={t('monitor.worker.cpu_usage')}>
<div class={styles.card}>
@@ -129,6 +129,19 @@ const worker = defineComponent({
</div>
</Card>
</NGi>
+ <NGi>
+ <Card title={t('monitor.worker.disk_available')}>
+ <div class={[styles.card, styles['load-average']]}>
+ {item && (
+ <NNumberAnimation
+ precision={2}
+ from={0}
+ to={JSON.parse(item.resInfo).diskAvailable}
+ />
+ )}
+ </div>
+ </Card>
+ </NGi>
<NGi>
<Card title={t('monitor.worker.load_average')}>
<div class={[styles.card, styles['load-average']]}>