Sfoglia il codice sorgente

update 使用hutool重写系统监控

疯狂的狮子li 4 anni fa
parent
commit
2b8ab9cc4d

+ 1 - 1
pom.xml

@@ -75,7 +75,7 @@
                     </exclusion>
                 </exclusions>
             </dependency>
-			
+
             <!-- 获取系统信息 -->
             <dependency>
                 <groupId>com.github.oshi</groupId>

+ 0 - 114
ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java

@@ -1,114 +0,0 @@
-package com.ruoyi.common.utils;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-
-/**
- * 精确的浮点数运算
- * 
- * @author ruoyi
- */
-public class Arith
-{
-
-    /** 默认除法运算精度 */
-    private static final int DEF_DIV_SCALE = 10;
-
-    /** 这个类不能实例化 */
-    private Arith()
-    {
-    }
-
-    /**
-     * 提供精确的加法运算。
-     * @param v1 被加数
-     * @param v2 加数
-     * @return 两个参数的和
-     */
-    public static double add(double v1, double v2)
-    {
-        BigDecimal b1 = new BigDecimal(Double.toString(v1));
-        BigDecimal b2 = new BigDecimal(Double.toString(v2));
-        return b1.add(b2).doubleValue();
-    }
-
-    /**
-     * 提供精确的减法运算。
-     * @param v1 被减数
-     * @param v2 减数
-     * @return 两个参数的差
-     */
-    public static double sub(double v1, double v2)
-    {
-        BigDecimal b1 = new BigDecimal(Double.toString(v1));
-        BigDecimal b2 = new BigDecimal(Double.toString(v2));
-        return b1.subtract(b2).doubleValue();
-    }
-
-    /**
-     * 提供精确的乘法运算。
-     * @param v1 被乘数
-     * @param v2 乘数
-     * @return 两个参数的积
-     */
-    public static double mul(double v1, double v2)
-    {
-        BigDecimal b1 = new BigDecimal(Double.toString(v1));
-        BigDecimal b2 = new BigDecimal(Double.toString(v2));
-        return b1.multiply(b2).doubleValue();
-    }
-
-    /**
-     * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到
-     * 小数点以后10位,以后的数字四舍五入。
-     * @param v1 被除数
-     * @param v2 除数
-     * @return 两个参数的商
-     */
-    public static double div(double v1, double v2)
-    {
-        return div(v1, v2, DEF_DIV_SCALE);
-    }
-
-    /**
-     * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
-     * 定精度,以后的数字四舍五入。
-     * @param v1 被除数
-     * @param v2 除数
-     * @param scale 表示表示需要精确到小数点以后几位。
-     * @return 两个参数的商
-     */
-    public static double div(double v1, double v2, int scale)
-    {
-        if (scale < 0)
-        {
-            throw new IllegalArgumentException(
-                    "The scale must be a positive integer or zero");
-        }
-        BigDecimal b1 = new BigDecimal(Double.toString(v1));
-        BigDecimal b2 = new BigDecimal(Double.toString(v2));
-        if (b1.compareTo(BigDecimal.ZERO) == 0)
-        {
-            return BigDecimal.ZERO.doubleValue();
-        }
-        return b1.divide(b2, scale, RoundingMode.HALF_UP).doubleValue();
-    }
-
-    /**
-     * 提供精确的小数位四舍五入处理。
-     * @param v 需要四舍五入的数字
-     * @param scale 小数点后保留几位
-     * @return 四舍五入后的结果
-     */
-    public static double round(double v, int scale)
-    {
-        if (scale < 0)
-        {
-            throw new IllegalArgumentException(
-                    "The scale must be a positive integer or zero");
-        }
-        BigDecimal b = new BigDecimal(Double.toString(v));
-        BigDecimal one = new BigDecimal("1");
-        return b.divide(one, scale, RoundingMode.HALF_UP).doubleValue();
-    }
-}

+ 0 - 66
ruoyi-common/src/main/java/com/ruoyi/common/utils/sign/Md5Utils.java

@@ -1,66 +0,0 @@
-package com.ruoyi.common.utils.sign;
-
-import java.security.MessageDigest;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Md5加密方法
- * 
- * @author ruoyi
- */
-public class Md5Utils
-{
-    private static final Logger log = LoggerFactory.getLogger(Md5Utils.class);
-
-    private static byte[] md5(String s)
-    {
-        MessageDigest algorithm;
-        try
-        {
-            algorithm = MessageDigest.getInstance("MD5");
-            algorithm.reset();
-            algorithm.update(s.getBytes("UTF-8"));
-            byte[] messageDigest = algorithm.digest();
-            return messageDigest;
-        }
-        catch (Exception e)
-        {
-            log.error("MD5 Error...", e);
-        }
-        return null;
-    }
-
-    private static final String toHex(byte hash[])
-    {
-        if (hash == null)
-        {
-            return null;
-        }
-        StringBuffer buf = new StringBuffer(hash.length * 2);
-        int i;
-
-        for (i = 0; i < hash.length; i++)
-        {
-            if ((hash[i] & 0xff) < 0x10)
-            {
-                buf.append("0");
-            }
-            buf.append(Long.toString(hash[i] & 0xff, 16));
-        }
-        return buf.toString();
-    }
-
-    public static String hash(String s)
-    {
-        try
-        {
-            return new String(toHex(md5(s)).getBytes("UTF-8"), "UTF-8");
-        }
-        catch (Exception e)
-        {
-            log.error("not supported charset...{}", e);
-            return s;
-        }
-    }
-}

+ 58 - 135
ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/Server.java

@@ -1,35 +1,35 @@
 package com.ruoyi.framework.web.domain;
 
-import java.net.UnknownHostException;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Properties;
-import com.ruoyi.common.utils.Arith;
-import com.ruoyi.common.utils.ip.IpUtils;
+
+import cn.hutool.core.net.NetUtil;
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.system.*;
+import cn.hutool.system.oshi.CpuInfo;
+import cn.hutool.system.oshi.OshiUtil;
 import com.ruoyi.framework.web.domain.server.Cpu;
 import com.ruoyi.framework.web.domain.server.Jvm;
 import com.ruoyi.framework.web.domain.server.Mem;
 import com.ruoyi.framework.web.domain.server.Sys;
 import com.ruoyi.framework.web.domain.server.SysFile;
-import oshi.SystemInfo;
-import oshi.hardware.CentralProcessor;
-import oshi.hardware.CentralProcessor.TickType;
+import lombok.Data;
 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;
 
 /**
  * 服务器相关信息
- * 
+ *
  * @author ruoyi
  */
-public class Server
-{
+@Data
+public class Server {
     private static final int OSHI_WAIT_SECOND = 1000;
-    
+
     /**
      * CPU相关信息
      */
@@ -55,103 +55,33 @@ public class Server
      */
     private List<SysFile> sysFiles = new LinkedList<SysFile>();
 
-    public Cpu getCpu()
-    {
-        return cpu;
-    }
-
-    public void setCpu(Cpu cpu)
-    {
-        this.cpu = cpu;
-    }
-
-    public Mem getMem()
-    {
-        return mem;
-    }
-
-    public void setMem(Mem mem)
-    {
-        this.mem = mem;
-    }
-
-    public Jvm getJvm()
-    {
-        return jvm;
-    }
-
-    public void setJvm(Jvm jvm)
-    {
-        this.jvm = jvm;
-    }
-
-    public Sys getSys()
-    {
-        return sys;
-    }
-
-    public void setSys(Sys sys)
-    {
-        this.sys = sys;
-    }
-
-    public List<SysFile> getSysFiles()
-    {
-        return sysFiles;
-    }
-
-    public void setSysFiles(List<SysFile> sysFiles)
-    {
-        this.sysFiles = sysFiles;
-    }
-
-    public void copyTo() throws Exception
-    {
-        SystemInfo si = new SystemInfo();
-        HardwareAbstractionLayer hal = si.getHardware();
-
-        setCpuInfo(hal.getProcessor());
-
-        setMemInfo(hal.getMemory());
 
+    public void copyTo() {
+        setCpuInfo();
+        setMemInfo();
         setSysInfo();
-
         setJvmInfo();
-
-        setSysFiles(si.getOperatingSystem());
+        setSysFiles();
     }
 
     /**
      * 设置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 setCpuInfo() {
+        CpuInfo cpuInfo = OshiUtil.getCpuInfo(OSHI_WAIT_SECOND);
+        cpu.setCpuNum(cpuInfo.getCpuNum());
+        cpu.setTotal(cpuInfo.getToTal());
+        cpu.setSys(cpuInfo.getSys());
+        cpu.setUsed(cpuInfo.getUsed());
+        cpu.setWait(cpuInfo.getWait());
+        cpu.setFree(cpuInfo.getFree());
     }
 
     /**
      * 设置内存信息
      */
-    private void setMemInfo(GlobalMemory memory)
-    {
+    private void setMemInfo() {
+        GlobalMemory memory = OshiUtil.getMemory();
         mem.setTotal(memory.getTotal());
         mem.setUsed(memory.getTotal() - memory.getAvailable());
         mem.setFree(memory.getAvailable());
@@ -160,38 +90,39 @@ public class Server
     /**
      * 设置服务器信息
      */
-    private void setSysInfo()
-    {
-        Properties props = System.getProperties();
-        sys.setComputerName(IpUtils.getHostName());
-        sys.setComputerIp(IpUtils.getHostIp());
-        sys.setOsName(props.getProperty("os.name"));
-        sys.setOsArch(props.getProperty("os.arch"));
-        sys.setUserDir(props.getProperty("user.dir"));
+    private void setSysInfo() {
+        HostInfo hostInfo = SystemUtil.getHostInfo();
+        OsInfo osInfo = SystemUtil.getOsInfo();
+        UserInfo userInfo = SystemUtil.getUserInfo();
+        sys.setComputerName(hostInfo.getName());
+        sys.setComputerIp(hostInfo.getAddress());
+        sys.setOsName(osInfo.getName());
+        sys.setOsArch(osInfo.getArch());
+        sys.setUserDir(userInfo.getCurrentDir());
     }
 
     /**
      * 设置Java虚拟机
      */
-    private void setJvmInfo() throws UnknownHostException
-    {
-        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 setJvmInfo() {
+        JavaInfo javaInfo = SystemUtil.getJavaInfo();
+        RuntimeInfo runtimeInfo = SystemUtil.getRuntimeInfo();
+        JavaRuntimeInfo javaRuntimeInfo = SystemUtil.getJavaRuntimeInfo();
+        jvm.setTotal(runtimeInfo.getTotalMemory());
+        jvm.setMax(runtimeInfo.getMaxMemory());
+        jvm.setFree(runtimeInfo.getFreeMemory());
+        jvm.setVersion(javaInfo.getVersion());
+        jvm.setHome(javaRuntimeInfo.getHomeDir());
     }
 
     /**
      * 设置磁盘信息
      */
-    private void setSysFiles(OperatingSystem os)
-    {
+    private void setSysFiles() {
+        OperatingSystem os = OshiUtil.getOs();
         FileSystem fileSystem = os.getFileSystem();
         List<OSFileStore> fsArray = fileSystem.getFileStores();
-        for (OSFileStore fs : fsArray)
-        {
+        for (OSFileStore fs : fsArray) {
             long free = fs.getUsableSpace();
             long total = fs.getTotalSpace();
             long used = total - free;
@@ -202,39 +133,31 @@ public class Server
             sysFile.setTotal(convertFileSize(total));
             sysFile.setFree(convertFileSize(free));
             sysFile.setUsed(convertFileSize(used));
-            sysFile.setUsage(Arith.mul(Arith.div(used, total, 4), 100));
+            sysFile.setUsage(NumberUtil.mul(NumberUtil.div(used, total, 4), 100));
             sysFiles.add(sysFile);
         }
     }
 
     /**
      * 字节转换
-     * 
+     *
      * @param size 字节大小
      * @return 转换后值
      */
-    public String convertFileSize(long size)
-    {
+    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)
-        {
+        if (size >= gb) {
+            return StrUtil.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)
-        {
+            return StrUtil.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);
+            return StrUtil.format(f > 100 ? "%.0f KB" : "%.1f KB", f);
+        } else {
+            return StrUtil.format("%d B", size);
         }
     }
 }

+ 20 - 33
ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Cpu.java

@@ -1,14 +1,13 @@
 package com.ruoyi.framework.web.domain.server;
 
-import com.ruoyi.common.utils.Arith;
+import cn.hutool.core.util.NumberUtil;
 
 /**
  * CPU相关信息
- * 
+ *
  * @author ruoyi
  */
-public class Cpu
-{
+public class Cpu {
     /**
      * 核心数
      */
@@ -39,63 +38,51 @@ public class Cpu
      */
     private double free;
 
-    public int getCpuNum()
-    {
+    public int getCpuNum() {
         return cpuNum;
     }
 
-    public void setCpuNum(int cpuNum)
-    {
+    public void setCpuNum(int cpuNum) {
         this.cpuNum = cpuNum;
     }
 
-    public double getTotal()
-    {
-        return Arith.round(Arith.mul(total, 100), 2);
+    public double getTotal() {
+        return NumberUtil.round(NumberUtil.mul(total, 100), 2).doubleValue();
     }
 
-    public void setTotal(double total)
-    {
+    public void setTotal(double total) {
         this.total = total;
     }
 
-    public double getSys()
-    {
-        return Arith.round(Arith.mul(sys / total, 100), 2);
+    public double getSys() {
+        return NumberUtil.round(NumberUtil.mul(sys / total, 100), 2).doubleValue();
     }
 
-    public void setSys(double sys)
-    {
+    public void setSys(double sys) {
         this.sys = sys;
     }
 
-    public double getUsed()
-    {
-        return Arith.round(Arith.mul(used / total, 100), 2);
+    public double getUsed() {
+        return NumberUtil.round(NumberUtil.mul(used / total, 100), 2).doubleValue();
     }
 
-    public void setUsed(double used)
-    {
+    public void setUsed(double used) {
         this.used = used;
     }
 
-    public double getWait()
-    {
-        return Arith.round(Arith.mul(wait / total, 100), 2);
+    public double getWait() {
+        return NumberUtil.round(NumberUtil.mul(wait / total, 100), 2).doubleValue();
     }
 
-    public void setWait(double wait)
-    {
+    public void setWait(double wait) {
         this.wait = wait;
     }
 
-    public double getFree()
-    {
-        return Arith.round(Arith.mul(free / total, 100), 2);
+    public double getFree() {
+        return NumberUtil.round(NumberUtil.mul(free / total, 100), 2).doubleValue();
     }
 
-    public void setFree(double free)
-    {
+    public void setFree(double free) {
         this.free = free;
     }
 }

+ 25 - 35
ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Jvm.java

@@ -1,16 +1,19 @@
 package com.ruoyi.framework.web.domain.server;
 
 import java.lang.management.ManagementFactory;
-import com.ruoyi.common.utils.Arith;
+import java.util.Date;
+
+import cn.hutool.core.date.BetweenFormatter;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.NumberUtil;
 import com.ruoyi.common.utils.DateUtils;
 
 /**
  * JVM相关信息
- * 
+ *
  * @author ruoyi
  */
-public class Jvm
-{
+public class Jvm {
     /**
      * 当前JVM占用的内存总数(M)
      */
@@ -36,71 +39,58 @@ public class Jvm
      */
     private String home;
 
-    public double getTotal()
-    {
-        return Arith.div(total, (1024 * 1024), 2);
+    public double getTotal() {
+        return NumberUtil.div(total, (1024 * 1024), 2);
     }
 
-    public void setTotal(double total)
-    {
+    public void setTotal(double total) {
         this.total = total;
     }
 
-    public double getMax()
-    {
-        return Arith.div(max, (1024 * 1024), 2);
+    public double getMax() {
+        return NumberUtil.div(max, (1024 * 1024), 2);
     }
 
-    public void setMax(double max)
-    {
+    public void setMax(double max) {
         this.max = max;
     }
 
-    public double getFree()
-    {
-        return Arith.div(free, (1024 * 1024), 2);
+    public double getFree() {
+        return NumberUtil.div(free, (1024 * 1024), 2);
     }
 
-    public void setFree(double free)
-    {
+    public void setFree(double free) {
         this.free = free;
     }
 
-    public double getUsed()
-    {
-        return Arith.div(total - free, (1024 * 1024), 2);
+    public double getUsed() {
+        return NumberUtil.div(total - free, (1024 * 1024), 2);
     }
 
-    public double getUsage()
-    {
-        return Arith.mul(Arith.div(total - free, total, 4), 100);
+    public double getUsage() {
+        return NumberUtil.mul(NumberUtil.div(total - free, total, 4), 100);
     }
 
     /**
      * 获取JDK名称
      */
-    public String getName()
-    {
+    public String getName() {
         return ManagementFactory.getRuntimeMXBean().getVmName();
     }
 
-    public String getVersion()
-    {
+    public String getVersion() {
         return version;
     }
 
-    public void setVersion(String version)
-    {
+    public void setVersion(String version) {
         this.version = version;
     }
 
-    public String getHome()
-    {
+    public String getHome() {
         return home;
     }
 
-    public void setHome(String home)
-    {
+    public void setHome(String home) {
         this.home = home;
     }
 

+ 5 - 5
ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Mem.java

@@ -1,6 +1,6 @@
 package com.ruoyi.framework.web.domain.server;
 
-import com.ruoyi.common.utils.Arith;
+import cn.hutool.core.util.NumberUtil;
 
 /**
  * 內存相关信息
@@ -26,7 +26,7 @@ public class Mem
 
     public double getTotal()
     {
-        return Arith.div(total, (1024 * 1024 * 1024), 2);
+        return NumberUtil.div(total, (1024 * 1024 * 1024), 2);
     }
 
     public void setTotal(long total)
@@ -36,7 +36,7 @@ public class Mem
 
     public double getUsed()
     {
-        return Arith.div(used, (1024 * 1024 * 1024), 2);
+        return NumberUtil.div(used, (1024 * 1024 * 1024), 2);
     }
 
     public void setUsed(long used)
@@ -46,7 +46,7 @@ public class Mem
 
     public double getFree()
     {
-        return Arith.div(free, (1024 * 1024 * 1024), 2);
+        return NumberUtil.div(free, (1024 * 1024 * 1024), 2);
     }
 
     public void setFree(long free)
@@ -56,6 +56,6 @@ public class Mem
 
     public double getUsage()
     {
-        return Arith.mul(Arith.div(used, total, 4), 100);
+        return NumberUtil.mul(NumberUtil.div(used, total, 4), 100);
     }
 }