diff --git a/pom.xml b/pom.xml index dcd763d4..5c4146ab 100644 --- a/pom.xml +++ b/pom.xml @@ -165,9 +165,9 @@ - com.github.oshi - oshi-core - ${oshi.version} + cn.stylefeng.roses + monitor-spring-boot-starter + 1.0.0 diff --git a/src/main/java/cn/stylefeng/guns/modular/system/monitor/controller/MonitorController.java b/src/main/java/cn/stylefeng/guns/modular/system/monitor/controller/MonitorController.java index e50dfa91..435e1740 100644 --- a/src/main/java/cn/stylefeng/guns/modular/system/monitor/controller/MonitorController.java +++ b/src/main/java/cn/stylefeng/guns/modular/system/monitor/controller/MonitorController.java @@ -5,7 +5,7 @@ import cn.hutool.core.util.StrUtil; import cn.stylefeng.guns.core.consts.ProjectConstants; import cn.stylefeng.guns.modular.system.monitor.model.PromResultInfo; import cn.stylefeng.guns.modular.system.monitor.service.MetricService; -import cn.stylefeng.guns.modular.system.monitor.timer.SystemHardwareInfoHolder; +import cn.stylefeng.roses.kernel.monitor.system.holder.SystemHardwareInfoHolder; import cn.stylefeng.roses.kernel.resource.api.annotation.ApiResource; import cn.stylefeng.roses.kernel.resource.api.annotation.GetResource; import com.alibaba.fastjson.JSON; diff --git a/src/main/java/cn/stylefeng/guns/modular/system/monitor/model/CpuInfo.java b/src/main/java/cn/stylefeng/guns/modular/system/monitor/model/CpuInfo.java deleted file mode 100644 index 886f11d6..00000000 --- a/src/main/java/cn/stylefeng/guns/modular/system/monitor/model/CpuInfo.java +++ /dev/null @@ -1,69 +0,0 @@ -package cn.stylefeng.guns.modular.system.monitor.model; - -import cn.hutool.core.util.NumberUtil; -import lombok.Setter; - -/** - * CPU相关信息 - * - * @author fengshuonan - * @date 2019-07-13 13:42 - */ -@Setter -public class CpuInfo { - - /** - * 核心数 - */ - private int cpuNum; - - /** - * CPU总的使用率 - */ - private double total; - - /** - * CPU系统使用率 - */ - private double sys; - - /** - * CPU用户使用率 - */ - private double used; - - /** - * CPU当前等待率 - */ - private double wait; - - /** - * CPU当前空闲率 - */ - private double free; - - public int getCpuNum() { - return cpuNum; - } - - public double getTotal() { - return NumberUtil.round(NumberUtil.mul(total, 100), 2).doubleValue(); - } - - public double getSys() { - return NumberUtil.round(NumberUtil.mul(sys / total, 100), 2).doubleValue(); - } - - public double getUsed() { - return NumberUtil.round(NumberUtil.mul(used / total, 100), 2).doubleValue(); - } - - public double getWait() { - return NumberUtil.round(NumberUtil.mul(wait / total, 100), 2).doubleValue(); - } - - public double getFree() { - return NumberUtil.round(NumberUtil.mul(free / total, 100), 2).doubleValue(); - } - -} diff --git a/src/main/java/cn/stylefeng/guns/modular/system/monitor/model/JvmInfo.java b/src/main/java/cn/stylefeng/guns/modular/system/monitor/model/JvmInfo.java deleted file mode 100644 index bc306b5e..00000000 --- a/src/main/java/cn/stylefeng/guns/modular/system/monitor/model/JvmInfo.java +++ /dev/null @@ -1,110 +0,0 @@ -package cn.stylefeng.guns.modular.system.monitor.model; - -import cn.hutool.core.date.DateUnit; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.NumberUtil; -import lombok.Setter; - -import java.lang.management.ManagementFactory; -import java.util.Date; - -/** - * JVM相关信息 - * - * @author fengshuonan - * @date 2019-07-13 13:42 - */ -@Setter -public class JvmInfo { - - /** - * 当前JVM占用的内存总数(M) - */ - private double total; - - /** - * JVM最大可用内存总数(M) - */ - private double max; - - /** - * JVM空闲内存(M) - */ - private double free; - - /** - * JDK版本 - */ - private String version; - - /** - * JDK路径 - */ - private String home; - - public double getTotal() { - return NumberUtil.div(total, (1024 * 1024), 2); - } - - public double getMax() { - return NumberUtil.div(max, (1024 * 1024), 2); - } - - public double getFree() { - return NumberUtil.div(free, (1024 * 1024), 2); - } - - public double getUsed() { - return NumberUtil.div(total - free, (1024 * 1024), 2); - } - - public String getVersion() { - return version; - } - - public String getHome() { - return home; - } - - public double getUsage() { - return NumberUtil.mul(NumberUtil.div(total - free, total, 4), 100); - } - - /** - * 获取JDK名称 - */ - public String getName() { - return ManagementFactory.getRuntimeMXBean().getVmName(); - } - - /** - * JDK启动时间 - */ - public String getStartTime() { - long time = ManagementFactory.getRuntimeMXBean().getStartTime(); - Date date = new Date(time); - return DateUtil.formatDateTime(date); - } - - /** - * JDK运行时间 - */ - public String getRunTime() { - - long time = ManagementFactory.getRuntimeMXBean().getStartTime(); - Date date = new Date(time); - - //运行多少分钟 - long runMS = DateUtil.between(date, new Date(), DateUnit.MS); - - long nd = 1000 * 24 * 60 * 60; - long nh = 1000 * 60 * 60; - long nm = 1000 * 60; - - long day = runMS / nd; - long hour = runMS % nd / nh; - long min = runMS % nd % nh / nm; - - return day + "天" + hour + "小时" + min + "分钟"; - } -} diff --git a/src/main/java/cn/stylefeng/guns/modular/system/monitor/model/MemInfo.java b/src/main/java/cn/stylefeng/guns/modular/system/monitor/model/MemInfo.java deleted file mode 100644 index ca9a8e2a..00000000 --- a/src/main/java/cn/stylefeng/guns/modular/system/monitor/model/MemInfo.java +++ /dev/null @@ -1,45 +0,0 @@ -package cn.stylefeng.guns.modular.system.monitor.model; - -import cn.hutool.core.util.NumberUtil; -import lombok.Setter; - -/** - * 內存相关信息 - * - * @author fengshuonan - * @date 2019-07-13 13:42 - */ -@Setter -public class MemInfo { - - /** - * 内存总量 - */ - private double total; - - /** - * 已用内存 - */ - private double used; - - /** - * 剩余内存 - */ - private double free; - - public double getTotal() { - return NumberUtil.div(total, (1024 * 1024 * 1024), 2); - } - - public double getUsed() { - return NumberUtil.div(used, (1024 * 1024 * 1024), 2); - } - - public double getFree() { - return NumberUtil.div(free, (1024 * 1024 * 1024), 2); - } - - public double getUsage() { - return NumberUtil.mul(NumberUtil.div(used, total, 4), 100); - } -} diff --git a/src/main/java/cn/stylefeng/guns/modular/system/monitor/model/SysFileInfo.java b/src/main/java/cn/stylefeng/guns/modular/system/monitor/model/SysFileInfo.java deleted file mode 100644 index 8885718e..00000000 --- a/src/main/java/cn/stylefeng/guns/modular/system/monitor/model/SysFileInfo.java +++ /dev/null @@ -1,49 +0,0 @@ -package cn.stylefeng.guns.modular.system.monitor.model; - -import lombok.Data; - -/** - * 系统文件相关信息 - * - * @author fengshuonan - * @date 2019-07-13 13:42 - */ -@Data -public class SysFileInfo { - - /** - * 盘符路径 - */ - private String dirName; - - /** - * 盘符类型 - */ - private String sysTypeName; - - /** - * 文件类型 - */ - private String typeName; - - /** - * 总大小 - */ - private String total; - - /** - * 剩余大小 - */ - private String free; - - /** - * 已经使用量 - */ - private String used; - - /** - * 资源的使用率 - */ - private double usage; - -} diff --git a/src/main/java/cn/stylefeng/guns/modular/system/monitor/model/SysInfo.java b/src/main/java/cn/stylefeng/guns/modular/system/monitor/model/SysInfo.java deleted file mode 100644 index e03764d6..00000000 --- a/src/main/java/cn/stylefeng/guns/modular/system/monitor/model/SysInfo.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.stylefeng.guns.modular.system.monitor.model; - -import lombok.Data; - -/** - * 系统相关信息 - * - * @author fengshuonan - * @date 2019-07-13 13:42 - */ -@Data -public class SysInfo { - - /** - * 服务器名称 - */ - private String computerName; - - /** - * 服务器Ip - */ - private String computerIp; - - /** - * 项目路径 - */ - private String userDir; - - /** - * 操作系统 - */ - private String osName; - - /** - * 系统架构 - */ - private String osArch; - -} diff --git a/src/main/java/cn/stylefeng/guns/modular/system/monitor/timer/SystemHardwareInfoHolder.java b/src/main/java/cn/stylefeng/guns/modular/system/monitor/timer/SystemHardwareInfoHolder.java deleted file mode 100644 index 2375a997..00000000 --- a/src/main/java/cn/stylefeng/guns/modular/system/monitor/timer/SystemHardwareInfoHolder.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.stylefeng.guns.modular.system.monitor.timer; - -import cn.stylefeng.guns.modular.system.monitor.warpper.SystemHardwareWrapper; -import cn.stylefeng.roses.kernel.timer.api.TimerAction; -import org.springframework.stereotype.Component; - -/** - * 定时刷新服务器状态信息 - * - * @author fengshuonan - * @date 2021/1/31 21:52 - */ -@Component -public class SystemHardwareInfoHolder implements TimerAction { - - private SystemHardwareWrapper systemHardwareWrapper = null; - - @Override - public void action() { - SystemHardwareWrapper newInfo = new SystemHardwareWrapper(); - newInfo.copyTo(); - systemHardwareWrapper = newInfo; - } - - public SystemHardwareWrapper getSystemHardwareInfo() { - if (systemHardwareWrapper != null) { - return systemHardwareWrapper; - } - - systemHardwareWrapper = new SystemHardwareWrapper(); - systemHardwareWrapper.copyTo(); - return systemHardwareWrapper; - } - -} diff --git a/src/main/java/cn/stylefeng/guns/modular/system/monitor/warpper/SystemHardwareWrapper.java b/src/main/java/cn/stylefeng/guns/modular/system/monitor/warpper/SystemHardwareWrapper.java deleted file mode 100644 index 638fd08b..00000000 --- a/src/main/java/cn/stylefeng/guns/modular/system/monitor/warpper/SystemHardwareWrapper.java +++ /dev/null @@ -1,182 +0,0 @@ -package cn.stylefeng.guns.modular.system.monitor.warpper; - -import cn.hutool.core.net.NetUtil; -import cn.hutool.core.util.NumberUtil; -import cn.stylefeng.guns.modular.system.monitor.model.*; -import cn.stylefeng.roses.kernel.rule.util.IpInfoUtils; -import lombok.Data; -import oshi.SystemInfo; -import oshi.hardware.CentralProcessor; -import oshi.hardware.CentralProcessor.TickType; -import oshi.hardware.GlobalMemory; -import oshi.hardware.HardwareAbstractionLayer; -import oshi.software.os.FileSystem; -import oshi.software.os.OSFileStore; -import oshi.software.os.OperatingSystem; -import oshi.util.Util; - -import java.util.LinkedList; -import java.util.List; -import java.util.Properties; - -/** - * 服务器相关信息 - * - * @author fengshuonan - * @date 2019-07-13 13:42 - */ -@Data -public class SystemHardwareWrapper { - - private static final int OSHI_WAIT_SECOND = 1000; - - /** - * CPU相关信息 - */ - private CpuInfo cpu = new CpuInfo(); - - /** - * 內存相关信息 - */ - private MemInfo mem = new MemInfo(); - - /** - * JVM相关信息 - */ - private JvmInfo jvm = new JvmInfo(); - - /** - * 服务器相关信息 - */ - private SysInfo sys = new SysInfo(); - - /** - * 磁盘相关信息 - */ - private List sysFiles = new LinkedList<>(); - - public void copyTo() { - SystemInfo si = new SystemInfo(); - HardwareAbstractionLayer hal = si.getHardware(); - - setCpuInfo(hal.getProcessor()); - - setMemInfo(hal.getMemory()); - - setSysInfo(); - - setJvmInfo(); - - setSysFiles(si.getOperatingSystem()); - } - - /** - * 设置CPU信息 - */ - private void setCpuInfo(CentralProcessor processor) { - // CPU信息 - long[] prevTicks = processor.getSystemCpuLoadTicks(); - Util.sleep(OSHI_WAIT_SECOND); - long[] ticks = processor.getSystemCpuLoadTicks(); - long nice = ticks[TickType.NICE.getIndex()] - prevTicks[TickType.NICE.getIndex()]; - long irq = ticks[TickType.IRQ.getIndex()] - prevTicks[TickType.IRQ.getIndex()]; - long softirq = ticks[TickType.SOFTIRQ.getIndex()] - prevTicks[TickType.SOFTIRQ.getIndex()]; - long steal = ticks[TickType.STEAL.getIndex()] - prevTicks[TickType.STEAL.getIndex()]; - long cSys = ticks[TickType.SYSTEM.getIndex()] - prevTicks[TickType.SYSTEM.getIndex()]; - long user = ticks[TickType.USER.getIndex()] - prevTicks[TickType.USER.getIndex()]; - long iowait = ticks[TickType.IOWAIT.getIndex()] - prevTicks[TickType.IOWAIT.getIndex()]; - long idle = ticks[TickType.IDLE.getIndex()] - prevTicks[TickType.IDLE.getIndex()]; - long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal; - cpu.setCpuNum(processor.getLogicalProcessorCount()); - cpu.setTotal(totalCpu); - cpu.setSys(cSys); - cpu.setUsed(user); - cpu.setWait(iowait); - cpu.setFree(idle); - } - - /** - * 设置内存信息 - */ - private void setMemInfo(GlobalMemory memory) { - mem.setTotal(memory.getTotal()); - mem.setUsed(memory.getTotal() - memory.getAvailable()); - mem.setFree(memory.getAvailable()); - } - - /** - * 设置服务器信息 - */ - private void setSysInfo() { - Properties props = System.getProperties(); - sys.setComputerName(IpInfoUtils.getHostName()); - sys.setComputerIp(NetUtil.getLocalhostStr()); - sys.setOsName(props.getProperty("os.name")); - sys.setOsArch(props.getProperty("os.arch")); - sys.setUserDir(props.getProperty("user.dir")); - } - - /** - * 设置Java虚拟机 - */ - private void setJvmInfo() { - Properties props = System.getProperties(); - jvm.setTotal(Runtime.getRuntime().totalMemory()); - jvm.setMax(Runtime.getRuntime().maxMemory()); - jvm.setFree(Runtime.getRuntime().freeMemory()); - jvm.setVersion(props.getProperty("java.version")); - jvm.setHome(props.getProperty("java.home")); - } - - /** - * 设置磁盘信息 - */ - private void setSysFiles(OperatingSystem os) { - FileSystem fileSystem = os.getFileSystem(); - OSFileStore[] fsArray = fileSystem.getFileStores(); - for (OSFileStore fs : fsArray) { - long free = fs.getUsableSpace(); - long total = fs.getTotalSpace(); - long used = total - free; - SysFileInfo sysFile = new SysFileInfo(); - sysFile.setDirName(fs.getMount()); - sysFile.setSysTypeName(fs.getType()); - sysFile.setTypeName(fs.getName()); - sysFile.setTotal(convertFileSize(total)); - sysFile.setFree(convertFileSize(free)); - sysFile.setUsed(convertFileSize(used)); - - if (total == 0) { - sysFile.setUsage(0); - } else { - sysFile.setUsage(NumberUtil.mul(NumberUtil.div(used, total, 4), 100)); - } - - sysFiles.add(sysFile); - } - } - - /** - * 字节转换 - * - * @param size 字节大小 - * @return 转换后值 - */ - public String convertFileSize(long size) { - long kb = 1024; - long mb = kb * 1024; - long gb = mb * 1024; - if (size >= gb) { - return String.format("%.1f GB", (float) size / gb); - } else if (size >= mb) { - float f = (float) size / mb; - return String.format(f > 100 ? "%.0f MB" : "%.1f MB", f); - } else if (size >= kb) { - float f = (float) size / kb; - return String.format(f > 100 ? "%.0f KB" : "%.1f KB", f); - } else { - return String.format("%d B", size); - } - } - -} diff --git a/src/main/resources/db/migration/V1.0_20210201_0001__update_monitor_timer.sql b/src/main/resources/db/migration/V1.0_20210201_0001__update_monitor_timer.sql new file mode 100644 index 00000000..d09695c9 --- /dev/null +++ b/src/main/resources/db/migration/V1.0_20210201_0001__update_monitor_timer.sql @@ -0,0 +1 @@ +UPDATE `sys_timers` SET `timer_name` = '定时刷新服务器状态', `action_class` = 'cn.stylefeng.roses.kernel.monitor.system.holder.SystemHardwareInfoHolder', `cron` = '0/5 * * * * ? ', `job_status` = 1, `remark` = '每30分钟执行一次,刷新服务器状态', `del_flag` = 'N', `create_time` = '2021-01-31 21:59:05', `create_user` = 1339550467939639299, `update_time` = '2021-01-31 22:00:23', `update_user` = 1339550467939639299 WHERE `timer_id` = 1355878268976271362;