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;