From 4fe56fc35f20d9cd17b648e80b172b05e0fb034e Mon Sep 17 00:00:00 2001 From: zeaslity Date: Thu, 5 Jan 2023 16:01:10 +0800 Subject: [PATCH] [ agent ] [ status ] - accomplish agent status - 7 --- .../io/wdd/common/beans/status/CpuInfo.java | 122 +++++++++++------- 1 file changed, 74 insertions(+), 48 deletions(-) diff --git a/common/src/main/java/io/wdd/common/beans/status/CpuInfo.java b/common/src/main/java/io/wdd/common/beans/status/CpuInfo.java index 9a830b8..c2c9e48 100644 --- a/common/src/main/java/io/wdd/common/beans/status/CpuInfo.java +++ b/common/src/main/java/io/wdd/common/beans/status/CpuInfo.java @@ -3,6 +3,7 @@ package io.wdd.common.beans.status; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; import oshi.hardware.CentralProcessor; import java.text.DecimalFormat; @@ -19,10 +20,10 @@ public class CpuInfo { * CPU总线程 */ private Integer cpuTotal; - + /** - * CPU核心数 - * */ + * CPU核心数 + */ private Integer coreTotal; /** @@ -53,58 +54,16 @@ public class CpuInfo { /** * CPU型号信息 */ - private CentralProcessor.ProcessorIdentifier cpuModel; + private CpuModel cpuModel; private double[] cpuLoadAverage; private double[] systemLoadAverage; - /** - * CPU型号信息 - */ - //private CpuTicks ticks; - - - public CpuInfo(CentralProcessor processor, long waitingTime){ + public CpuInfo(CentralProcessor processor, long waitingTime) { this.init(processor, waitingTime); } - - /** - * 获取指定等待时间内系统CPU 系统使用率、用户使用率、利用率等等 相关信息 - * - * @param processor {@link CentralProcessor} - * @param waitingTime 设置等待时间,单位毫秒 - * @since 5.7.12 - */ - private void init(CentralProcessor processor, long waitingTime) { - - final CpuTicks ticks = new CpuTicks(processor, waitingTime); - //this.ticks = ticks; - - this.cpuTotal = processor.getLogicalProcessorCount(); - this.coreTotal = processor.getPhysicalProcessorCount(); - - this.cpuModel = processor.getProcessorIdentifier(); - - final long totalCpu = ticks.totalCpu(); - this.cpuUsageTotol = totalCpu; - - this.systemCpuUsage = formatDouble(ticks.cSys, totalCpu); - this.userCpuUsage = formatDouble(ticks.user, totalCpu); - - this.wait = formatDouble(ticks.ioWait, totalCpu); - this.free = formatDouble(ticks.idle, totalCpu); - - - // system load average - this.systemLoadAverage = processor.getSystemLoadAverage(3); - - // cpu load average - this.cpuLoadAverage = formatCpuLoadAverage(processor.getProcessorCpuLoad(waitingTime)); - - } - /** * 获取每个CPU核心的tick,计算方式为 100 * tick / totalCpu * @@ -125,7 +84,7 @@ public class CpuInfo { return Double.parseDouble(LOAD_FORMAT.format(doubleNum)); } - private static double[] formatCpuLoadAverage(double[] cpuLoadAverage){ + private static double[] formatCpuLoadAverage(double[] cpuLoadAverage) { double[] result = new double[cpuLoadAverage.length]; for (int i = 0; i < cpuLoadAverage.length; i++) { @@ -135,4 +94,71 @@ public class CpuInfo { return result; } + /** + * 获取指定等待时间内系统CPU 系统使用率、用户使用率、利用率等等 相关信息 + * + * @param processor {@link CentralProcessor} + * @param waitingTime 设置等待时间,单位毫秒 + * @since 5.7.12 + */ + private void init(CentralProcessor processor, long waitingTime) { + + final CpuTicks ticks = new CpuTicks(processor, waitingTime); + //this.ticks = ticks; + + this.cpuTotal = processor.getLogicalProcessorCount(); + this.coreTotal = processor.getPhysicalProcessorCount(); + + this.cpuModel = mapFromProcessorIdentifier(processor.getProcessorIdentifier()); + + final long totalCpu = ticks.totalCpu(); + this.cpuUsageTotol = totalCpu; + + this.systemCpuUsage = formatDouble(ticks.cSys, totalCpu); + this.userCpuUsage = formatDouble(ticks.user, totalCpu); + + this.wait = formatDouble(ticks.ioWait, totalCpu); + this.free = formatDouble(ticks.idle, totalCpu); + + + // system load average + this.systemLoadAverage = processor.getSystemLoadAverage(3); + + // cpu load average + this.cpuLoadAverage = formatCpuLoadAverage(processor.getProcessorCpuLoad(waitingTime)); + + } + + private CpuModel mapFromProcessorIdentifier(CentralProcessor.ProcessorIdentifier id) { + + return CpuModel.builder() + .cpu64bit(id.isCpu64bit()) + .name(id.getName()) + .identifier(id.getIdentifier()) + .microArch(id.getMicroarchitecture()) + .vendor(id.getVendor()) + .build(); + } + + /** + * CPU型号信息 + */ + //private CpuTicks ticks; + + @Data + @AllArgsConstructor + @NoArgsConstructor + @SuperBuilder(toBuilder = true) + private static class CpuModel { + String name; + + String vendor; + + String microArch; + + boolean cpu64bit; + + String identifier; + } + }