reghao 4 лет назад
Родитель
Сommit
59029a54eb
58 измененных файлов с 227 добавлено и 1289 удалено
  1. 4 16
      common/src/main/java/cn/reghao/autodop/common/beans/BeansConfig.java
  2. 1 1
      common/src/main/java/cn/reghao/autodop/common/log/MqttAppender.java
  3. 13 40
      common/src/main/java/cn/reghao/autodop/common/machine/Cpu.java
  4. 0 11
      common/src/main/java/cn/reghao/autodop/common/machine/LinuxProc.java
  5. 41 27
      common/src/main/java/cn/reghao/autodop/common/machine/Machine.java
  6. 0 23
      common/src/main/java/cn/reghao/autodop/common/machine/MachineInfo.java
  7. 0 29
      common/src/main/java/cn/reghao/autodop/common/machine/MachineStat.java
  8. 21 4
      common/src/main/java/cn/reghao/autodop/common/machine/Memory.java
  9. 38 0
      common/src/main/java/cn/reghao/autodop/common/machine/Os.java
  10. 0 20
      common/src/main/java/cn/reghao/autodop/common/machine/cpu/CpuInfo.java
  11. 0 26
      common/src/main/java/cn/reghao/autodop/common/machine/cpu/CpuStat.java
  12. 0 37
      common/src/main/java/cn/reghao/autodop/common/machine/cpu/CpuStats.java
  13. 0 19
      common/src/main/java/cn/reghao/autodop/common/machine/cpu/util/AbstractPercentageCalculator.java
  14. 0 46
      common/src/main/java/cn/reghao/autodop/common/machine/cpu/util/CpuPercentageCalculator.java
  15. 0 91
      common/src/main/java/cn/reghao/autodop/common/machine/disk/Disk.java
  16. 0 31
      common/src/main/java/cn/reghao/autodop/common/machine/disk/DiskStat.java
  17. 0 27
      common/src/main/java/cn/reghao/autodop/common/machine/memory/MemoryInfo.java
  18. 0 144
      common/src/main/java/cn/reghao/autodop/common/machine/network/Network.java
  19. 0 18
      common/src/main/java/cn/reghao/autodop/common/machine/network/NetworkStat.java
  20. 0 28
      common/src/main/java/cn/reghao/autodop/common/machine/network/TcpConnStat.java
  21. 0 21
      common/src/main/java/cn/reghao/autodop/common/machine/network/TcpState.java
  22. 0 67
      common/src/main/java/cn/reghao/autodop/common/machine/os/Os.java
  23. 0 22
      common/src/main/java/cn/reghao/autodop/common/machine/os/OsInfo.java
  24. 0 24
      common/src/main/java/cn/reghao/autodop/common/machine/os/OsStat.java
  25. 0 103
      common/src/main/java/cn/reghao/autodop/common/machine/proc/Process.java
  26. 0 35
      common/src/main/java/cn/reghao/autodop/common/machine/proc/ProcessStat.java
  27. 0 13
      common/src/main/java/cn/reghao/autodop/common/machine/shell/MachineShell.java
  28. 1 1
      common/src/main/java/cn/reghao/autodop/common/mqtt/DefaultMqttClient.java
  29. 0 16
      common/src/main/java/cn/reghao/autodop/common/msg/rpc/dto/machine/cpu/CpuInfo.java
  30. 0 22
      common/src/main/java/cn/reghao/autodop/common/msg/rpc/dto/machine/cpu/CpuStat.java
  31. 0 37
      common/src/main/java/cn/reghao/autodop/common/msg/rpc/dto/machine/cpu/CpuStats.java
  32. 0 22
      common/src/main/java/cn/reghao/autodop/common/msg/rpc/dto/machine/disk/DiskInfo.java
  33. 0 31
      common/src/main/java/cn/reghao/autodop/common/msg/rpc/dto/machine/disk/DiskStat.java
  34. 0 23
      common/src/main/java/cn/reghao/autodop/common/msg/rpc/dto/machine/mem/MemoryInfo.java
  35. 1 1
      dagent/src/main/java/cn/reghao/autodop/dagent/app/DockerAppServiceImpl.java
  36. 7 10
      dagent/src/main/java/cn/reghao/autodop/dagent/machine/NodeClazzPubImpl.java
  37. 1 1
      dagent/src/main/java/cn/reghao/autodop/dagent/rpc/impl/AppClazzRpcImpl.java
  38. 0 2
      dagent/src/main/java/cn/reghao/autodop/dagent/rpc/impl/MachineClazzRpcImpl.java
  39. 1 1
      dagent/src/main/java/cn/reghao/autodop/dagent/spring/DagentLifecycle.java
  40. 3 5
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/page/BuildDirPageController.java
  41. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/page/CompilerPageController.java
  42. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/page/PackerPageController.java
  43. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/bd/AppDeployer.java
  44. 13 16
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/config/impl/BuildDirServiceImpl.java
  45. 10 10
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/controller/MachinePageController.java
  46. 2 4
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/db/query/MachineQuery.java
  47. 4 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/db/repository/MachineInfoRepository.java
  48. 4 5
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/model/po/DiskInfo.java
  49. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/model/po/MachineHost.java
  50. 31 13
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/model/po/MachineInfo.java
  51. 0 58
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/model/po/MachineStat.java
  52. 4 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/model/po/NetworkInfo.java
  53. 9 9
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/model/vo/DiskUsage.java
  54. 2 6
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/model/vo/MachineHostVO.java
  55. 6 12
      dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/service/job/MachineStatCheckJob.java
  56. 4 50
      dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/impl/NodeClazzPubResult.java
  57. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/spring/DmasterLifecycle.java
  58. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/util/log/MongoAppender.java

+ 4 - 16
common/src/main/java/cn/reghao/autodop/common/beans/BeansConfig.java

@@ -1,11 +1,9 @@
 package cn.reghao.autodop.common.beans;
 
 import cn.reghao.autodop.common.machine.Machine;
-import cn.reghao.autodop.common.machine.cpu.Cpu;
-import cn.reghao.autodop.common.machine.disk.Disk;
-import cn.reghao.autodop.common.machine.memory.Memory;
-import cn.reghao.autodop.common.machine.network.Network;
-import cn.reghao.autodop.common.machine.os.Os;
+import cn.reghao.autodop.common.machine.Cpu;
+import cn.reghao.autodop.common.machine.Memory;
+import cn.reghao.autodop.common.machine.Os;
 import cn.reghao.jdkutil.text.TextFile;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -23,7 +21,7 @@ public class BeansConfig {
 
     @Bean
     public Machine machine() {
-        return new Machine(os(), network(), cpu(), memory(), disk());
+        return new Machine(os(), cpu(), memory());
     }
 
     @Bean
@@ -31,11 +29,6 @@ public class BeansConfig {
         return new Os(textFile());
     }
 
-    @Bean
-    public Network network() {
-        return new Network(textFile());
-    }
-
     @Bean
     public Cpu cpu() {
         return new Cpu(textFile());
@@ -45,9 +38,4 @@ public class BeansConfig {
     public Memory memory() {
         return new Memory(textFile());
     }
-
-    @Bean
-    public Disk disk() {
-        return new Disk();
-    }
 }

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/log/MqttAppender.java

@@ -8,7 +8,7 @@ import cn.reghao.autodop.common.msg.MsgQueue;
 import cn.reghao.autodop.common.msg.pub.PubMsg;
 import cn.reghao.autodop.common.msg.pub.clazz.NodePubClazz;
 import cn.reghao.autodop.common.msg.pub.dto.node.NodeLogDTO;
-import cn.reghao.jdkutil.MachineId;
+import cn.reghao.jdkutil.machine.MachineId;
 import cn.reghao.jdkutil.serializer.JsonConverter;
 import org.eclipse.paho.client.mqttv3.MqttException;
 

+ 13 - 40
common/src/main/java/cn/reghao/autodop/common/machine/cpu/Cpu.java → common/src/main/java/cn/reghao/autodop/common/machine/Cpu.java

@@ -1,11 +1,10 @@
-package cn.reghao.autodop.common.machine.cpu;
+package cn.reghao.autodop.common.machine;
 
-import cn.reghao.autodop.common.machine.LinuxProc;
-import cn.reghao.autodop.common.machine.cpu.util.AbstractPercentageCalculator;
-import cn.reghao.autodop.common.machine.cpu.util.CpuPercentageCalculator;
 import cn.reghao.jdkutil.text.TextFile;
+import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 
+import java.io.Serializable;
 import java.util.*;
 
 /**
@@ -16,15 +15,13 @@ import java.util.*;
  */
 @Slf4j
 public class Cpu {
-    private final AbstractPercentageCalculator<CpuStats> calculator;
     private final TextFile textFile;
 
     public Cpu(TextFile textFile) {
-        this.calculator = new CpuPercentageCalculator();
         this.textFile = textFile;
     }
 
-    public CpuInfo info() {
+    public CpuDetail detail() {
         List<String> list = textFile.read(LinuxProc.CPU_INFO);
         if (list.isEmpty()) {
             log.error("CPU 信息获取失败");
@@ -51,7 +48,7 @@ public class Cpu {
         }
 
         Map<String, String> info = result.get(0);
-        CpuInfo cpuInfo = new CpuInfo();
+        CpuDetail cpuInfo = new CpuDetail();
         // TODO Raspbian 系统没有此字段
         String cpuCores = info.get("cpu cores");
         if (cpuCores != null) {
@@ -67,38 +64,14 @@ public class Cpu {
         return cpuInfo;
     }
 
-    /**
-     * top 命令 CPU 部分
-     *
-     * @param interval 采样时间,单位是 ms
-     * @return
-     * @date 2020-03-19 上午10:07
-     */
-    public CpuStat stat(long interval) throws InterruptedException {
-        CpuStats stat1 = stat();
-        Thread.sleep(interval);
-        CpuStats stat2 = stat();
+    @Data
+    public static class CpuDetail implements Serializable {
+        private static final long serialVersionUID = 1L;
 
-        return (CpuStat) calculator.format(stat1, stat2);
-    }
-
-    private CpuStats stat() {
-        String[] stat = textFile.readFile(LinuxProc.CPU_STAT).split(System.lineSeparator());
-        String whiteSpace = "\\s+";
-        String[] cpu = stat[0].split(whiteSpace);
-
-        CpuStats cpuStats = new CpuStats();
-        cpuStats.setUser(Long.parseLong(cpu[1]));
-        cpuStats.setNice(Long.parseLong(cpu[2]));
-        cpuStats.setSystem(Long.parseLong(cpu[3]));
-        cpuStats.setIdle(Long.parseLong(cpu[4]));
-        cpuStats.setIowait(Long.parseLong(cpu[5]));
-        cpuStats.setIrq(Long.parseLong(cpu[6]));
-        cpuStats.setSoftirq(Long.parseLong(cpu[7]));
-        cpuStats.setSteal(Long.parseLong(cpu[8]));
-        cpuStats.setGuest(Long.parseLong(cpu[9]));
-        cpuStats.setGuestnice(Long.parseLong(cpu[10]));
-
-        return cpuStats;
+        private int physicalCore;
+        private int logicalCore;
+        private String vendorId;
+        private String modelName;
+        private String bogoMips;
     }
 }

+ 0 - 11
common/src/main/java/cn/reghao/autodop/common/machine/LinuxProc.java

@@ -7,19 +7,8 @@ package cn.reghao.autodop.common.machine;
  * @date 2020-03-20 11:39:26
  */
 public class LinuxProc {
-    public static final String PROC = "/proc";
     public static final String LOAD_AVG = "/proc/loadavg";
     public static final String CPU_INFO = "/proc/cpuinfo";
     public static final String CPU_STAT = "/proc/stat";
     public static final String MEM_INFO = "/proc/meminfo";
-    public static final String DISK_STATS = "/proc/diskstats";
-    public static final String PARTITIONS = "/proc/partitions";
-    public static final String DEV = "/proc/net/dev";
-    public static final String TCP = "/proc/net/tcp";
-    // TODO 暂不处理 IPv6
-    public static final String TCP6 = "/proc/net/tcp6";
-    public static final String UDP = "/proc/net/udp";
-    public static final String UNIX = "/proc/net/unix";
-
-    public static final String OS_Release = "/usr/lib/os-release";
 }

+ 41 - 27
common/src/main/java/cn/reghao/autodop/common/machine/Machine.java

@@ -1,13 +1,13 @@
 package cn.reghao.autodop.common.machine;
 
-import cn.reghao.autodop.common.machine.cpu.Cpu;
-import cn.reghao.autodop.common.machine.disk.Disk;
-import cn.reghao.autodop.common.machine.memory.Memory;
-import cn.reghao.autodop.common.machine.network.Network;
-import cn.reghao.autodop.common.machine.os.Os;
-import cn.reghao.jdkutil.MachineId;
+import cn.reghao.jdkutil.machine.Disk;
+import cn.reghao.jdkutil.machine.MachineId;
+import cn.reghao.jdkutil.machine.Network;
+import cn.reghao.jdkutil.machine.OsDetail;
+import lombok.Data;
 
-import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.List;
 
 /**
  * @author reghao
@@ -15,37 +15,51 @@ import java.time.LocalDateTime;
  */
 public class Machine {
     private final Os os;
-    private final Network network;
     private final Cpu cpu;
     private final Memory memory;
-    private final Disk disk;
 
-    public Machine(Os os, Network network, Cpu cpu, Memory memory, Disk disk) {
+    public Machine(Os os, Cpu cpu, Memory memory) {
         this.os = os;
-        this.network = network;
         this.cpu = cpu;
         this.memory = memory;
-        this.disk = disk;
     }
 
-    public MachineInfo info() {
-        MachineInfo machineInfo = new MachineInfo();
-        machineInfo.setMachineId(MachineId.id());
-        machineInfo.setOsInfo(os.info());
-        machineInfo.setNetworkInfos(network.info());
-        machineInfo.setCpuInfo(cpu.info());
-        return machineInfo;
+    public MachineDetail detail() {
+        MachineDetail machineDetail = new MachineDetail();
+        machineDetail.setMachineId(MachineId.id());
+        machineDetail.setOsDetail(os.detail());
+        machineDetail.setNetworkDetails(Network.details());
+        machineDetail.setCpuDetail(cpu.detail());
+        machineDetail.setMemoryDetail(memory.detail());
+        machineDetail.setDiskDetails(Disk.details());
+        return machineDetail;
     }
 
     public MachineStat stat() {
         MachineStat machineStat = new MachineStat();
-        machineStat.setMachineId(MachineId.id());
-        machineStat.setTimestamp(System.currentTimeMillis());
-        machineStat.setOsStat(os.stat());
-        machineStat.setNetworkStat(network.stat());
-        machineStat.setCpuStat(null);
-        machineStat.setMemoryInfo(memory.info());
-        machineStat.setDiskInfos(disk.info());
-        return machineStat;
+        machineStat.setMemoryDetail(memory.detail());
+        machineStat.setDiskDetails(Disk.details());
+        return new MachineStat();
+    }
+
+    @Data
+    public static class MachineDetail implements Serializable {
+        private static final long serialVersionUID = 1L;
+
+        private String machineId;
+        private OsDetail osDetail;
+        private List<Network.NetworkDetail> networkDetails;
+        private Cpu.CpuDetail cpuDetail;
+        private Memory.MemoryDetail memoryDetail;
+        private List<Disk.DiskDetail> diskDetails;
+    }
+
+    @Data
+    public static class MachineStat implements Serializable {
+        private static final long serialVersionUID = 1L;
+
+        private String machineId;
+        private Memory.MemoryDetail memoryDetail;
+        private List<Disk.DiskDetail> diskDetails;
     }
 }

+ 0 - 23
common/src/main/java/cn/reghao/autodop/common/machine/MachineInfo.java

@@ -1,23 +0,0 @@
-package cn.reghao.autodop.common.machine;
-
-import cn.reghao.autodop.common.machine.cpu.CpuInfo;
-import cn.reghao.autodop.common.machine.network.NetworkInfo;
-import cn.reghao.autodop.common.machine.os.OsInfo;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2020-12-25 17:53:15
- */
-@Data
-public class MachineInfo implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private String machineId;
-    private OsInfo osInfo;
-    private List<NetworkInfo> networkInfos;
-    private CpuInfo cpuInfo;
-}

+ 0 - 29
common/src/main/java/cn/reghao/autodop/common/machine/MachineStat.java

@@ -1,29 +0,0 @@
-package cn.reghao.autodop.common.machine;
-
-import cn.reghao.autodop.common.machine.cpu.CpuStat;
-import cn.reghao.autodop.common.machine.disk.DiskInfo;
-import cn.reghao.autodop.common.machine.memory.MemoryInfo;
-import cn.reghao.autodop.common.machine.network.NetworkStat;
-import cn.reghao.autodop.common.machine.os.OsStat;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2020-12-25 17:53:15
- */
-@Data
-public class MachineStat implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private String machineId;
-    private long timestamp;
-    private OsStat osStat;
-    private NetworkStat networkStat;
-    private CpuStat cpuStat;
-    private MemoryInfo memoryInfo;
-    private List<DiskInfo> diskInfos;
-}

+ 21 - 4
common/src/main/java/cn/reghao/autodop/common/machine/memory/Memory.java → common/src/main/java/cn/reghao/autodop/common/machine/Memory.java

@@ -1,8 +1,9 @@
-package cn.reghao.autodop.common.machine.memory;
+package cn.reghao.autodop.common.machine;
 
-import cn.reghao.autodop.common.machine.LinuxProc;
 import cn.reghao.jdkutil.text.TextFile;
+import lombok.Data;
 
+import java.io.Serializable;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
@@ -19,7 +20,7 @@ public class Memory {
         this.textFile = textFile;
     }
 
-    public MemoryInfo info() {
+    public MemoryDetail detail() {
         Map<String, String> map = parseMemInfo();
         long total = Long.parseLong(map.get("MemTotal").split("kB")[0]);
         long free = Long.parseLong(map.get("MemFree").split("kB")[0]);
@@ -35,7 +36,7 @@ public class Memory {
         long swapUnused = Long.parseLong(map.get("SwapFree").split("kB")[0]);
         long swapUsed = swapTotal - swapUnused;
 
-        MemoryInfo memoryInfo = new MemoryInfo();
+        MemoryDetail memoryInfo = new MemoryDetail();
         memoryInfo.setTotal(total);
         memoryInfo.setUsed(used);
         memoryInfo.setFree(free);
@@ -58,4 +59,20 @@ public class Memory {
         }
         return map;
     }
+
+    @Data
+    public static class MemoryDetail implements Serializable {
+        private static final long serialVersionUID = 1L;
+
+        // KiB
+        private long total;
+        private long used;
+        private long free;
+        private long shared;
+        private long buffCache;
+        private long available;
+        private long swapTotal;
+        private long swapUsed;
+        private long swapFree;
+    }
 }

+ 38 - 0
common/src/main/java/cn/reghao/autodop/common/machine/Os.java

@@ -0,0 +1,38 @@
+package cn.reghao.autodop.common.machine;
+
+import cn.reghao.jdkutil.converter.DateTimeConverter;
+import cn.reghao.jdkutil.machine.OsDetail;
+import cn.reghao.jdkutil.text.TextFile;
+import lombok.extern.slf4j.Slf4j;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author reghao
+ * @date 2020-10-20 23:17:30
+ */
+@Slf4j
+public class Os {
+    private final TextFile textFile;
+
+    public Os(TextFile textFile) {
+        this.textFile = textFile;
+    }
+
+    public OsDetail detail() {
+        OsDetail osDetail = new OsDetail();
+        osDetail.setBootTime(bootTime());
+        return osDetail;
+    }
+
+    private LocalDateTime bootTime() {
+        String cpuStat = textFile.readFile(LinuxProc.CPU_STAT);
+        for (String line : cpuStat.split(System.lineSeparator())) {
+            if (line.startsWith("btime")) {
+                long btime = Long.parseLong(line.split("\\s+")[1]);
+                return DateTimeConverter.localDateTime(btime*1000);
+            }
+        }
+        return null;
+    }
+}

+ 0 - 20
common/src/main/java/cn/reghao/autodop/common/machine/cpu/CpuInfo.java

@@ -1,20 +0,0 @@
-package cn.reghao.autodop.common.machine.cpu;
-
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * @author reghao
- * @date 2020-10-20 09:51:52
- */
-@Data
-public class CpuInfo implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private int physicalCore;
-    private int logicalCore;
-    private String vendorId;
-    private String modelName;
-    private String bogoMips;
-}

+ 0 - 26
common/src/main/java/cn/reghao/autodop/common/machine/cpu/CpuStat.java

@@ -1,26 +0,0 @@
-package cn.reghao.autodop.common.machine.cpu;
-
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * CPU 使用率
- * top 命令中的 CPU 数据
- *
- * @author reghao
- * @date 2020-03-19 10:01:03
- */
-@Data
-public class CpuStat implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private String us;
-    private String sy;
-    private String ni;
-    private String id;
-    private String wa;
-    private String hi;
-    private String si;
-    private String st;
-}

+ 0 - 37
common/src/main/java/cn/reghao/autodop/common/machine/cpu/CpuStats.java

@@ -1,37 +0,0 @@
-package cn.reghao.autodop.common.machine.cpu;
-
-import lombok.Data;
-
-/**
- * CPU 状态
- * /proc/stat 中 cpu 行内容
- *
- * @author reghao
- * @date 2019-10-25 14:40:53
- */
-@Data
-public class CpuStats {
-    private long user;
-    private long nice;
-    private long system;
-    private long idle;
-    private long iowait;
-    private long irq;
-    private long softirq;
-    private long steal;
-    private long guest;
-    private long guestnice;
-
-    public long total() {
-        return user + nice + system + idle + iowait + irq + softirq + steal + guest + guestnice;
-    }
-
-    public long us() {
-        //return user + nice;
-        return user;
-    }
-
-    public long sy() {
-        return system + irq + softirq;
-    }
-}

+ 0 - 19
common/src/main/java/cn/reghao/autodop/common/machine/cpu/util/AbstractPercentageCalculator.java

@@ -1,19 +0,0 @@
-package cn.reghao.autodop.common.machine.cpu.util;
-
-import java.text.DecimalFormat;
-
-/**
- * 百分比计算器
- *
- * @author reghao
- * @date 2019-10-29 12:54:28
- */
-abstract public class AbstractPercentageCalculator<T> {
-    DecimalFormat df = new DecimalFormat("0.00");
-
-    protected String divide(long d1, long d2) {
-        return df.format(((double)d1 / (double)d2) * 100);
-    }
-
-    abstract public Object format(T t1, T t2);
-}

+ 0 - 46
common/src/main/java/cn/reghao/autodop/common/machine/cpu/util/CpuPercentageCalculator.java

@@ -1,46 +0,0 @@
-package cn.reghao.autodop.common.machine.cpu.util;
-
-import cn.reghao.autodop.common.machine.cpu.CpuStat;
-import cn.reghao.autodop.common.machine.cpu.CpuStats;
-
-/**
- * @author reghao
- * @date 2019-10-29 13:03:43
- */
-public class CpuPercentageCalculator extends AbstractPercentageCalculator<CpuStats> {
-    @Override
-    public CpuStat format(CpuStats stat1, CpuStats stat2) {
-        long total1 = stat1.total();
-        long us1 = stat1.us();
-        long sy1 = stat1.sy();
-        long ni1 = stat1.getNice();
-        long id1 = stat1.getIdle();
-        long wa1 = stat1.getIowait();
-        long hi1 = stat1.getIrq();
-        long si1 = stat1.getSoftirq();
-        long st1 = stat1.getSteal();
-
-        long total2 = stat2.total();
-        long us2 = stat2.us();
-        long sy2 = stat2.sy();
-        long ni2 = stat2.getNice();
-        long id2 = stat2.getIdle();
-        long wa2 = stat2.getIowait();
-        long hi2 = stat2.getIrq();
-        long si2 = stat2.getSoftirq();
-        long st2 = stat2.getSteal();
-
-        long total = total2 - total1;
-        CpuStat cpuStat = new CpuStat();
-        cpuStat.setUs(divide(us2-us1, total));
-        cpuStat.setSy(divide(sy2-sy1, total));
-        cpuStat.setNi(divide(ni2-ni1, total));
-        cpuStat.setId(divide(id2-id1, total));
-        cpuStat.setWa(divide(wa2-wa1, total));
-        cpuStat.setHi(divide(hi2-hi1, total));
-        cpuStat.setSi(divide(si2-si1, total));
-        cpuStat.setSt(divide(st2-st1, total));
-
-        return cpuStat;
-    }
-}

+ 0 - 91
common/src/main/java/cn/reghao/autodop/common/machine/disk/Disk.java

@@ -1,91 +0,0 @@
-package cn.reghao.autodop.common.machine.disk;
-
-import lombok.extern.slf4j.Slf4j;
-
-import java.io.IOException;
-import java.nio.file.FileSystems;
-import java.util.*;
-
-/**
- * 磁盘
- *
- * @author reghao
- * @date 2019-10-25 13:21:31
- */
-@Slf4j
-public class Disk {
-    /**
-     * @param
-     * @return
-     * @date 2019-10-29 上午9:38
-     */
-    public List<DiskInfo> info() {
-        List<DiskInfo> list = new ArrayList<>();
-        FileSystems.getDefault().getFileStores().forEach(fileStore -> {
-            try {
-                String fileSystem = fileStore.name();
-                if (fileSystem.startsWith("/dev")) {
-                    long size = fileStore.getTotalSpace();
-                    long avail = fileStore.getUsableSpace();
-                    long used = fileStore.getUnallocatedSpace();
-                    // TODO fileStore.toString() 的值是 "/ (/dev/sda3)"
-                    String mountedOn = fileStore.toString().split(" ")[0];
-                    String fsType = fileStore.type();
-
-                    DiskInfo diskInfo = new DiskInfo();
-                    diskInfo.setMountedOn(mountedOn);
-                    // TODO 尚未实现
-                    diskInfo.setDiskPath("/dev/sd*");
-                    diskInfo.setFsType(fsType);
-                    diskInfo.setSize(size);
-                    diskInfo.setUsed(used);
-                    diskInfo.setAvail(avail);
-                    diskInfo.setInodeTotal(0);
-                    diskInfo.setInodeFree(0);
-                    list.add(diskInfo);
-                }
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        });
-        return list;
-    }
-
-    /**
-     * 根据一个路径确定它所在的分区
-     *
-     * @param
-     * @return
-     * @date 2021-02-06 下午11:25
-     */
-    public DiskInfo diskInfo(String path) {
-        List<DiskInfo> diskInfos = info();
-        // 根据挂载路径的长度降序
-        diskInfos.sort((o1, o2) -> o2.getMountedOn().length() - o1.getMountedOn().length());
-
-        List<DiskInfo> candidates = new ArrayList<>();
-        for (DiskInfo diskInfo : diskInfos) {
-            String mountedOn = diskInfo.getMountedOn();
-            String[] array = path.split(mountedOn);
-            if (array.length == 0) {
-                return diskInfo;
-            } else if (array.length == 2) {
-                if (array[1].startsWith("/") || "/".equals(mountedOn)) {
-                    candidates.add(diskInfo);
-                }
-            } else if (array.length > 2) {
-                candidates.add(diskInfo);
-            }
-        }
-
-        if (!candidates.isEmpty()) {
-            // TODO 如果 candidates 大于 0 则判断准确的那个
-            return candidates.get(0);
-        } else {
-            return null;
-        }
-    }
-
-    public void stat() {
-    }
-}

+ 0 - 31
common/src/main/java/cn/reghao/autodop/common/machine/disk/DiskStat.java

@@ -1,31 +0,0 @@
-package cn.reghao.autodop.common.machine.disk;
-
-import lombok.Data;
-
-/**
- * 磁盘状态
- * /proc/diskstats 文件内容
- *
- * @author reghao
- * @date 2019-10-30 10:09:24
- */
-@Data
-public class DiskStat {
-    private int major;
-    private int minor;
-    private String device;
-    private long readsCompletedSuccessfully;
-    private long readsMerged;
-    private long sectorsRead;
-    private long timeSpentReading;
-    private long writesCompleted;
-    private long writesMerged;
-    private long sectorsWritten;
-    private long timeSpentWriting;
-    private long iosCurrentlyInProgress;
-    private long timeSpentDoingIos;
-    private long discardsCompletedSuccessfully;
-    private long discardsMerged;
-    private long sectorsDiscard;
-    private long timeSpentDiscarding;
-}

+ 0 - 27
common/src/main/java/cn/reghao/autodop/common/machine/memory/MemoryInfo.java

@@ -1,27 +0,0 @@
-package cn.reghao.autodop.common.machine.memory;
-
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * free -h 命令输出
- *
- * @author reghao
- * @date 2020-10-20 10:51:50
- */
-@Data
-public class MemoryInfo implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    // KiB
-    private long total;
-    private long used;
-    private long free;
-    private long shared;
-    private long buffCache;
-    private long available;
-    private long swapTotal;
-    private long swapUsed;
-    private long swapFree;
-}

+ 0 - 144
common/src/main/java/cn/reghao/autodop/common/machine/network/Network.java

@@ -1,144 +0,0 @@
-package cn.reghao.autodop.common.machine.network;
-
-import cn.reghao.autodop.common.machine.LinuxProc;
-import cn.reghao.autodop.common.machine.proc.ProcessStat;
-import cn.reghao.autodop.common.util.IpAddressConverter;
-import cn.reghao.jdkutil.text.TextFile;
-
-import java.net.*;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.List;
-
-/**
- * 网络
- *
- * @author reghao
- * @date 2019-10-23 21:17:04
- */
-public class Network {
-    private final TextFile textFile;
-    private final IpAddressConverter converter;
-
-    public Network(TextFile textFile) {
-        this.textFile = textFile;
-        this.converter = new IpAddressConverter();
-    }
-
-    public List<NetworkInfo> info() {
-        List<NetworkInfo> list = new ArrayList<>();
-        try {
-            Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
-            // 遍历主机的网络接口
-            while (interfaces.hasMoreElements()) {
-                NetworkInterface iface = interfaces.nextElement();
-                String name = iface.getName();
-                // 过滤掉 localhost 和虚拟网卡
-                if (name.startsWith("lo") || name.startsWith("docker") || name.startsWith("v")) {
-                    continue;
-                }
-
-                NetworkInfo networkInfo = new NetworkInfo();
-                networkInfo.setIface(name);
-                networkInfo.setMac(macAddr(iface.getHardwareAddress()));
-
-                Enumeration<InetAddress> inetAddrs = iface.getInetAddresses();
-                while (inetAddrs.hasMoreElements()) {
-                    InetAddress address = inetAddrs.nextElement();
-                    if (!address.isLoopbackAddress()) {
-                        if (address instanceof Inet4Address) {
-                            networkInfo.setIpv4(address.getHostAddress());
-                        } else if (address instanceof Inet6Address) {
-                            networkInfo.setIpv6(address.getHostAddress());
-                        }
-                    }
-                }
-                list.add(networkInfo);
-            }
-        } catch (SocketException e) {
-            e.printStackTrace();
-        }
-        return list;
-    }
-
-    /**
-     * 返回 52-54-00-bf-ab-2d 格式的 MAC 地址
-     *
-     * @param
-     * @return
-     * @date 2020-10-14 下午1:53
-     */
-    private String macAddr(byte[] addr) {
-        String[] hexadecimal = new String[addr.length];
-        for (int i = 0; i < addr.length; i++) {
-            hexadecimal[i] = String.format("%02x", addr[i]);
-        }
-        return String.join("-", hexadecimal);
-    }
-    
-    public NetworkStat stat() {
-        NetworkStat networkStat = new NetworkStat();
-        networkStat.setNetworkInfos(info());
-        networkStat.setTcpConnStats(tcpStat());
-        return networkStat;
-    }
-    
-    public List<TcpConnStat> tcpStat() {
-        String[] conns = textFile.readFile(LinuxProc.TCP).split(System.lineSeparator());
-        List<TcpConnStat> list = new ArrayList<>();
-        for (int i = 1; i < conns.length; i++) {
-            String[] fields = conns[i].split("\\s+");
-            TcpConnStat tcpConnStat = new TcpConnStat();
-            String localAddr = fields[2].split(":")[0];
-            String localPort = fields[2].split(":")[1];
-            tcpConnStat.setLocalAddr(converter.hex2dotDecimal(localAddr));
-            tcpConnStat.setLocalPort(Integer.valueOf(localPort, 16));
-
-            String remoteAddr = fields[3].split(":")[0];
-            String remotePort = fields[3].split(":")[1];
-            tcpConnStat.setRemoteAddr(converter.hex2dotDecimal(remoteAddr));
-            tcpConnStat.setRemotePort(Integer.valueOf(remotePort, 16));
-            tcpConnStat.setTcpState(tcpState(Integer.valueOf(fields[4], 16)));
-
-            String sendq = fields[5].split(":")[0];
-            String recvq = fields[5].split(":")[1];
-            tcpConnStat.setSendq(Long.valueOf(sendq, 16));
-            tcpConnStat.setRecvq(Long.valueOf(recvq, 16));
-
-            long inode = Long.parseLong(fields[10]);
-            tcpConnStat.setProcess(ProcessStat.socketInodes.get(inode));
-            list.add(tcpConnStat);
-
-        }
-        return list;
-    }
-
-    private String tcpState(int state) {
-        switch (state) {
-            case 1:
-                return TcpState.TCP_ESTABLISHED.name();
-            case 2:
-                return TcpState.TCP_SYN_SENT.name();
-            case 3:
-                return TcpState.TCP_SYN_RECV.name();
-            case 4:
-                return TcpState.TCP_FIN_WAIT1.name();
-            case 5:
-                return TcpState.TCP_FIN_WAIT2.name();
-            case 6:
-                return TcpState.TCP_TIME_WAIT.name();
-            case 7:
-                return TcpState.TCP_CLOSE.name();
-            case 8:
-                return TcpState.TCP_CLOSE_WAIT.name();
-            case 9:
-                return TcpState.TCP_LAST_ACK.name();
-            case 10:
-                return TcpState.TCP_LISTEN.name();
-            case 11:
-                return TcpState.TCP_CLOSING.name();
-            default:
-                return "";
-        }
-    }
-}

+ 0 - 18
common/src/main/java/cn/reghao/autodop/common/machine/network/NetworkStat.java

@@ -1,18 +0,0 @@
-package cn.reghao.autodop.common.machine.network;
-
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2021-06-15 18:06:31
- */
-@Data
-public class NetworkStat implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private List<NetworkInfo> networkInfos;
-    private List<TcpConnStat> tcpConnStats;
-}

+ 0 - 28
common/src/main/java/cn/reghao/autodop/common/machine/network/TcpConnStat.java

@@ -1,28 +0,0 @@
-package cn.reghao.autodop.common.machine.network;
-
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * TCP 连接状态
- * netstat -anp|grep '^tcp.*' 命令输出
- *
- * @author reghao
- * @date 2019-10-25 08:55:25
- */
-@Data
-public class TcpConnStat implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private String localAddr;
-    private int localPort;
-    private String remoteAddr;
-    private int remotePort;
-    private String tcpState;
-    // TODO 数据单位
-    private long sendq;
-    private long recvq;
-    private int pid;
-    private String process;
-}

+ 0 - 21
common/src/main/java/cn/reghao/autodop/common/machine/network/TcpState.java

@@ -1,21 +0,0 @@
-package cn.reghao.autodop.common.machine.network;
-
-/**
- * TCP 状态
- *
- * @author reghao
- * @date 2020-03-19 17:25:49
- */
-public enum TcpState {
-    TCP_ESTABLISHED,
-    TCP_SYN_SENT,
-    TCP_SYN_RECV,
-    TCP_FIN_WAIT1,
-    TCP_FIN_WAIT2,
-    TCP_TIME_WAIT,
-    TCP_CLOSE,
-    TCP_CLOSE_WAIT,
-    TCP_LAST_ACK,
-    TCP_LISTEN,
-    TCP_CLOSING
-}

+ 0 - 67
common/src/main/java/cn/reghao/autodop/common/machine/os/Os.java

@@ -1,67 +0,0 @@
-package cn.reghao.autodop.common.machine.os;
-
-import cn.reghao.autodop.common.machine.LinuxProc;
-import cn.reghao.jdkutil.converter.DateTimeConverter;
-import cn.reghao.jdkutil.text.TextFile;
-import lombok.extern.slf4j.Slf4j;
-
-import java.time.LocalDateTime;
-
-/**
- * @author reghao
- * @date 2020-10-20 23:17:30
- */
-@Slf4j
-public class Os {
-    private final TextFile textFile;
-
-    public Os(TextFile textFile) {
-        this.textFile = textFile;
-    }
-
-    public OsInfo info() {
-        OsInfo osInfo = new OsInfo();
-        osInfo.setName(System.getProperty("os.name"));
-        osInfo.setArch(System.getProperty("os.arch"));
-        osInfo.setVersion(System.getProperty("os.version"));
-        osInfo.setByteOrder(System.getProperty("sun.cpu.endian"));
-        osInfo.setBootTime(bootTime());
-        return osInfo;
-    }
-
-    private LocalDateTime bootTime() {
-        String cpuStat = textFile.readFile(LinuxProc.CPU_STAT);
-        for (String line : cpuStat.split(System.lineSeparator())) {
-            if (line.startsWith("btime")) {
-                long btime = Long.parseLong(line.split("\\s+")[1]);
-                return DateTimeConverter.localDateTime(btime*1000);
-            }
-        }
-        return null;
-    }
-
-    public OsStat stat() {
-        String loadAvg = textFile.readFile(LinuxProc.LOAD_AVG);
-        String[] strs = loadAvg.split("\\s+");
-        if (strs.length != 5) {
-            log.error("解析 " + LinuxProc.LOAD_AVG + " 文件错误");
-            return null;
-        }
-
-        OsStat osStat = new OsStat();
-        osStat.setLoadAvg1(Double.parseDouble(strs[0]));
-        osStat.setLoadAvg5(Double.parseDouble(strs[1]));
-        osStat.setLoadAvg15(Double.parseDouble(strs[2]));
-
-        String[] procs = strs[3].split("/");
-        if (procs.length != 2) {
-            log.error("解析 " + LinuxProc.LOAD_AVG + " 文件错误");
-            return null;
-        }
-
-        osStat.setCurrent(Integer.parseInt(procs[0]));
-        osStat.setTotal(Integer.parseInt(procs[1]));
-        osStat.setLastPid(Integer.parseInt(strs[4]));
-        return osStat;
-    }
-}

+ 0 - 22
common/src/main/java/cn/reghao/autodop/common/machine/os/OsInfo.java

@@ -1,22 +0,0 @@
-package cn.reghao.autodop.common.machine.os;
-
-import lombok.Data;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-/**
- * @author reghao
- * @date 2020-10-20 23:16:42
- */
-@Data
-public class OsInfo implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private String arch;
-    private String name;
-    // 系统版本或内核版本
-    private String version;
-    private String byteOrder;
-    private LocalDateTime bootTime;
-}

+ 0 - 24
common/src/main/java/cn/reghao/autodop/common/machine/os/OsStat.java

@@ -1,24 +0,0 @@
-package cn.reghao.autodop.common.machine.os;
-
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * @author reghao
- * @date 2020-10-20 23:16:42
- */
-@Data
-public class OsStat implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private double loadAvg1;
-    private double loadAvg5;
-    private double loadAvg15;
-    // 当前运行的进程数量
-    private int current;
-    // 系统中总的进程数量
-    private int total;
-    // 最近一次运行的进程 ID
-    private int lastPid;
-}

+ 0 - 103
common/src/main/java/cn/reghao/autodop/common/machine/proc/Process.java

@@ -1,103 +0,0 @@
-package cn.reghao.autodop.common.machine.proc;
-
-import cn.reghao.autodop.common.machine.LinuxProc;
-import cn.reghao.jdkutil.text.TextFile;
-import lombok.extern.slf4j.Slf4j;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.time.LocalDateTime;
-import java.util.*;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-
-/**
- * 进程
- *
- * @author reghao
- * @date 2019-10-25 09:49:09
- */
-@Slf4j
-public class Process {
-    private final Pattern pattern = Pattern.compile("[0-9]*");
-    private final TextFile textFile;
-
-    public Process(TextFile textFile) {
-        this.textFile = textFile;
-    }
-
-    /**
-     * top 命令进程部分
-     *
-     * @param
-     * @return
-     * @date 2020-03-19 下午9:22
-     */
-    public List<ProcessStat> topProcess() {
-        File procDir = new File(LinuxProc.PROC);
-        return Arrays.stream(Objects.requireNonNull(procDir.listFiles()))
-                .parallel()
-                .filter(file -> pattern.matcher(file.getName()).matches())
-                .map(File::getAbsolutePath)
-                .map(this::stat)
-                .collect(Collectors.toList());
-    }
-
-    private ProcessStat stat(String filepath) {
-        ProcessStat info = new ProcessStat();
-        try {
-            String[] stat = textFile.readFile(filepath + "/stat").split(" ");
-
-            info.setPid(Integer.parseInt(stat[0]));
-            info.setName(stat[1].replace("(", "").replace(")", ""));
-            info.setState(stat[2]);
-            info.setPpid(Integer.parseInt(stat[3]));
-            info.setUtime(Long.parseLong(stat[13]));
-            info.setStime(Long.parseLong(stat[14]));
-            info.setCutime(Long.parseLong(stat[15]));
-            info.setCstime(Long.parseLong(stat[16]));
-            info.setPriority(Integer.parseInt(stat[17]));
-            info.setNice(Integer.parseInt(stat[18]));
-            info.setNumThreads(Integer.parseInt(stat[19]));
-
-            /*long boottime = 1584244563000L;
-            long starttime = Long.parseLong(stat[21]);
-            info.setStartTime(DateTimeUtil.msTimestamp(boottime + starttime*100));*/
-
-            info.setVsize(stat[22]);
-            info.setRss(stat[23]);
-            info.setRsslim(stat[24]);
-            info.setDatetime(LocalDateTime.now().toString());
-
-            String pidName = info.getPid() + "/" + info.getName();
-            for (File file : Objects.requireNonNull(new File(filepath + "/fd").listFiles())) {
-                socketInode(file, pidName);
-            }
-            return info;
-        } catch (Exception ignore) {
-        }
-
-        return null;
-    }
-
-    private void socketInode(File file, String pidName) {
-        try {
-            Path path = Paths.get(file.getAbsolutePath());
-            if (!Files.isSymbolicLink(path)) {
-                return;
-            }
-
-            String filename = Files.readSymbolicLink(path).toString();
-            if (filename.startsWith("socket")) {
-                // socket:[27223]
-                long inode = Long.parseLong(filename.split(":")[1].replace("[", "")
-                        .replace("]", ""));
-                ProcessStat.socketInodes.put(inode, pidName);
-            }
-        } catch (IOException ignore) {
-        }
-    }
-}

+ 0 - 35
common/src/main/java/cn/reghao/autodop/common/machine/proc/ProcessStat.java

@@ -1,35 +0,0 @@
-package cn.reghao.autodop.common.machine.proc;
-
-import lombok.Data;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 进程状态
- * /proc/{pid}/stat 文件内容
- *
- * @author reghao
- * @date 2019-10-25 10:21:34
- */
-@Data
-public class ProcessStat {
-    public static Map<Long, String> socketInodes = new HashMap<>();
-
-    private int pid;
-    private String name;
-    private String state;
-    private int ppid;
-    private long utime;
-    private long stime;
-    private long cutime;
-    private long cstime;
-    private int priority;
-    private int nice;
-    private int numThreads;
-    private String startTime;
-    private String vsize;
-    private String rss;
-    private String rsslim;
-    private String datetime;
-}

+ 0 - 13
common/src/main/java/cn/reghao/autodop/common/machine/shell/MachineShell.java

@@ -1,13 +0,0 @@
-package cn.reghao.autodop.common.machine.shell;
-
-import lombok.Data;
-
-/**
- * @author reghao
- * @date 2020-12-25 17:55:46
- */
-@Data
-public class MachineShell {
-    private int exitStatus;
-    private String result;
-}

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/mqtt/DefaultMqttClient.java

@@ -2,7 +2,7 @@ package cn.reghao.autodop.common.mqtt;
 
 import cn.reghao.autodop.common.msg.Message;
 import cn.reghao.autodop.common.msg.rpc.RpcMsg;
-import cn.reghao.jdkutil.MachineId;
+import cn.reghao.jdkutil.machine.MachineId;
 import cn.reghao.jdkutil.serializer.JsonConverter;
 import lombok.extern.slf4j.Slf4j;
 import org.eclipse.paho.client.mqttv3.*;

+ 0 - 16
common/src/main/java/cn/reghao/autodop/common/msg/rpc/dto/machine/cpu/CpuInfo.java

@@ -1,16 +0,0 @@
-package cn.reghao.autodop.common.msg.rpc.dto.machine.cpu;
-
-import lombok.Data;
-
-/**
- * @author reghao
- * @date 2020-10-20 09:51:52
- */
-@Data
-public class CpuInfo {
-    private int physicalCore;
-    private int logicalCore;
-    private String vendorId;
-    private String modelName;
-    private String bogoMips;
-}

+ 0 - 22
common/src/main/java/cn/reghao/autodop/common/msg/rpc/dto/machine/cpu/CpuStat.java

@@ -1,22 +0,0 @@
-package cn.reghao.autodop.common.msg.rpc.dto.machine.cpu;
-
-import lombok.Data;
-
-/**
- * CPU 使用率
- * top 命令中的 CPU 数据
- *
- * @author reghao
- * @date 2020-03-19 10:01:03
- */
-@Data
-public class CpuStat {
-    private String us;
-    private String sy;
-    private String ni;
-    private String id;
-    private String wa;
-    private String hi;
-    private String si;
-    private String st;
-}

+ 0 - 37
common/src/main/java/cn/reghao/autodop/common/msg/rpc/dto/machine/cpu/CpuStats.java

@@ -1,37 +0,0 @@
-package cn.reghao.autodop.common.msg.rpc.dto.machine.cpu;
-
-import lombok.Data;
-
-/**
- * CPU 状态
- * /proc/stat 中 cpu 行内容
- *
- * @author reghao
- * @date 2019-10-25 14:40:53
- */
-@Data
-public class CpuStats {
-    private long user;
-    private long nice;
-    private long system;
-    private long idle;
-    private long iowait;
-    private long irq;
-    private long softirq;
-    private long steal;
-    private long guest;
-    private long guestnice;
-
-    public long total() {
-        return user + nice + system + idle + iowait + irq + softirq + steal + guest + guestnice;
-    }
-
-    public long us() {
-        //return user + nice;
-        return user;
-    }
-
-    public long sy() {
-        return system + irq + softirq;
-    }
-}

+ 0 - 22
common/src/main/java/cn/reghao/autodop/common/msg/rpc/dto/machine/disk/DiskInfo.java

@@ -1,22 +0,0 @@
-package cn.reghao.autodop.common.msg.rpc.dto.machine.disk;
-
-import lombok.Data;
-
-/**
- * df -h 命令输出
- *
- * @author reghao
- * @date 2020-10-20 10:51:59
- */
-@Data
-public class DiskInfo {
-    private String diskPath;
-    private String mountedOn;
-    private String fsType;
-    // bytes
-    private long size;
-    private long used;
-    private long avail;
-    private int inodeTotal;
-    private int inodeFree;
-}

+ 0 - 31
common/src/main/java/cn/reghao/autodop/common/msg/rpc/dto/machine/disk/DiskStat.java

@@ -1,31 +0,0 @@
-package cn.reghao.autodop.common.msg.rpc.dto.machine.disk;
-
-import lombok.Data;
-
-/**
- * 磁盘状态
- * /proc/diskstats 文件内容
- *
- * @author reghao
- * @date 2019-10-30 10:09:24
- */
-@Data
-public class DiskStat {
-    private int major;
-    private int minor;
-    private String device;
-    private long readsCompletedSuccessfully;
-    private long readsMerged;
-    private long sectorsRead;
-    private long timeSpentReading;
-    private long writesCompleted;
-    private long writesMerged;
-    private long sectorsWritten;
-    private long timeSpentWriting;
-    private long iosCurrentlyInProgress;
-    private long timeSpentDoingIos;
-    private long discardsCompletedSuccessfully;
-    private long discardsMerged;
-    private long sectorsDiscard;
-    private long timeSpentDiscarding;
-}

+ 0 - 23
common/src/main/java/cn/reghao/autodop/common/msg/rpc/dto/machine/mem/MemoryInfo.java

@@ -1,23 +0,0 @@
-package cn.reghao.autodop.common.msg.rpc.dto.machine.mem;
-
-import lombok.Data;
-
-/**
- * free -h 命令输出
- *
- * @author reghao
- * @date 2020-10-20 10:51:50
- */
-@Data
-public class MemoryInfo {
-    // KiB
-    private long total;
-    private long used;
-    private long free;
-    private long shared;
-    private long buffCache;
-    private long available;
-    private long swapTotal;
-    private long swapUsed;
-    private long swapFree;
-}

+ 1 - 1
dagent/src/main/java/cn/reghao/autodop/dagent/app/DockerAppServiceImpl.java

@@ -13,7 +13,7 @@ import cn.reghao.autodop.common.docker.pojo.HostConfig;
 import cn.reghao.autodop.common.docker.pojo.State;
 import cn.reghao.autodop.common.docker.pojo.result.ContainerInfo;
 import cn.reghao.autodop.common.util.ExceptionUtil;
-import cn.reghao.jdkutil.MachineId;
+import cn.reghao.jdkutil.machine.MachineId;
 import cn.reghao.jdkutil.converter.DateTimeConverter;
 import cn.reghao.jdkutil.serializer.JsonConverter;
 import cn.reghao.autodop.dagent.spring.DagentLifecycle;

+ 7 - 10
dagent/src/main/java/cn/reghao/autodop/dagent/machine/NodeClazzPubImpl.java

@@ -1,8 +1,6 @@
 package cn.reghao.autodop.dagent.machine;
 
 import cn.reghao.autodop.common.machine.Machine;
-import cn.reghao.autodop.common.machine.MachineInfo;
-import cn.reghao.autodop.common.machine.MachineStat;
 import cn.reghao.autodop.common.mqtt.DefaultMqttClient;
 import cn.reghao.autodop.common.msg.Message;
 import cn.reghao.autodop.common.msg.MsgQueue;
@@ -22,14 +20,12 @@ import java.util.concurrent.TimeUnit;
  */
 @Slf4j
 public class NodeClazzPubImpl {
-    private final String topic;
     private final ScheduledExecutorService scheduler;
     private final DefaultMqttClient mqttClient;
     private final Machine machine;
     private final String pubClazz;
     
     public NodeClazzPubImpl(DefaultMqttClient mqttClient, Machine machine) {
-        this.topic = MsgQueue.dmasterTopic();
         this.scheduler = ThreadPoolWrapper.scheduledThreadPool("heartbeat", 1);
         this.mqttClient = mqttClient;
         this.machine = machine;
@@ -37,16 +33,16 @@ public class NodeClazzPubImpl {
     }
     
     public void nodeStart() {
-        MachineInfo machineInfo = machine.info();
-        String jsonPayload = JsonConverter.objectToJson(machineInfo);
+        Machine.MachineDetail machineDetail = machine.detail();
+        String jsonPayload = JsonConverter.objectToJson(machineDetail);
         PubMsg pubMsg = PubMsg.pubMsg(pubClazz, NodePubClazz.start.name(), jsonPayload);
         pub(pubMsg);
     }
 
     public void nodeShutdown() {
         ThreadPoolWrapper.shutdownScheduler(scheduler);
-        MachineInfo machineInfo = machine.info();
-        String jsonPayload = JsonConverter.objectToJson(machineInfo);
+        Machine.MachineDetail machineDetail = machine.detail();
+        String jsonPayload = JsonConverter.objectToJson(machineDetail);
         PubMsg pubMsg = PubMsg.pubMsg(pubClazz, NodePubClazz.shutdown.name(), jsonPayload);
         pub(pubMsg);
     }
@@ -61,6 +57,7 @@ public class NodeClazzPubImpl {
     private void pub(PubMsg pubMsg) {
         Message message = Message.pubMessage(pubMsg);
         try {
+            String topic = MsgQueue.dmasterTopic();
             mqttClient.pub(topic, 1, JsonConverter.objectToJson(message));
         } catch (MqttException e) {
             log.error("{}", e.getMessage());
@@ -70,8 +67,8 @@ public class NodeClazzPubImpl {
     class Heartbeat implements Runnable {
         @Override
         public void run() {
-            MachineStat machineStat = machine.stat();
-            String jsonPayload = JsonConverter.objectToJson(machineStat);
+            Machine.MachineDetail machineDetail = machine.detail();
+            String jsonPayload = JsonConverter.objectToJson(machineDetail);
             PubMsg pubMsg = PubMsg.pubMsg(pubClazz, NodePubClazz.heartbeat.name(), jsonPayload);
             pub(pubMsg);
         }

+ 1 - 1
dagent/src/main/java/cn/reghao/autodop/dagent/rpc/impl/AppClazzRpcImpl.java

@@ -11,7 +11,7 @@ import cn.reghao.autodop.common.util.ExceptionUtil;
 import cn.reghao.autodop.dagent.app.AppService;
 import cn.reghao.autodop.dagent.app.DockerAppServiceImpl;
 import cn.reghao.autodop.dagent.app.ZipAppServiceImpl;
-import cn.reghao.jdkutil.MachineId;
+import cn.reghao.jdkutil.machine.MachineId;
 import cn.reghao.jdkutil.result.Result;
 import cn.reghao.jdkutil.result.ResultStatus;
 import cn.reghao.jdkutil.serializer.JsonConverter;

+ 0 - 2
dagent/src/main/java/cn/reghao/autodop/dagent/rpc/impl/MachineClazzRpcImpl.java

@@ -1,8 +1,6 @@
 package cn.reghao.autodop.dagent.rpc.impl;
 
 import cn.reghao.autodop.common.machine.Machine;
-import cn.reghao.autodop.common.machine.MachineStat;
-import cn.reghao.autodop.common.machine.shell.MachineShell;
 import cn.reghao.autodop.common.msg.rpc.RpcPayload;
 import cn.reghao.autodop.common.msg.rpc.RpcResult;
 import cn.reghao.autodop.common.msg.rpc.clazz.MachineRpcClazz;

+ 1 - 1
dagent/src/main/java/cn/reghao/autodop/dagent/spring/DagentLifecycle.java

@@ -10,7 +10,7 @@ import cn.reghao.autodop.common.msg.pub.dto.node.constant.AppId;
 import cn.reghao.autodop.dagent.machine.NodeClazzPubImpl;
 import cn.reghao.autodop.dagent.rpc.RpcListener;
 import cn.reghao.autodop.common.log.LoggerConfig;
-import cn.reghao.jdkutil.MachineId;
+import cn.reghao.jdkutil.machine.MachineId;
 import lombok.extern.slf4j.Slf4j;
 import org.eclipse.paho.client.mqttv3.MqttException;
 import org.springframework.beans.factory.DisposableBean;

+ 3 - 5
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/page/BuildDirPageController.java

@@ -1,11 +1,11 @@
 package cn.reghao.autodop.dmaster.app.controller.page;
 
-import cn.reghao.autodop.common.machine.disk.Disk;
 import cn.reghao.autodop.dmaster.app.db.query.config.BuildDirQuery;
 import cn.reghao.autodop.dmaster.app.model.po.config.build.BuildDir;
 import cn.reghao.autodop.dmaster.machine.model.vo.DiskUsage;
 import cn.reghao.autodop.dmaster.util.db.PageList;
 import cn.reghao.autodop.dmaster.util.db.PageSort;
+import cn.reghao.jdkutil.machine.Disk;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -30,11 +30,9 @@ import java.util.stream.Collectors;
 @RequestMapping("/app/config/build/dir")
 public class BuildDirPageController {
     private BuildDirQuery buildDirQuery;
-    private Disk disk;
 
-    public BuildDirPageController(BuildDirQuery buildDirQuery, Disk disk) {
+    public BuildDirPageController(BuildDirQuery buildDirQuery) {
         this.buildDirQuery = buildDirQuery;
-        this.disk = disk;
     }
 
     @ApiOperation(value = "构建目录页面")
@@ -51,7 +49,7 @@ public class BuildDirPageController {
 
     @GetMapping("/diskinfo")
     public String diskInfoPage(Model model) {
-        List<DiskUsage> diskUsages = disk.info().stream().map(DiskUsage::new).collect(Collectors.toList());
+        List<DiskUsage> diskUsages = Disk.details().stream().map(DiskUsage::new).collect(Collectors.toList());
         model.addAttribute("list", diskUsages);
         return "/app/config/builddir/diskinfo";
     }

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/page/CompilerPageController.java

@@ -6,7 +6,7 @@ import cn.reghao.autodop.dmaster.app.model.po.config.build.CompilerConfig;
 import cn.reghao.autodop.dmaster.app.model.vo.KeyValue;
 import cn.reghao.autodop.dmaster.util.db.PageList;
 import cn.reghao.autodop.dmaster.util.db.PageSort;
-import cn.reghao.jdkutil.MachineId;
+import cn.reghao.jdkutil.machine.MachineId;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/page/PackerPageController.java

@@ -6,7 +6,7 @@ import cn.reghao.autodop.dmaster.app.model.po.config.build.PackerConfig;
 import cn.reghao.autodop.dmaster.app.model.vo.KeyValue;
 import cn.reghao.autodop.dmaster.util.db.PageList;
 import cn.reghao.autodop.dmaster.util.db.PageSort;
-import cn.reghao.jdkutil.MachineId;
+import cn.reghao.jdkutil.machine.MachineId;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/bd/AppDeployer.java

@@ -7,7 +7,7 @@ import cn.reghao.autodop.common.msg.rpc.RpcPayload;
 import cn.reghao.autodop.common.msg.rpc.clazz.AppRpcClazz;
 import cn.reghao.autodop.common.msg.rpc.dto.app.DeployParam;
 import cn.reghao.autodop.common.mqtt.DefaultMqttClient;
-import cn.reghao.jdkutil.MachineId;
+import cn.reghao.jdkutil.machine.MachineId;
 import cn.reghao.jdkutil.serializer.JsonConverter;
 import cn.reghao.autodop.dmaster.app.db.query.config.AppConfigQuery;
 import cn.reghao.autodop.dmaster.app.model.po.config.DeployConfig;

+ 13 - 16
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/config/impl/BuildDirServiceImpl.java

@@ -1,7 +1,5 @@
 package cn.reghao.autodop.dmaster.app.service.config.impl;
 
-import cn.reghao.autodop.common.machine.disk.Disk;
-import cn.reghao.autodop.common.machine.disk.DiskInfo;
 import cn.reghao.autodop.common.util.ByteConverter;
 import cn.reghao.autodop.common.util.ByteType;
 import cn.reghao.autodop.common.util.FileOps;
@@ -10,7 +8,8 @@ import cn.reghao.autodop.dmaster.app.db.query.config.BuildDirQuery;
 import cn.reghao.autodop.dmaster.app.model.po.config.build.BuildDir;
 import cn.reghao.autodop.dmaster.app.model.po.config.build.LocalBuildDir;
 import cn.reghao.autodop.dmaster.app.service.config.BuildDirService;
-import cn.reghao.jdkutil.MachineId;
+import cn.reghao.jdkutil.machine.Disk;
+import cn.reghao.jdkutil.machine.MachineId;
 import cn.reghao.jdkutil.result.Result;
 import cn.reghao.jdkutil.result.ResultStatus;
 import lombok.extern.slf4j.Slf4j;
@@ -29,13 +28,11 @@ import java.util.Objects;
 public class BuildDirServiceImpl implements BuildDirService {
     private final BuildDirQuery buildDirQuery;
     private final BuildDirCrud buildDirCrud;
-    private final Disk disk;
     private final ByteConverter converter;
 
-    public BuildDirServiceImpl(BuildDirQuery buildDirQuery, BuildDirCrud buildDirCrud, Disk disk) {
+    public BuildDirServiceImpl(BuildDirQuery buildDirQuery, BuildDirCrud buildDirCrud) {
         this.buildDirQuery = buildDirQuery;
         this.buildDirCrud = buildDirCrud;
-        this.disk = disk;
         this.converter = new ByteConverter();
     }
 
@@ -58,15 +55,15 @@ public class BuildDirServiceImpl implements BuildDirService {
     }
 
     private BuildDir createLocalBuildDir(String localBuildDir) throws Exception {
-        DiskInfo diskInfo = disk.diskInfo(localBuildDir);
+        Disk.DiskDetail diskDetail = Disk.diskDetail(localBuildDir);
         BuildDir buildDir = new BuildDir();
         buildDir.setMachineId(MachineId.id());
         buildDir.setMachineIpv4(MachineId.ipv4());
         buildDir.setDirPath(localBuildDir);
-        buildDir.setMountedOn(diskInfo.getMountedOn());
-        buildDir.setTotal(converter.convert(ByteType.Bytes, diskInfo.getSize()));
-        buildDir.setUsed(converter.convertStr(ByteType.Bytes, ByteType.MiB, diskInfo.getUsed()));
-        buildDir.setAvail(converter.convertStr(ByteType.Bytes, ByteType.MiB, diskInfo.getAvail()));
+        buildDir.setMountedOn(diskDetail.getMountedOn());
+        buildDir.setTotal(converter.convert(ByteType.Bytes, diskDetail.getSize()));
+        buildDir.setUsed(converter.convertStr(ByteType.Bytes, ByteType.MiB, diskDetail.getUsed()));
+        buildDir.setAvail(converter.convertStr(ByteType.Bytes, ByteType.MiB, diskDetail.getAvail()));
         buildDir.setIsDelete(false);
 
         createLocalBuildDir(buildDir);
@@ -101,10 +98,10 @@ public class BuildDirServiceImpl implements BuildDirService {
     public void refresh(BuildDir buildDir) {
         setLocalBuildDir(buildDir);
         String dirPath = buildDir.getDirPath();
-        DiskInfo diskInfo = disk.diskInfo(dirPath);
-        if (diskInfo != null) {
-            buildDir.setUsed(converter.convertStr(ByteType.Bytes, ByteType.MiB, diskInfo.getUsed()));
-            buildDir.setAvail(converter.convertStr(ByteType.Bytes, ByteType.MiB, diskInfo.getAvail()));
+        Disk.DiskDetail diskDetail = Disk.diskDetail(dirPath);
+        if (diskDetail != null) {
+            buildDir.setUsed(converter.convertStr(ByteType.Bytes, ByteType.MiB, diskDetail.getUsed()));
+            buildDir.setAvail(converter.convertStr(ByteType.Bytes, ByteType.MiB, diskDetail.getAvail()));
         } else {
             log.error("本地目录 {} 不合法,autodop-dmaster 结束运行", dirPath);
             System.exit(1);
@@ -121,7 +118,7 @@ public class BuildDirServiceImpl implements BuildDirService {
         String oldDirPath = oldBuildDir.getDirPath();
         String oldMountedOn = oldBuildDir.getMountedOn();
         String newDirPath = buildDir.getDirPath();
-        String newMountedOn = disk.diskInfo(newDirPath).getMountedOn();
+        String newMountedOn = Disk.diskDetail(newDirPath).getMountedOn();
 
         if (newDirPath.equals(oldDirPath)) {
             return Result.result(ResultStatus.FAIL, "目录没有改变");

+ 10 - 10
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/controller/MachinePageController.java

@@ -190,56 +190,56 @@ public class MachinePageController {
     @ApiOperation(value = "系统负载页面")
     @GetMapping("/status/sys/{machineId}")
     public String hostStatusPage(@PathVariable("machineId") String machineId, Model model) {
-        MachineStat machineStat = statQuery.queryByMachineId(machineId, 1).get(0);
+        /*MachineStat machineStat = statQuery.queryByMachineId(machineId, 1).get(0);
         LocalDateTime statTime = DateTimeConverter.localDateTime(machineStat.getTimestamp());
 
         model.addAttribute("statTime", DateTimeConverter.format(statTime));
-        model.addAttribute("sysload", machineStat.getOsStat());
+        model.addAttribute("sysload", machineStat.getOsStat());*/
         return "/machine/stat/sysload";
     }
 
     @ApiOperation(value = "网络状态页面")
     @GetMapping("/status/network/{machineId}")
     public String networkStatusPage(@PathVariable("machineId") String machineId, Model model) {
-        MachineStat machineStat = statQuery.queryByMachineId(machineId, 1).get(0);
+        /*MachineStat machineStat = statQuery.queryByMachineId(machineId, 1).get(0);
         LocalDateTime statTime = DateTimeConverter.localDateTime(machineStat.getTimestamp());
 
         model.addAttribute("statTime", DateTimeConverter.format(statTime));
         model.addAttribute("tcpConnNum", machineStat.getTcpConnNum());
-        model.addAttribute("networkStat", machineStat.getNetworkStat());
+        model.addAttribute("networkStat", machineStat.getNetworkStat());*/
         return "/machine/stat/network";
     }
 
     @ApiOperation(value = "CPU 使用率页面")
     @GetMapping("/status/cpu/{machineId}")
     public String cpuUsagePage(@PathVariable("machineId") String machineId, Model model) {
-        MachineStat machineStat = statQuery.queryByMachineId(machineId, 1).get(0);
+        /*MachineStat machineStat = statQuery.queryByMachineId(machineId, 1).get(0);
         LocalDateTime statTime = DateTimeConverter.localDateTime(machineStat.getTimestamp());
 
         model.addAttribute("statTime", DateTimeConverter.format(statTime));
-        model.addAttribute("cpuUsage", machineStat.getCpuStat());
+        model.addAttribute("cpuUsage", machineStat.getCpuStat());*/
         return "/machine/stat/cpu";
     }
 
     @ApiOperation(value = "内存详情页面")
     @GetMapping("/status/mem/{machineId}")
     public String memUsagePage(@PathVariable("machineId") String machineId, Model model) {
-        MachineStat machineStat = statQuery.queryByMachineId(machineId, 1).get(0);
+        /*MachineStat machineStat = statQuery.queryByMachineId(machineId, 1).get(0);
         LocalDateTime statTime = DateTimeConverter.localDateTime(machineStat.getTimestamp());
 
         model.addAttribute("statTime", DateTimeConverter.format(statTime));
-        model.addAttribute("memoryUsage", machineStat.getMemoryUsage());
+        model.addAttribute("memoryUsage", machineStat.getMemoryUsage());*/
         return "/machine/stat/mem";
     }
 
     @ApiOperation(value = "磁盘详情页面")
     @GetMapping("/status/disk/{machineId}")
     public String diskUsagePage(@PathVariable("machineId") String machineId, Model model) {
-        MachineStat machineStat = statQuery.queryByMachineId(machineId, 1).get(0);
+        /*MachineStat machineStat = statQuery.queryByMachineId(machineId, 1).get(0);
         LocalDateTime statTime = DateTimeConverter.localDateTime(machineStat.getTimestamp());
 
         model.addAttribute("statTime", DateTimeConverter.format(statTime));
-        model.addAttribute("diskUsages", machineStat.getDiskUsages());
+        model.addAttribute("diskUsages", machineStat.getDiskUsages());*/
         return "/machine/stat/disk";
     }
 }

+ 2 - 4
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/db/query/MachineQuery.java

@@ -1,6 +1,5 @@
 package cn.reghao.autodop.dmaster.machine.db.query;
 
-import cn.reghao.autodop.common.machine.network.NetworkInfo;
 import cn.reghao.autodop.dmaster.machine.model.po.MachineHost;
 import cn.reghao.autodop.dmaster.machine.model.po.MachineInfo;
 import cn.reghao.autodop.dmaster.machine.db.repository.MachineHostRepository;
@@ -71,9 +70,8 @@ public class MachineQuery {
         return (root, query, cb) -> {
             Join<MachineHost, MachineInfo> innerJoin = root.join("machineInfo", JoinType.INNER);
             // MachineInfo 中的 NetworkInfo 集合
-            ListJoin<MachineInfo, NetworkInfo> listJoin = innerJoin.joinList("networkInfos");
-            Predicate predicate = cb.equal(listJoin.get("ipv4"), machineIpv4);
-            return cb.and(predicate);
+            //ListJoin<MachineInfo, NetworkInfo> listJoin = innerJoin.joinList("networkInfos");
+            return cb.and();
         };
     }
 }

+ 4 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/db/repository/MachineInfoRepository.java

@@ -3,13 +3,15 @@ package cn.reghao.autodop.dmaster.machine.db.repository;
 import cn.reghao.autodop.dmaster.machine.model.po.MachineInfo;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
-import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 
 /**
  * @author reghao
  * @date 2020-01-21 14:53:03
  */
-public interface MachineInfoRepository extends MongoRepository<MachineInfo, String> {
+public interface MachineInfoRepository
+        extends JpaRepository<MachineInfo, Integer>, JpaSpecificationExecutor<MachineInfo> {
     MachineInfo findByMachineId(String machineId);
     Page<MachineInfo> findByIsDeleteFalse(Pageable pageable);
 }

+ 4 - 5
common/src/main/java/cn/reghao/autodop/common/machine/disk/DiskInfo.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/model/po/DiskInfo.java

@@ -1,15 +1,15 @@
-package cn.reghao.autodop.common.machine.disk;
+package cn.reghao.autodop.dmaster.machine.model.po;
 
 import lombok.Data;
 
+import javax.persistence.Embeddable;
 import java.io.Serializable;
 
 /**
- * df -h 命令输出
- *
  * @author reghao
- * @date 2020-10-20 10:51:59
+ * @date 2021-10-15 15:50:32
  */
+@Embeddable
 @Data
 public class DiskInfo implements Serializable {
     private static final long serialVersionUID = 1L;
@@ -17,7 +17,6 @@ public class DiskInfo implements Serializable {
     private String diskPath;
     private String mountedOn;
     private String fsType;
-    // bytes
     private long size;
     private long used;
     private long avail;

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/model/po/MachineHost.java

@@ -1,6 +1,5 @@
 package cn.reghao.autodop.dmaster.machine.model.po;
 
-import cn.reghao.autodop.common.machine.network.NetworkInfo;
 import cn.reghao.autodop.common.msg.pub.dto.node.constant.AppStatus;
 import cn.reghao.autodop.dmaster.app.model.constant.EnvList;
 import cn.reghao.autodop.dmaster.util.db.BaseEntity;
@@ -34,6 +33,7 @@ public class MachineHost extends BaseEntity<Integer> {
     private String env;
     private String status;
     private LocalDateTime lastCheck;
+    @Embedded
     private SshAuth sshAuth;
     @ManyToMany(cascade = CascadeType.REFRESH)
     @JoinColumn(name = "notify_group_id", foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT))

+ 31 - 13
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/model/po/MachineInfo.java

@@ -1,13 +1,15 @@
 package cn.reghao.autodop.dmaster.machine.model.po;
 
-import cn.reghao.autodop.common.machine.cpu.CpuInfo;
-import cn.reghao.autodop.common.machine.network.NetworkInfo;
-import cn.reghao.autodop.common.machine.os.OsInfo;
-import cn.reghao.autodop.dmaster.util.db.BaseDocument;
+import cn.reghao.autodop.dmaster.util.db.BaseEntity;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.hibernate.annotations.LazyCollection;
+import org.hibernate.annotations.LazyCollectionOption;
+
+import javax.persistence.ElementCollection;
+import javax.persistence.Entity;
+import java.time.LocalDateTime;
 import java.util.List;
-import org.springframework.data.mongodb.core.mapping.Document;
 
 /**
  * @author reghao
@@ -15,14 +17,30 @@ import org.springframework.data.mongodb.core.mapping.Document;
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
-@Document("MachineInfo")
-public class MachineInfo extends BaseDocument {
+@Entity
+public class MachineInfo  extends BaseEntity<Integer> {
     private String machineId;
-    private OsInfo osInfo;
-    private List<NetworkInfo> networkInfos;
-    private CpuInfo cpuInfo;
+    private String machineIpv4;
+    private String arch;
+    private String name;
+    // 系统版本或内核版本
+    private String version;
+    private String byteOrder;
+    private LocalDateTime bootTime;
 
-    public String machineIpv4() {
-        return networkInfos.isEmpty() ? null : networkInfos.get(0).getIpv4();
-    }
+    private int physicalCore;
+    private int logicalCore;
+    private String vendorId;
+    private String modelName;
+    private String bogoMips;
+
+    private long memTotal;
+    private long memUsed;
+    private long memAvail;
+    @ElementCollection(targetClass = NetworkInfo.class)
+    @LazyCollection(LazyCollectionOption.FALSE)
+    private List<NetworkInfo> networkInfos;
+    @ElementCollection(targetClass = DiskInfo.class)
+    @LazyCollection(LazyCollectionOption.FALSE)
+    private List<DiskInfo> diskInfos;
 }

+ 0 - 58
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/model/po/MachineStat.java

@@ -1,25 +1,11 @@
 package cn.reghao.autodop.dmaster.machine.model.po;
 
-import cn.reghao.autodop.common.machine.cpu.CpuStat;
-import cn.reghao.autodop.common.machine.disk.DiskInfo;
-import cn.reghao.autodop.common.machine.memory.MemoryInfo;
-import cn.reghao.autodop.common.machine.network.NetworkStat;
-import cn.reghao.autodop.common.machine.network.TcpConnStat;
-import cn.reghao.autodop.common.machine.network.TcpState;
-import cn.reghao.autodop.common.machine.os.OsStat;
-import cn.reghao.autodop.common.util.ByteConverter;
-import cn.reghao.autodop.common.util.ByteType;
 import cn.reghao.autodop.dmaster.util.db.BaseDocument;
-import cn.reghao.autodop.dmaster.machine.model.vo.DiskUsage;
-import cn.reghao.autodop.dmaster.machine.model.vo.MemoryUsage;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.data.mongodb.core.mapping.Document;
 
-import java.util.List;
-import java.util.stream.Collectors;
-
 /**
  * @author reghao
  * @date 2020-12-25 17:53:15
@@ -30,48 +16,4 @@ import java.util.stream.Collectors;
 @Document("MachineStat")
 public class MachineStat extends BaseDocument {
     private String machineId;
-    private long timestamp;
-    private OsStat osStat;
-    private NetworkStat networkStat;
-    private CpuStat cpuStat;
-    private MemoryInfo memoryInfo;
-    private List<DiskInfo> diskInfos;
-
-    public MemoryUsage getMemoryUsage() {
-        long total = memoryInfo.getTotal();
-        long used = memoryInfo.getUsed();
-        long avail = memoryInfo.getAvailable();
-        long totalSwap = memoryInfo.getSwapTotal();
-        long usedSwap = memoryInfo.getSwapUsed();
-        long availSwap = memoryInfo.getSwapFree();
-
-        ByteConverter converter = new ByteConverter();
-        String totalSize = converter.convertStr(ByteType.KiB, ByteType.MiB, total);
-        String usedSize = converter.convertStr(ByteType.KiB, ByteType.MiB, used);
-        String availSize = converter.convertStr(ByteType.KiB, ByteType.MiB, avail);
-        String swapTotalSize = converter.convertStr(ByteType.KiB, ByteType.MiB, totalSwap);
-        String swapUsedSize = converter.convertStr(ByteType.KiB, ByteType.MiB, usedSwap);
-        String swapAvailSize = converter.convertStr(ByteType.KiB, ByteType.MiB, availSwap);
-
-        MemoryUsage memoryUsage = new MemoryUsage();
-        memoryUsage.setTotal(totalSize);
-        memoryUsage.setUsed(usedSize);
-        memoryUsage.setAvail(availSize);
-        memoryUsage.setSwapTotal(swapTotalSize);
-        memoryUsage.setSwapUsed(swapUsedSize);
-        memoryUsage.setSwapAvail(swapAvailSize);
-
-        return memoryUsage;
-    }
-
-    public List<DiskUsage> getDiskUsages() {
-        return diskInfos.stream().map(DiskUsage::new).collect(Collectors.toList());
-    }
-
-    public Integer getTcpConnNum() {
-        List<TcpConnStat> list = networkStat.getTcpConnStats().stream()
-                .filter(tcpConnStat -> tcpConnStat.getTcpState().equals(TcpState.TCP_ESTABLISHED.name()))
-                .collect(Collectors.toList());
-        return list.size();
-    }
 }

+ 4 - 3
common/src/main/java/cn/reghao/autodop/common/machine/network/NetworkInfo.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/model/po/NetworkInfo.java

@@ -1,19 +1,20 @@
-package cn.reghao.autodop.common.machine.network;
+package cn.reghao.autodop.dmaster.machine.model.po;
 
 import lombok.Data;
 
+import javax.persistence.Embeddable;
 import java.io.Serializable;
 
 /**
  * @author reghao
- * @date 2020-10-20 10:53:12
+ * @date 2021-10-15 15:49:43
  */
+@Embeddable
 @Data
 public class NetworkInfo implements Serializable {
     private static final long serialVersionUID = 1L;
 
     private String iface;
-    // 格式 e8-2a-ea-7c-4a-a2
     private String mac;
     private String ipv4;
     private String ipv6;

+ 9 - 9
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/model/vo/DiskUsage.java

@@ -1,8 +1,8 @@
 package cn.reghao.autodop.dmaster.machine.model.vo;
 
-import cn.reghao.autodop.common.machine.disk.DiskInfo;
 import cn.reghao.autodop.common.util.ByteConverter;
 import cn.reghao.autodop.common.util.ByteType;
+import cn.reghao.jdkutil.machine.Disk;
 import lombok.Data;
 
 /**
@@ -19,15 +19,15 @@ public class DiskUsage {
     private int inodeTotal;
     private int inodeFree;
 
-    public DiskUsage(DiskInfo diskInfo) {
-        this.mountedOn = diskInfo.getMountedOn();
-        this.fsType = diskInfo.getFsType();
-        this.inodeTotal = diskInfo.getInodeTotal();
-        this.inodeFree = diskInfo.getInodeFree();
+    public DiskUsage(Disk.DiskDetail diskDetail) {
+        this.mountedOn = diskDetail.getMountedOn();
+        this.fsType = diskDetail.getFsType();
+        this.inodeTotal = diskDetail.getInodeTotal();
+        this.inodeFree = diskDetail.getInodeFree();
 
         ByteConverter converter = new ByteConverter();
-        this.total = converter.convert(ByteType.Bytes, diskInfo.getSize());
-        this.used = converter.convertStr(ByteType.Bytes, ByteType.MiB, diskInfo.getUsed());
-        this.avail = converter.convertStr(ByteType.Bytes, ByteType.MiB, diskInfo.getAvail());
+        this.total = converter.convert(ByteType.Bytes, diskDetail.getSize());
+        this.used = converter.convertStr(ByteType.Bytes, ByteType.MiB, diskDetail.getUsed());
+        this.avail = converter.convertStr(ByteType.Bytes, ByteType.MiB, diskDetail.getAvail());
     }
 }

+ 2 - 6
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/model/vo/MachineHostVO.java

@@ -1,13 +1,9 @@
 package cn.reghao.autodop.dmaster.machine.model.vo;
 
-import cn.reghao.autodop.common.machine.network.NetworkInfo;
 import cn.reghao.autodop.dmaster.machine.model.po.MachineHost;
 import cn.reghao.autodop.dmaster.machine.model.po.MachineInfo;
-import cn.reghao.jdkutil.converter.DateTimeConverter;
 import lombok.Data;
 
-import java.util.List;
-
 /**
  * @author reghao
  * @date 2020-10-19 15:02:59
@@ -24,7 +20,7 @@ public class MachineHostVO {
     private String lastCheck;
 
     public MachineHostVO(MachineInfo machineInfo, MachineHost machineHost) {
-        this.machineId = machineInfo.getMachineId();
+        /*this.machineId = machineInfo.getMachineId();
         List<NetworkInfo> list = machineInfo.getNetworkInfos();
         if (!list.isEmpty()) {
             this.machineIpv4 = list.get(0).getIpv4();
@@ -34,6 +30,6 @@ public class MachineHostVO {
         this.osName = machineInfo.getOsInfo().getName();
         this.osVersion = machineInfo.getOsInfo().getVersion();
         this.status = machineHost.getStatus();
-        this.lastCheck = DateTimeConverter.format(machineHost.getLastCheck());
+        this.lastCheck = DateTimeConverter.format(machineHost.getLastCheck());*/
     }
 }

+ 6 - 12
dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/service/job/MachineStatCheckJob.java

@@ -1,21 +1,13 @@
 package cn.reghao.autodop.dmaster.monitor.service.job;
 
-import cn.reghao.autodop.common.machine.disk.DiskInfo;
-import cn.reghao.autodop.common.machine.memory.MemoryInfo;
-import cn.reghao.autodop.common.util.ByteConverter;
-import cn.reghao.autodop.common.util.ByteType;
-import cn.reghao.autodop.common.util.PercentCalculator;
 import cn.reghao.autodop.dmaster.machine.db.crud.MachineStatCrud;
 import cn.reghao.autodop.dmaster.machine.db.query.MachineQuery;
 import cn.reghao.autodop.dmaster.machine.db.query.MachineStatQuery;
 import cn.reghao.autodop.dmaster.machine.model.po.MachineHost;
 import cn.reghao.autodop.dmaster.machine.model.po.MachineStat;
 import cn.reghao.autodop.dmaster.monitor.db.MonitorJobCrudService;
-import cn.reghao.autodop.dmaster.monitor.model.po.MonitorJob;
 import cn.reghao.autodop.dmaster.notification.model.po.NotifyGroup;
 import cn.reghao.autodop.dmaster.notification.service.NotifyService;
-import cn.reghao.autodop.dmaster.notification.service.notifier.ding.DingMsg;
-import cn.reghao.jdkutil.converter.DateTimeConverter;
 import lombok.extern.slf4j.Slf4j;
 import org.quartz.Job;
 import org.quartz.JobDataMap;
@@ -66,7 +58,7 @@ public class MachineStatCheckJob implements Job {
     }
 
     private String memoryUsageAlert(MachineStat machineStat) {
-        String machineId = machineStat.getMachineId();
+        /*String machineId = machineStat.getMachineId();
         MemoryInfo memoryInfo = machineStat.getMemoryInfo();
         long total = memoryInfo.getTotal();
         long avail = memoryInfo.getAvailable();
@@ -81,11 +73,12 @@ public class MachineStatCheckJob implements Job {
             return String.format("%s 上可用的内存仅占内存的 %s, 共计 %s", machineId, percent, availSize);
         } else {
             return null;
-        }
+        }*/
+        return null;
     }
 
     private String diskUsageAlert(MachineStat machineStat) {
-        String machineId = machineStat.getMachineId();
+        /*String machineId = machineStat.getMachineId();
         List<DiskInfo> diskInfos = machineStat.getDiskInfos();
         long total = 0, avail = 0;
         for (DiskInfo diskInfo : diskInfos) {
@@ -102,6 +95,7 @@ public class MachineStatCheckJob implements Job {
             return String.format("%s 上可用的磁盘空间仅占总磁盘空间的 %s, 共计 %s", machineId, percent, availSize);
         } else {
             return null;
-        }
+        }*/
+        return null;
     }
 }

+ 4 - 50
dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/impl/NodeClazzPubResult.java

@@ -1,20 +1,17 @@
 package cn.reghao.autodop.dmaster.mqttsub.impl;
 
+import cn.reghao.autodop.common.machine.Machine;
 import cn.reghao.autodop.common.msg.pub.clazz.NodePubClazz;
 import cn.reghao.autodop.common.msg.pub.dto.node.NodeLogDTO;
-import cn.reghao.autodop.common.msg.pub.dto.node.constant.AppStatus;
 import cn.reghao.autodop.dmaster.machine.db.crud.*;
 import cn.reghao.autodop.dmaster.machine.db.query.MachineHostQuery;
 import cn.reghao.autodop.dmaster.machine.db.query.MachineInfoQuery;
-import cn.reghao.autodop.dmaster.machine.model.po.*;
 import cn.reghao.autodop.dmaster.sys.db.crud.NodeLogCrud;
 import cn.reghao.autodop.dmaster.sys.model.po.NodeLog;
 import cn.reghao.jdkutil.serializer.JsonConverter;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
-import java.time.LocalDateTime;
-
 /**
  * @author reghao
  * @date 2020-12-30 10:26:47
@@ -26,16 +23,14 @@ public class NodeClazzPubResult {
     private final MachineHostCrud hostCrud;
     private final MachineInfoQuery infoQuery;
     private final MachineInfoCrud infoCrud;
-    private final MachineStatCrud statCrud;
     private final NodeLogCrud nodeLogCrud;
 
     public NodeClazzPubResult(MachineHostQuery hostQuery, MachineHostCrud hostCrud,
                               MachineInfoQuery infoQuery, MachineInfoCrud infoCrud,
-                              MachineStatCrud statCrud, NodeLogCrud nodeLogCrud) {
+                              NodeLogCrud nodeLogCrud) {
         this.hostQuery = hostQuery;
         this.infoCrud = infoCrud;
         this.infoQuery = infoQuery;
-        this.statCrud = statCrud;
         this.hostCrud = hostCrud;
         this.nodeLogCrud = nodeLogCrud;
     }
@@ -60,56 +55,15 @@ public class NodeClazzPubResult {
     }
 
     private void start(String payload) {
-        MachineInfo machineInfo = JsonConverter.jsonToObject(payload, MachineInfo.class);
-        String machineId = machineInfo.getMachineId();
-        MachineInfo machineInfo1 = infoQuery.findByMachineId(machineId);
-        if (machineInfo1 == null) {
-            infoCrud.save(machineInfo);
-        } else {
-            infoCrud.update(machineInfo1);
-        }
-
-        MachineHost machineHost = hostQuery.findByMachineId(machineId);
-        if (machineHost == null) {
-            machineHost = new MachineHost(machineInfo);
-            hostCrud.save(machineHost);
-        } else {
-            machineHost.setStatus(AppStatus.Online.name());
-            machineHost.setLastCheck(LocalDateTime.now());
-            hostCrud.save(machineHost);
-        }
+        Machine.MachineDetail machineDetail = JsonConverter.jsonToObject(payload, Machine.MachineDetail.class);
+        System.out.println();
     }
 
     private void shutdown(String payload) {
-        MachineInfo machineInfo = JsonConverter.jsonToObject(payload, MachineInfo.class);
-        String machineId = machineInfo.getMachineId();
-        MachineInfo machineInfo1 = infoQuery.findByMachineId(machineId);
-        if (machineInfo1 == null) {
-            infoCrud.save(machineInfo);
-        } else {
-            infoCrud.update(machineInfo1);
-        }
-
-        MachineHost machineHost = hostQuery.findByMachineId(machineId);
-        if (machineHost != null) {
-            machineHost.setStatus(AppStatus.Offline.name());
-            machineHost.setLastCheck(LocalDateTime.now());
-            hostCrud.save(machineHost);
-        }
     }
 
     // TODO 异步处理 MachineStat 中的信息,检查系统负载,CPU,内存,磁盘等使用情况
     private void heartbeat(String payload) {
-        MachineStat machineStat = JsonConverter.jsonToObject(payload, MachineStat.class);
-        statCrud.save(machineStat);
-
-        String machineId = machineStat.getMachineId();
-        MachineHost machineHost = hostQuery.findByMachineId(machineId);
-        if (machineHost != null) {
-            machineHost.setStatus(AppStatus.Online.name());
-            machineHost.setLastCheck(LocalDateTime.now());
-            hostCrud.save(machineHost);
-        }
     }
 
     private void log(String payload) {

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/spring/DmasterLifecycle.java

@@ -10,7 +10,7 @@ import cn.reghao.autodop.dmaster.app.service.config.BuildDirService;
 import cn.reghao.autodop.dmaster.mqttsub.MessageListener;
 import cn.reghao.autodop.dmaster.sys.db.crud.NodeLogCrud;
 import cn.reghao.autodop.dmaster.util.log.Appenders;
-import cn.reghao.jdkutil.MachineId;
+import cn.reghao.jdkutil.machine.MachineId;
 import lombok.extern.slf4j.Slf4j;
 import org.eclipse.paho.client.mqttv3.MqttException;
 import org.springframework.beans.factory.DisposableBean;

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/util/log/MongoAppender.java

@@ -5,7 +5,7 @@ import ch.qos.logback.core.UnsynchronizedAppenderBase;
 import cn.reghao.autodop.common.msg.pub.dto.node.constant.AppId;
 import cn.reghao.autodop.dmaster.sys.db.crud.NodeLogCrud;
 import cn.reghao.autodop.dmaster.sys.model.po.NodeLog;
-import cn.reghao.jdkutil.MachineId;
+import cn.reghao.jdkutil.machine.MachineId;
 
 /**
  * @author reghao