|
@@ -1,6 +1,5 @@
|
|
package org.jetlinks.community.dashboard.measurements;
|
|
package org.jetlinks.community.dashboard.measurements;
|
|
|
|
|
|
-import lombok.SneakyThrows;
|
|
|
|
import org.hswebframework.utils.time.DateFormatter;
|
|
import org.hswebframework.utils.time.DateFormatter;
|
|
import org.jetlinks.core.metadata.ConfigMetadata;
|
|
import org.jetlinks.core.metadata.ConfigMetadata;
|
|
import org.jetlinks.core.metadata.DataType;
|
|
import org.jetlinks.core.metadata.DataType;
|
|
@@ -12,15 +11,9 @@ import org.jetlinks.community.dashboard.supports.StaticMeasurementProvider;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
import reactor.core.publisher.Flux;
|
|
import reactor.core.publisher.Flux;
|
|
|
|
|
|
-import java.lang.management.ManagementFactory;
|
|
|
|
-import java.lang.management.OperatingSystemMXBean;
|
|
|
|
-import java.lang.reflect.Method;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.time.Duration;
|
|
import java.time.Duration;
|
|
-import java.util.Arrays;
|
|
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
-import java.util.List;
|
|
|
|
-import java.util.concurrent.Callable;
|
|
|
|
|
|
|
|
import static java.math.BigDecimal.ROUND_HALF_UP;
|
|
import static java.math.BigDecimal.ROUND_HALF_UP;
|
|
|
|
|
|
@@ -37,7 +30,7 @@ public class SystemCpuMeasurementProvider
|
|
extends StaticMeasurementProvider {
|
|
extends StaticMeasurementProvider {
|
|
|
|
|
|
public SystemCpuMeasurementProvider() {
|
|
public SystemCpuMeasurementProvider() {
|
|
- super(DefaultDashboardDefinition.systemMonitor, SystemObjectDefinition.cpu);
|
|
|
|
|
|
+ super(DefaultDashboardDefinition.systemMonitor, MonitorObjectDefinition.cpu);
|
|
addMeasurement(cpuUseAgeMeasurement);
|
|
addMeasurement(cpuUseAgeMeasurement);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -46,39 +39,6 @@ public class SystemCpuMeasurementProvider
|
|
static StaticMeasurement cpuUseAgeMeasurement = new StaticMeasurement(CommonMeasurementDefinition.usage)
|
|
static StaticMeasurement cpuUseAgeMeasurement = new StaticMeasurement(CommonMeasurementDefinition.usage)
|
|
.addDimension(new CpuRealTimeMeasurementDimension());
|
|
.addDimension(new CpuRealTimeMeasurementDimension());
|
|
|
|
|
|
- static OperatingSystemMXBean osMxBean = ManagementFactory.getOperatingSystemMXBean();
|
|
|
|
-
|
|
|
|
- static Callable<Double> processCpuUsage;
|
|
|
|
- static Callable<Double> systemCpuUsage;
|
|
|
|
-
|
|
|
|
- private static final List<String> OPERATING_SYSTEM_BEAN_CLASS_NAMES = Arrays.asList(
|
|
|
|
- "com.sun.management.OperatingSystemMXBean", // HotSpot
|
|
|
|
- "com.ibm.lang.management.OperatingSystemMXBean" // J9
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- static {
|
|
|
|
- Class<?> mxBeanClass = null;
|
|
|
|
- for (String s : OPERATING_SYSTEM_BEAN_CLASS_NAMES) {
|
|
|
|
- try {
|
|
|
|
- mxBeanClass = Class.forName(s);
|
|
|
|
- } catch (Exception ignore) {
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- try {
|
|
|
|
- if (mxBeanClass != null) {
|
|
|
|
- Method method = mxBeanClass.getMethod("getProcessCpuLoad");
|
|
|
|
- Method system = mxBeanClass.getMethod("getSystemCpuLoad");
|
|
|
|
- processCpuUsage = () -> (double) method.invoke(osMxBean);
|
|
|
|
- systemCpuUsage = () -> (double) system.invoke(osMxBean);
|
|
|
|
- } else {
|
|
|
|
- processCpuUsage = () -> 0D;
|
|
|
|
- systemCpuUsage = () -> 0D;
|
|
|
|
- }
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
|
|
static class CpuRealTimeMeasurementDimension implements MeasurementDimension {
|
|
static class CpuRealTimeMeasurementDimension implements MeasurementDimension {
|
|
|
|
|
|
@@ -102,21 +62,13 @@ public class SystemCpuMeasurementProvider
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
- @SneakyThrows
|
|
|
|
- public double getProcessCpu() {
|
|
|
|
- return processCpuUsage.call() * 100;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @SneakyThrows
|
|
|
|
- public double getSystemCpu() {
|
|
|
|
- return systemCpuUsage.call() * 100;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
@Override
|
|
@Override
|
|
public Flux<MeasurementValue> getValue(MeasurementParameter parameter) {
|
|
public Flux<MeasurementValue> getValue(MeasurementParameter parameter) {
|
|
//每秒获取系统CPU使用率
|
|
//每秒获取系统CPU使用率
|
|
return Flux.interval(Duration.ofSeconds(1))
|
|
return Flux.interval(Duration.ofSeconds(1))
|
|
- .map(t -> SimpleMeasurementValue.of(BigDecimal.valueOf(getSystemCpu()).setScale(1, ROUND_HALF_UP),
|
|
|
|
|
|
+ .map(t -> SimpleMeasurementValue.of(BigDecimal
|
|
|
|
+ .valueOf(SystemMonitor.systemCpuUsage.getValue())
|
|
|
|
+ .setScale(1, ROUND_HALF_UP),
|
|
DateFormatter.toString(new Date(), "HH:mm:ss"),
|
|
DateFormatter.toString(new Date(), "HH:mm:ss"),
|
|
System.currentTimeMillis()))
|
|
System.currentTimeMillis()))
|
|
.cast(MeasurementValue.class);
|
|
.cast(MeasurementValue.class);
|