reghao 5 лет назад
Родитель
Сommit
5d93ee9a0f
46 измененных файлов с 718 добавлено и 270 удалено
  1. 1 0
      common/src/main/java/cn/reghao/autodop/common/dockerc/DockerClient.java
  2. 0 63
      common/src/main/java/cn/reghao/autodop/common/machine/Cpu.java
  3. 0 42
      common/src/main/java/cn/reghao/autodop/common/machine/Disk.java
  4. 0 67
      common/src/main/java/cn/reghao/autodop/common/machine/Memory.java
  5. 1 1
      common/src/main/java/cn/reghao/autodop/common/mq/MsgType.java
  6. 100 0
      common/src/main/java/cn/reghao/autodop/common/sysstat/Cpu.java
  7. 67 0
      common/src/main/java/cn/reghao/autodop/common/sysstat/Disk.java
  8. 113 0
      common/src/main/java/cn/reghao/autodop/common/sysstat/Memory.java
  9. 65 13
      common/src/main/java/cn/reghao/autodop/common/sysstat/Network.java
  10. 4 5
      common/src/main/java/cn/reghao/autodop/common/sysstat/Process.java
  11. 4 1
      common/src/main/java/cn/reghao/autodop/common/sysstat/contant/ProcFile.java
  12. 1 1
      common/src/main/java/cn/reghao/autodop/common/sysstat/contant/ProcessState.java
  13. 1 1
      common/src/main/java/cn/reghao/autodop/common/sysstat/contant/TcpState.java
  14. 1 2
      common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/ProcessStat.java
  15. 4 4
      common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/SysStat.java
  16. 15 0
      common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/cpu/CpuInfo.java
  17. 1 1
      common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/cpu/CpuStat.java
  18. 1 1
      common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/cpu/CpuUsage.java
  19. 19 0
      common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/disk/DiskInfo.java
  20. 1 1
      common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/disk/DiskStat.java
  21. 1 1
      common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/disk/DiskUsage.java
  22. 1 1
      common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/memory/MemStat.java
  23. 1 1
      common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/memory/MemUsage.java
  24. 22 0
      common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/memory/MemoryInfo.java
  25. 1 1
      common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/network/NetCardStat.java
  26. 2 2
      common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/network/NetConnStat.java
  27. 15 0
      common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/network/NetworkInfo.java
  28. 1 1
      common/src/main/java/cn/reghao/autodop/common/sysstat/utils/AbstractPercentageCalculator.java
  29. 11 8
      common/src/main/java/cn/reghao/autodop/common/sysstat/utils/ByteConvert.java
  30. 1 1
      common/src/main/java/cn/reghao/autodop/common/sysstat/utils/ByteType.java
  31. 3 3
      common/src/main/java/cn/reghao/autodop/common/sysstat/utils/CpuPercentageCalculator.java
  32. 1 1
      common/src/main/java/cn/reghao/autodop/common/sysstat/utils/IpAddressConversion.java
  33. 3 3
      common/src/main/java/cn/reghao/autodop/common/sysstat/utils/MemCalculator.java
  34. 2 2
      common/src/main/java/cn/reghao/autodop/common/utils/text/TextFile.java
  35. 1 1
      dagent/src/main/java/cn/reghao/autodop/dagent/DagentApplication.java
  36. 58 0
      dagent/src/main/java/cn/reghao/autodop/dagent/node/agent/AgentInfo.java
  37. 36 0
      dagent/src/main/java/cn/reghao/autodop/dagent/node/agent/AgentNotifier.java
  38. 19 0
      dagent/src/main/java/cn/reghao/autodop/dagent/node/agent/AgentStatus.java
  39. 77 0
      dagent/src/main/java/cn/reghao/autodop/dagent/node/agent/DagentNotifier.java
  40. 21 0
      dagent/src/main/java/cn/reghao/autodop/dagent/node/agent/HardwareInfo.java
  41. 9 11
      dagent/src/main/java/cn/reghao/autodop/dagent/service/MachineStatusScheduler.java
  42. 5 24
      dagent/src/main/java/cn/reghao/autodop/dagent/utils/AfterAppStart.java
  43. 4 0
      dagent/src/main/java/cn/reghao/autodop/dagent/utils/JavaAppStatus.java
  44. 12 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/common/mq/MessageDispatcher.java
  45. 9 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/node/agent/AgentStatus.java
  46. 3 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/node/controller/NodeController.java

+ 1 - 0
common/src/main/java/cn/reghao/autodop/common/dockerc/DockerClient.java

@@ -58,6 +58,7 @@ public class DockerClient implements ImageOps, ContainerOps, AutoCloseable {
             String[] lines = result.split(System.lineSeparator());
             for (String line : lines) {
                 if (line.contains("error")) {
+                    log.error("docker 请求错误 -> {}", line);
                     throw new DockerException(line);
                 }
             }

+ 0 - 63
common/src/main/java/cn/reghao/autodop/common/machine/Cpu.java

@@ -1,63 +0,0 @@
-package cn.reghao.autodop.common.machine;
-
-import cn.reghao.autodop.common.machine.contant.ProcFile;
-import cn.reghao.autodop.common.machine.pojo.cpu.CpuStat;
-import cn.reghao.autodop.common.machine.pojo.cpu.CpuUsage;
-import cn.reghao.autodop.common.machine.utils.AbstractPercentageCalculator;
-import cn.reghao.autodop.common.machine.utils.CpuPercentageCalculator;
-import cn.reghao.autodop.common.utils.text.TextFile;
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * CPU 信息
- *
- * @author reghao
- * @date 2019-10-25 13:12:36
- */
-@Slf4j
-public class Cpu {
-    private AbstractPercentageCalculator<CpuStat> calculator = new CpuPercentageCalculator();;
-    private TextFile textFile = new TextFile();
-
-    /**
-     * top 命令 CPU 部分
-     *
-     * @param interval 采样时间,单位是 ms
-     * @return
-     * @date 2020-03-19 上午10:07
-     */
-    public CpuUsage topCpu(long interval) throws InterruptedException {
-        CpuStat stat1 = stat();
-        Thread.sleep(interval);
-        CpuStat stat2 = stat();
-
-        return (CpuUsage) calculator.format(stat1, stat2);
-    }
-
-    private CpuStat stat() {
-        String[] stat = textFile.readFile(ProcFile.CPU_STAT).split(System.lineSeparator());
-        String whiteSpace = "\\s+";
-        String[] cpu = stat[0].split(whiteSpace);
-
-        CpuStat cpuStat = new CpuStat();
-        cpuStat.setUser(Long.parseLong(cpu[1]));
-        cpuStat.setNice(Long.parseLong(cpu[2]));
-        cpuStat.setSystem(Long.parseLong(cpu[3]));
-        cpuStat.setIdle(Long.parseLong(cpu[4]));
-        cpuStat.setIowait(Long.parseLong(cpu[5]));
-        cpuStat.setIrq(Long.parseLong(cpu[6]));
-        cpuStat.setSoftirq(Long.parseLong(cpu[7]));
-        cpuStat.setSteal(Long.parseLong(cpu[8]));
-        cpuStat.setGuest(Long.parseLong(cpu[9]));
-        cpuStat.setGuestnice(Long.parseLong(cpu[10]));
-
-        return cpuStat;
-    }
-
-    public static void main(String[] args) throws InterruptedException {
-        Cpu cpu = new Cpu();
-        while (true) {
-            log.info("cpu usage -> {}", cpu.topCpu(1000));
-        }
-    }
-}

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

@@ -1,42 +0,0 @@
-package cn.reghao.autodop.common.machine;
-
-import cn.reghao.autodop.common.utils.text.TextFile;
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * 磁盘信息
- *
- * @author reghao
- * @date 2019-10-25 13:21:31
- */
-@Slf4j
-public class Disk {
-    private final String statFile = "/proc/diskstats";
-    private final String whiteSpace = "\\s+";
-    private TextFile textFile = new TextFile();
-
-    /**
-     * df -h 命令
-     *
-     * @param
-     * @return
-     * @date 2019-10-29 上午9:38
-     */
-    public void df() {
-        /*String[] stats = textFile.readFile(statFile).split("\n");
-        for (String stat : stats) {
-            String[] tmp = stat.split(whiteSpace);
-            DiskStat diskStat = new DiskStat();
-            diskStat.setMajor(Integer.parseInt(tmp[1]));
-            diskStat.setMinor(Integer.parseInt(tmp[2]));
-            diskStat.setDevice(tmp[3]);
-
-            log.info("");
-        }*/
-    }
-
-    public static void main(String[] args) {
-        Disk disk = new Disk();
-        disk.df();
-    }
-}

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

@@ -1,67 +0,0 @@
-package cn.reghao.autodop.common.machine;
-
-import cn.reghao.autodop.common.machine.contant.ProcFile;
-import cn.reghao.autodop.common.machine.pojo.mem.MemStat;
-import cn.reghao.autodop.common.machine.pojo.mem.MemUsage;
-import cn.reghao.autodop.common.machine.utils.AbstractPercentageCalculator;
-import cn.reghao.autodop.common.machine.utils.MemCalculator;
-import cn.reghao.autodop.common.utils.text.TextFile;
-import lombok.extern.slf4j.Slf4j;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 内存信息
- *
- * @author reghao
- * @date 2019-10-25 13:21:25
- */
-@Slf4j
-public class Memory {
-    private AbstractPercentageCalculator<MemStat> calculator = new MemCalculator();
-    private TextFile textFile = new TextFile();
-
-    /**
-     * free -h 命令
-     *
-     * @param
-     * @return
-     * @date 2020-03-19 下午7:21
-     */
-    public MemUsage free() {
-        MemStat memStat = stat();
-        return (MemUsage) calculator.format(memStat, null);
-    }
-
-    private MemStat stat() {
-        String[] info = textFile.readFile(ProcFile.MEM_INFO).replace(" ", "").split(System.lineSeparator());
-        Map<String, Long> map = new HashMap<>(info.length);
-        for (String s : info) {
-            String[] kv = s.split(":");
-            String key = kv[0];
-            String value = kv[1].split("kB")[0];
-            map.put(key, Long.parseLong(value));
-        }
-
-        MemStat memStat = new MemStat();
-        memStat.setMemTotal(map.get("MemTotal"));
-        memStat.setMemFree(map.get("MemFree"));
-        memStat.setShared(map.get("Shmem"));
-        memStat.setBuffers(map.get("Buffers"));
-        memStat.setCached(map.get("Cached") + map.get("SReclaimable"));
-        memStat.setMemAvailable(map.get("MemAvailable"));
-        memStat.setSwapTotal(map.get("SwapTotal"));
-        memStat.setSwapFree(map.get("SwapFree"));
-
-        return memStat;
-    }
-
-    public static void main(String[] args) throws InterruptedException {
-        Memory mem = new Memory();
-        while (true) {
-            Thread.sleep(1_000);
-            log.info("mem -> {}", mem.free());
-        }
-    }
-}

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/mq/MsgType.java

@@ -8,7 +8,7 @@ package cn.reghao.autodop.common.mq;
  */
 public enum MsgType {
     deploy("Deploy"), log("Log"), status("Status"),
-    dagentStart("Plain"), dagentHeartbeat("DagentHeartbeat");
+    dagentStart("Plain"), dagentStop("Plain"), dagentHeartbeat("DagentHeartbeat");
 
     private String value;
 

+ 100 - 0
common/src/main/java/cn/reghao/autodop/common/sysstat/Cpu.java

@@ -0,0 +1,100 @@
+package cn.reghao.autodop.common.sysstat;
+
+import cn.reghao.autodop.common.sysstat.contant.ProcFile;
+import cn.reghao.autodop.common.sysstat.pojo.cpu.CpuInfo;
+import cn.reghao.autodop.common.sysstat.pojo.cpu.CpuStat;
+import cn.reghao.autodop.common.sysstat.pojo.cpu.CpuUsage;
+import cn.reghao.autodop.common.sysstat.utils.AbstractPercentageCalculator;
+import cn.reghao.autodop.common.sysstat.utils.CpuPercentageCalculator;
+import cn.reghao.autodop.common.utils.text.TextFile;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.*;
+
+/**
+ * 处理器
+ *
+ * @author reghao
+ * @date 2019-10-25 13:12:36
+ */
+@Slf4j
+public class Cpu {
+    private AbstractPercentageCalculator<CpuStat> calculator = new CpuPercentageCalculator();;
+    private TextFile textFile = new TextFile();
+
+    public CpuInfo info() {
+        List<Map<String, String>> list = parseCpuInfo();
+        if (list.isEmpty()) {
+            return null;
+        }
+        Map<String, String> map = list.get(0);
+        CpuInfo cpuInfo = new CpuInfo();
+        cpuInfo.setModelName(map.get("model name"));
+        cpuInfo.setCpus(list.size());
+        cpuInfo.setCpuCores(Integer.parseInt(map.get("cpu cores")));
+        cpuInfo.setBogomips(Double.parseDouble(map.get("bogomips")));
+        return cpuInfo;
+    }
+
+    private List<Map<String, String>> parseCpuInfo() {
+        String info = textFile.readFile(ProcFile.CPU_INFO);
+        List<Map<String, String>> list = new ArrayList<>();
+        Map<String, String> map = new LinkedHashMap<>();
+        for (String line : info.split(System.lineSeparator())) {
+            if (!line.isEmpty()) {
+                String[] strs = line.replace("\t", "").split(":");
+                if (!strs[0].startsWith("power management")) {
+                    map.put(strs[0], strs[1].replace(" ", ""));
+                }
+            } else {
+                list.add(map);
+                map = new LinkedHashMap<>();
+            }
+        }
+        list.add(map);
+        return list;
+    }
+
+    /**
+     * top 命令 CPU 部分
+     *
+     * @param interval 采样时间,单位是 ms
+     * @return
+     * @date 2020-03-19 上午10:07
+     */
+    public CpuUsage topCpu(long interval) throws InterruptedException {
+        CpuStat stat1 = stat();
+        Thread.sleep(interval);
+        CpuStat stat2 = stat();
+
+        return (CpuUsage) calculator.format(stat1, stat2);
+    }
+
+    private CpuStat stat() {
+        String[] stat = textFile.readFile(ProcFile.CPU_STAT).split(System.lineSeparator());
+        String whiteSpace = "\\s+";
+        String[] cpu = stat[0].split(whiteSpace);
+
+        CpuStat cpuStat = new CpuStat();
+        cpuStat.setUser(Long.parseLong(cpu[1]));
+        cpuStat.setNice(Long.parseLong(cpu[2]));
+        cpuStat.setSystem(Long.parseLong(cpu[3]));
+        cpuStat.setIdle(Long.parseLong(cpu[4]));
+        cpuStat.setIowait(Long.parseLong(cpu[5]));
+        cpuStat.setIrq(Long.parseLong(cpu[6]));
+        cpuStat.setSoftirq(Long.parseLong(cpu[7]));
+        cpuStat.setSteal(Long.parseLong(cpu[8]));
+        cpuStat.setGuest(Long.parseLong(cpu[9]));
+        cpuStat.setGuestnice(Long.parseLong(cpu[10]));
+
+        return cpuStat;
+    }
+
+    public static void main(String[] args) throws InterruptedException {
+        Cpu cpu = new Cpu();
+        /*while (true) {
+            log.info("cpu usage -> {}", cpu.topCpu(1000));
+        }*/
+        cpu.info();
+    }
+}

+ 67 - 0
common/src/main/java/cn/reghao/autodop/common/sysstat/Disk.java

@@ -0,0 +1,67 @@
+package cn.reghao.autodop.common.sysstat;
+
+import cn.reghao.autodop.common.sysstat.pojo.disk.DiskInfo;
+import cn.reghao.autodop.common.sysstat.utils.ByteConvert;
+import cn.reghao.autodop.common.sysstat.utils.ByteType;
+import cn.reghao.autodop.common.utils.text.TextFile;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.IOException;
+import java.nio.file.FileSystem;
+import java.nio.file.FileSystems;
+import java.util.*;
+
+/**
+ * 磁盘
+ *
+ * @author reghao
+ * @date 2019-10-25 13:21:31
+ */
+@Slf4j
+public class Disk {
+    private final String whiteSpace = "\\s+";
+
+    /**
+     * df -h 命令
+     *
+     * @param
+     * @return
+     * @date 2019-10-29 上午9:38
+     */
+    public List<DiskInfo> info() {
+        List<DiskInfo> list = new ArrayList<>();
+        ByteConvert convert = new ByteConvert();
+        FileSystem fs = FileSystems.getDefault();
+
+        fs.getFileStores().forEach(fileStore -> {
+            try {
+                String fileSystem = fileStore.name();
+                if (fileSystem.startsWith("/dev")) {
+                    String size = convert.convert(fileStore.getTotalSpace(), ByteType.Byte);
+                    String avail = convert.convert(fileStore.getUsableSpace(), ByteType.Byte);
+                    String used = convert.convert(
+                            fileStore.getTotalSpace()-fileStore.getUnallocatedSpace(), ByteType.Byte);
+                    String mountedOn = fileStore.toString().split("\\(")[0];
+                    String fsType = fileStore.type();
+
+                    DiskInfo diskInfo = new DiskInfo();
+                    diskInfo.setFileSystem(fileSystem);
+                    diskInfo.setSize(size);
+                    diskInfo.setUsed(used);
+                    diskInfo.setAvail(avail);
+                    diskInfo.setMountedOn(mountedOn);
+                    diskInfo.setFsType(fsType);
+                    list.add(diskInfo);
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        });
+        return list;
+    }
+
+    public static void main(String[] args) {
+        Disk disk = new Disk();
+        disk.info();
+    }
+}

+ 113 - 0
common/src/main/java/cn/reghao/autodop/common/sysstat/Memory.java

@@ -0,0 +1,113 @@
+package cn.reghao.autodop.common.sysstat;
+
+import cn.reghao.autodop.common.sysstat.contant.ProcFile;
+import cn.reghao.autodop.common.sysstat.pojo.memory.MemStat;
+import cn.reghao.autodop.common.sysstat.pojo.memory.MemUsage;
+import cn.reghao.autodop.common.sysstat.pojo.memory.MemoryInfo;
+import cn.reghao.autodop.common.sysstat.utils.AbstractPercentageCalculator;
+import cn.reghao.autodop.common.sysstat.utils.ByteConvert;
+import cn.reghao.autodop.common.sysstat.utils.ByteType;
+import cn.reghao.autodop.common.sysstat.utils.MemCalculator;
+import cn.reghao.autodop.common.utils.text.TextFile;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * 内存
+ *
+ * @author reghao
+ * @date 2019-10-25 13:21:25
+ */
+public class Memory {
+    private AbstractPercentageCalculator<MemStat> calculator = new MemCalculator();
+    private TextFile textFile = new TextFile();
+
+    public MemoryInfo info() {
+        ByteConvert convert = new ByteConvert();
+        Map<String, String> map = parseMemInfo();
+
+        double total = Double.parseDouble(map.get("MemTotal").split("kB")[0]);
+        double free = Double.parseDouble(map.get("MemFree").split("kB")[0]);
+        double shared = Double.parseDouble(map.get("Shmem").split("kB")[0]);
+        double buffers = Double.parseDouble(map.get("Buffers").split("kB")[0]);
+        double cached = Double.parseDouble(map.get("Cached").split("kB")[0]) +
+                Double.parseDouble(map.get("SReclaimable").split("kB")[0]);
+        double buffCache = buffers + cached;
+        double available = Double.parseDouble(map.get("MemAvailable").split("kB")[0]);
+        double used = total - free - buffCache;
+
+        double swapTotal = Double.parseDouble(map.get("SwapTotal").split("kB")[0]);
+        double swapUnused = Double.parseDouble(map.get("SwapFree").split("kB")[0]);
+        double swapUsed = swapTotal - swapUnused;
+
+        MemoryInfo memoryInfo = new MemoryInfo();
+        memoryInfo.setTotal(convert.convert(total, ByteType.KiB));
+        memoryInfo.setUsed(convert.convert(used, ByteType.KiB));
+        memoryInfo.setFree(convert.convert(free, ByteType.KiB));
+        memoryInfo.setShared(convert.convert(shared, ByteType.KiB));
+        memoryInfo.setBuffCache(convert.convert(buffCache, ByteType.KiB));
+        memoryInfo.setAvailable(convert.convert(available, ByteType.KiB));
+
+        memoryInfo.setSwapTotal(convert.convert(swapTotal, ByteType.KiB));
+        memoryInfo.setSwapUsed(convert.convert(swapUsed, ByteType.KiB));
+        memoryInfo.setSwapFree(convert.convert(swapUnused, ByteType.KiB));
+        return memoryInfo;
+    }
+
+    private Map<String, String> parseMemInfo() {
+        String info = textFile.readFile(ProcFile.MEM_INFO);
+        Map<String, String> map = new LinkedHashMap<>();
+        for (String line : info.split(System.lineSeparator())) {
+            String[] strs = line.replace("\t", "").split(":");
+            map.put(strs[0], strs[1].replace(" ", ""));
+        }
+        return map;
+    }
+
+    /**
+     * free -h 命令
+     *
+     * @param
+     * @return
+     * @date 2020-03-19 下午7:21
+     */
+    public MemUsage free() {
+        MemStat memStat = stat();
+        return (MemUsage) calculator.format(memStat, null);
+    }
+
+    private MemStat stat() {
+        String[] info = textFile.readFile(ProcFile.MEM_INFO).replace(" ", "").split(System.lineSeparator());
+        Map<String, Long> map = new HashMap<>(info.length);
+        for (String s : info) {
+            String[] kv = s.split(":");
+            String key = kv[0];
+            String value = kv[1].split("kB")[0];
+            map.put(key, Long.parseLong(value));
+        }
+
+        MemStat memStat = new MemStat();
+        memStat.setMemTotal(map.get("MemTotal"));
+        memStat.setMemFree(map.get("MemFree"));
+        memStat.setShared(map.get("Shmem"));
+        memStat.setBuffers(map.get("Buffers"));
+        memStat.setCached(map.get("Cached") + map.get("SReclaimable"));
+        memStat.setMemAvailable(map.get("MemAvailable"));
+        memStat.setSwapTotal(map.get("SwapTotal"));
+        memStat.setSwapFree(map.get("SwapFree"));
+
+        return memStat;
+    }
+
+    public static void main(String[] args) throws InterruptedException {
+        Memory mem = new Memory();
+        mem.info();
+        /*while (true) {
+            Thread.sleep(1_000);
+            log.info("mem -> {}", mem.free());
+        }*/
+    }
+}

+ 65 - 13
common/src/main/java/cn/reghao/autodop/common/machine/Network.java → common/src/main/java/cn/reghao/autodop/common/sysstat/Network.java

@@ -1,30 +1,82 @@
-package cn.reghao.autodop.common.machine;
-
-import cn.reghao.autodop.common.machine.contant.ProcFile;
-import cn.reghao.autodop.common.machine.contant.TcpState;
-import cn.reghao.autodop.common.machine.pojo.net.NetCardStat;
-import cn.reghao.autodop.common.machine.pojo.net.NetConnStat;
-import cn.reghao.autodop.common.machine.pojo.ProcessStat;
-import cn.reghao.autodop.common.machine.utils.IpAddressConversion;
+package cn.reghao.autodop.common.sysstat;
+
+import cn.reghao.autodop.common.sysstat.contant.ProcFile;
+import cn.reghao.autodop.common.sysstat.contant.TcpState;
+import cn.reghao.autodop.common.sysstat.pojo.network.NetCardStat;
+import cn.reghao.autodop.common.sysstat.pojo.network.NetConnStat;
+import cn.reghao.autodop.common.sysstat.pojo.ProcessStat;
+import cn.reghao.autodop.common.sysstat.pojo.network.NetworkInfo;
+import cn.reghao.autodop.common.sysstat.utils.IpAddressConversion;
 import cn.reghao.autodop.common.utils.StringUtil;
 import cn.reghao.autodop.common.utils.text.TextFile;
-import lombok.extern.slf4j.Slf4j;
 
 import java.io.IOException;
+import java.net.*;
 import java.util.ArrayList;
+import java.util.Enumeration;
 import java.util.List;
 
 /**
- * 网络信息,依赖于 ProcessStat
+ * 网络
  *
  * @author reghao
  * @date 2019-10-23 21:17:04
  */
-@Slf4j
 public class Network {
     private TextFile textFile = new TextFile();
     private IpAddressConversion conversion = new IpAddressConversion();
 
+    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 List<NetCardStat> ifconfig() {
         List<NetCardStat> cardStats = new ArrayList<>();
         String[] devs = textFile.readFile(ProcFile.DEV).split(System.lineSeparator());
@@ -52,7 +104,6 @@ public class Network {
             cardStats.add(cardStat);
         }
 
-        log.info("");
         return cardStats;
     }
 
@@ -127,6 +178,7 @@ public class Network {
     public static void main(String[] args) throws IOException {
         Network network = new Network();
         //network.netstat();
-        network.ifconfig();
+        //network.ifconfig();
+        network.info();
     }
 }

+ 4 - 5
common/src/main/java/cn/reghao/autodop/common/machine/Process.java → common/src/main/java/cn/reghao/autodop/common/sysstat/Process.java

@@ -1,8 +1,7 @@
-package cn.reghao.autodop.common.machine;
+package cn.reghao.autodop.common.sysstat;
 
-import cn.reghao.autodop.common.machine.contant.ProcFile;
-import cn.reghao.autodop.common.machine.pojo.ProcessStat;
-import cn.reghao.autodop.common.utils.DateTimeUtil;
+import cn.reghao.autodop.common.sysstat.contant.ProcFile;
+import cn.reghao.autodop.common.sysstat.pojo.ProcessStat;
 import cn.reghao.autodop.common.utils.text.TextFile;
 import lombok.extern.slf4j.Slf4j;
 
@@ -17,7 +16,7 @@ import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 /**
- * 进程信息
+ * 进程
  *
  * @author reghao
  * @date 2019-10-25 09:49:09

+ 4 - 1
common/src/main/java/cn/reghao/autodop/common/machine/contant/ProcFile.java → common/src/main/java/cn/reghao/autodop/common/sysstat/contant/ProcFile.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.machine.contant;
+package cn.reghao.autodop.common.sysstat.contant;
 
 /**
  * /proc 文件系统中的文件路径
@@ -14,6 +14,9 @@ public class ProcFile {
 
     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

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/machine/contant/ProcessState.java → common/src/main/java/cn/reghao/autodop/common/sysstat/contant/ProcessState.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.machine.contant;
+package cn.reghao.autodop.common.sysstat.contant;
 
 /**
  * 进程状态

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/machine/contant/TcpState.java → common/src/main/java/cn/reghao/autodop/common/sysstat/contant/TcpState.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.machine.contant;
+package cn.reghao.autodop.common.sysstat.contant;
 
 /**
  * TCP 状态

+ 1 - 2
common/src/main/java/cn/reghao/autodop/common/machine/pojo/ProcessStat.java → common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/ProcessStat.java

@@ -1,8 +1,7 @@
-package cn.reghao.autodop.common.machine.pojo;
+package cn.reghao.autodop.common.sysstat.pojo;
 
 import lombok.Data;
 
-import java.time.LocalDateTime;
 import java.util.HashMap;
 import java.util.Map;
 

+ 4 - 4
common/src/main/java/cn/reghao/autodop/common/machine/pojo/SysStat.java → common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/SysStat.java

@@ -1,8 +1,8 @@
-package cn.reghao.autodop.common.machine.pojo;
+package cn.reghao.autodop.common.sysstat.pojo;
 
-import cn.reghao.autodop.common.machine.pojo.cpu.CpuUsage;
-import cn.reghao.autodop.common.machine.pojo.mem.MemUsage;
-import cn.reghao.autodop.common.machine.pojo.net.NetConnStat;
+import cn.reghao.autodop.common.sysstat.pojo.cpu.CpuUsage;
+import cn.reghao.autodop.common.sysstat.pojo.memory.MemUsage;
+import cn.reghao.autodop.common.sysstat.pojo.network.NetConnStat;
 import lombok.Data;
 
 import java.util.List;

+ 15 - 0
common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/cpu/CpuInfo.java

@@ -0,0 +1,15 @@
+package cn.reghao.autodop.common.sysstat.pojo.cpu;
+
+import lombok.Data;
+
+/**
+ * @author reghao
+ * @date 2020-10-20 09:51:52
+ */
+@Data
+public class CpuInfo {
+    private String modelName;
+    private int cpus;
+    private int cpuCores;
+    private double bogomips;
+}

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/machine/pojo/cpu/CpuStat.java → common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/cpu/CpuStat.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.machine.pojo.cpu;
+package cn.reghao.autodop.common.sysstat.pojo.cpu;
 
 import lombok.Data;
 

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/machine/pojo/cpu/CpuUsage.java → common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/cpu/CpuUsage.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.machine.pojo.cpu;
+package cn.reghao.autodop.common.sysstat.pojo.cpu;
 
 import lombok.Data;
 

+ 19 - 0
common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/disk/DiskInfo.java

@@ -0,0 +1,19 @@
+package cn.reghao.autodop.common.sysstat.pojo.disk;
+
+import lombok.Data;
+
+/**
+ * df -h 命令输出
+ *
+ * @author reghao
+ * @date 2020-10-20 10:51:59
+ */
+@Data
+public class DiskInfo {
+    private String fileSystem;
+    private String size;
+    private String used;
+    private String avail;
+    private String mountedOn;
+    private String fsType;
+}

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/machine/pojo/disk/DiskStat.java → common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/disk/DiskStat.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.machine.pojo.disk;
+package cn.reghao.autodop.common.sysstat.pojo.disk;
 
 import lombok.Data;
 

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/machine/pojo/disk/DiskUsage.java → common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/disk/DiskUsage.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.machine.pojo.disk;
+package cn.reghao.autodop.common.sysstat.pojo.disk;
 
 import lombok.Data;
 

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/machine/pojo/mem/MemStat.java → common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/memory/MemStat.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.machine.pojo.mem;
+package cn.reghao.autodop.common.sysstat.pojo.memory;
 
 import lombok.Data;
 

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/machine/pojo/mem/MemUsage.java → common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/memory/MemUsage.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.machine.pojo.mem;
+package cn.reghao.autodop.common.sysstat.pojo.memory;
 
 import lombok.Data;
 

+ 22 - 0
common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/memory/MemoryInfo.java

@@ -0,0 +1,22 @@
+package cn.reghao.autodop.common.sysstat.pojo.memory;
+
+import lombok.Data;
+
+/**
+ * free -h 命令输出
+ *
+ * @author reghao
+ * @date 2020-10-20 10:51:50
+ */
+@Data
+public class MemoryInfo {
+    private String total;
+    private String used;
+    private String free;
+    private String shared;
+    private String buffCache;
+    private String available;
+    private String swapTotal;
+    private String swapUsed;
+    private String swapFree;
+}

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/machine/pojo/net/NetCardStat.java → common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/network/NetCardStat.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.machine.pojo.net;
+package cn.reghao.autodop.common.sysstat.pojo.network;
 
 import lombok.Data;
 

+ 2 - 2
common/src/main/java/cn/reghao/autodop/common/machine/pojo/net/NetConnStat.java → common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/network/NetConnStat.java

@@ -1,6 +1,6 @@
-package cn.reghao.autodop.common.machine.pojo.net;
+package cn.reghao.autodop.common.sysstat.pojo.network;
 
-import cn.reghao.autodop.common.machine.contant.TcpState;
+import cn.reghao.autodop.common.sysstat.contant.TcpState;
 import lombok.Data;
 
 /**

+ 15 - 0
common/src/main/java/cn/reghao/autodop/common/sysstat/pojo/network/NetworkInfo.java

@@ -0,0 +1,15 @@
+package cn.reghao.autodop.common.sysstat.pojo.network;
+
+import lombok.Data;
+
+/**
+ * @author reghao
+ * @date 2020-10-20 10:53:12
+ */
+@Data
+public class NetworkInfo {
+    private String iface;
+    private String mac;
+    private String ipv4;
+    private String ipv6;
+}

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/machine/utils/AbstractPercentageCalculator.java → common/src/main/java/cn/reghao/autodop/common/sysstat/utils/AbstractPercentageCalculator.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.machine.utils;
+package cn.reghao.autodop.common.sysstat.utils;
 
 import java.text.DecimalFormat;
 

+ 11 - 8
common/src/main/java/cn/reghao/autodop/common/machine/utils/ByteConvert.java → common/src/main/java/cn/reghao/autodop/common/sysstat/utils/ByteConvert.java

@@ -1,6 +1,4 @@
-package cn.reghao.autodop.common.machine.utils;
-
-import lombok.extern.slf4j.Slf4j;
+package cn.reghao.autodop.common.sysstat.utils;
 
 import java.text.DecimalFormat;
 
@@ -10,19 +8,24 @@ import java.text.DecimalFormat;
  * @author reghao
  * @date 2019-10-26 22:39:23
  */
-@Slf4j
 public class ByteConvert {
     private DecimalFormat df = new DecimalFormat("0.00");
     private final double size = 1024.00;
 
-    public String convert(double value, ByteType type) {
+    /**
+     * @param source 源数据
+     * @param type 源数据单位(Byte, KiB, MiB 等)
+     * @return 值在 1024 范围内的数据(KiB, MiB, GiB 等)
+     * @date 2020-10-20 上午11:26
+     */
+    public String convert(double source, ByteType type) {
         int index = type.getIndex();
-        while (value > size) {
+        while (source > size) {
             index++;
-            value = divide(value);
+            source = divide(source);
         }
 
-        return df.format(value) + type(index);
+        return df.format(source) + type(index);
     }
 
     private String type(int index) {

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/machine/utils/ByteType.java → common/src/main/java/cn/reghao/autodop/common/sysstat/utils/ByteType.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.machine.utils;
+package cn.reghao.autodop.common.sysstat.utils;
 
 /**
  * @author reghao

+ 3 - 3
common/src/main/java/cn/reghao/autodop/common/machine/utils/CpuPercentageCalculator.java → common/src/main/java/cn/reghao/autodop/common/sysstat/utils/CpuPercentageCalculator.java

@@ -1,7 +1,7 @@
-package cn.reghao.autodop.common.machine.utils;
+package cn.reghao.autodop.common.sysstat.utils;
 
-import cn.reghao.autodop.common.machine.pojo.cpu.CpuStat;
-import cn.reghao.autodop.common.machine.pojo.cpu.CpuUsage;
+import cn.reghao.autodop.common.sysstat.pojo.cpu.CpuStat;
+import cn.reghao.autodop.common.sysstat.pojo.cpu.CpuUsage;
 
 /**
  * @author reghao

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/machine/utils/IpAddressConversion.java → common/src/main/java/cn/reghao/autodop/common/sysstat/utils/IpAddressConversion.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.machine.utils;
+package cn.reghao.autodop.common.sysstat.utils;
 
 /**
  * IP 地址转换

+ 3 - 3
common/src/main/java/cn/reghao/autodop/common/machine/utils/MemCalculator.java → common/src/main/java/cn/reghao/autodop/common/sysstat/utils/MemCalculator.java

@@ -1,7 +1,7 @@
-package cn.reghao.autodop.common.machine.utils;
+package cn.reghao.autodop.common.sysstat.utils;
 
-import cn.reghao.autodop.common.machine.pojo.mem.MemStat;
-import cn.reghao.autodop.common.machine.pojo.mem.MemUsage;
+import cn.reghao.autodop.common.sysstat.pojo.memory.MemStat;
+import cn.reghao.autodop.common.sysstat.pojo.memory.MemUsage;
 
 /**
  * @author reghao

+ 2 - 2
common/src/main/java/cn/reghao/autodop/common/utils/text/TextFile.java

@@ -107,13 +107,13 @@ public class TextFile {
             while ((line = in.readLine()) != null) {
                 content.append(line).append(System.lineSeparator());
             }
-
             in.close();
         } catch (IOException ioe) {
             ioe.printStackTrace();
         }
 
-        return content.toString();
+        int index = content.lastIndexOf(System.lineSeparator());
+        return content.substring(0, index);
     }
 
     /**

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

@@ -5,7 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
-//@EnableScheduling
+@EnableScheduling
 @ComponentScan({"cn.reghao.autodop.dagent", "cn.reghao.autodop.common.mq"})
 @SpringBootApplication
 public class DagentApplication {

+ 58 - 0
dagent/src/main/java/cn/reghao/autodop/dagent/node/agent/AgentInfo.java

@@ -0,0 +1,58 @@
+package cn.reghao.autodop.dagent.node.agent;
+
+import cn.reghao.autodop.common.sysstat.Cpu;
+import cn.reghao.autodop.common.sysstat.Disk;
+import cn.reghao.autodop.common.sysstat.Memory;
+import cn.reghao.autodop.common.sysstat.Network;
+import cn.reghao.autodop.common.utils.DateTimeUtil;
+import lombok.Data;
+
+import java.lang.management.ManagementFactory;
+import java.lang.management.OperatingSystemMXBean;
+import java.lang.management.RuntimeMXBean;
+
+/**
+ * @author reghao
+ * @date 2020-10-19 14:40:12
+ */
+@Data
+public class AgentInfo {
+    private String agentId;
+    private String agentAddress;
+    private String startTime;
+    private String os;
+    private String osUptime;
+    private HardwareInfo hardwareInfo;
+
+    public AgentInfo() {
+        RuntimeMXBean rt = ManagementFactory.getRuntimeMXBean();
+        long startTime = rt.getStartTime();
+        this.startTime = DateTimeUtil.msTimestampFormat(startTime);
+        hardwareInfo();
+        osInfo();
+    }
+
+    private void osInfo() {
+        this.os = System.getProperty("os.name");
+        OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean();
+        osBean.getArch();
+    }
+
+    private void hardwareInfo() {
+        Cpu cpu = new Cpu();
+        Memory memory = new Memory();
+        Disk disk = new Disk();
+        Network network = new Network();
+
+        HardwareInfo hardwareInfo = new HardwareInfo();
+        hardwareInfo.setCpu(cpu.info());
+        hardwareInfo.setMemory(memory.info());
+        hardwareInfo.setDisk(disk.info());
+        hardwareInfo.setNetwork(network.info());
+        this.hardwareInfo = hardwareInfo;
+    }
+
+    public static void main(String[] args) {
+        AgentInfo agentInfo = new AgentInfo();
+    }
+}

+ 36 - 0
dagent/src/main/java/cn/reghao/autodop/dagent/node/agent/AgentNotifier.java

@@ -0,0 +1,36 @@
+package cn.reghao.autodop.dagent.node.agent;
+
+/**
+ * agent 状态通知
+ *
+ * @author reghao
+ * @date 2020-10-19 13:59:47
+ */
+public interface AgentNotifier {
+    /**
+     * 启动后发送
+     *
+     * @param
+     * @return
+     * @date 2020-10-19 下午2:01
+     */
+    void afterStart();
+
+    /**
+     * 结束前发送
+     *
+     * @param
+     * @return
+     * @date 2020-10-19 下午2:01
+     */
+    void beforeStop();
+
+    /**
+     * 心跳包
+     *
+     * @param
+     * @return
+     * @date 2020-10-19 下午2:01
+     */
+    void heartbeat();
+}

+ 19 - 0
dagent/src/main/java/cn/reghao/autodop/dagent/node/agent/AgentStatus.java

@@ -0,0 +1,19 @@
+package cn.reghao.autodop.dagent.node.agent;
+
+/**
+ * @author reghao
+ * @date 2020-10-20 09:13:49
+ */
+public enum AgentStatus {
+    start("启动"), stop("停止"), heartbeat("心跳");
+
+    private String value;
+
+    AgentStatus(String value) {
+        this.value = value;
+    }
+
+    public String getValue() {
+        return value;
+    }
+}

+ 77 - 0
dagent/src/main/java/cn/reghao/autodop/dagent/node/agent/DagentNotifier.java

@@ -0,0 +1,77 @@
+package cn.reghao.autodop.dagent.node.agent;
+
+import cn.reghao.autodop.common.mq.MessageSender;
+import cn.reghao.autodop.common.mq.MqMessage;
+import cn.reghao.autodop.common.mq.MsgType;
+import cn.reghao.autodop.common.utils.HostAddress;
+import cn.reghao.autodop.common.utils.NetworkUtil;
+import cn.reghao.autodop.common.utils.text.TextFile;
+import cn.reghao.autodop.dagent.config.DmasterProperties;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2020-10-19 14:03:03
+ */
+@Component
+public class DagentNotifier implements AgentNotifier {
+    private final String machineId;
+    private final AgentInfo agentInfo;
+    private final String routeKey;
+    private MessageSender sender;
+
+    public DagentNotifier(DmasterProperties properties, MessageSender sender) throws Exception {
+        this.machineId = new TextFile().readFile("/etc/machine-id");
+        this.agentInfo = initAgentMsg(machineId);
+        this.routeKey = "dmaster@" + properties.getAddress();
+        this.sender = sender;
+    }
+
+    private AgentInfo initAgentMsg(String machineId) throws Exception {
+        AgentInfo agentInfo = new AgentInfo();
+        agentInfo.setAgentId(machineId);
+        List<HostAddress> list = NetworkUtil.hostAddr();
+        if (list.isEmpty()) {
+            throw new Exception("");
+        }
+
+        StringBuilder sb = new StringBuilder();
+        list.forEach(hostAddress -> {
+            sb.append(hostAddress.getIpv4()).append(",");
+        });
+        agentInfo.setAgentAddress(sb.substring(0, sb.lastIndexOf(",")));
+
+        return agentInfo;
+    }
+
+    @Override
+    public void afterStart() {
+        MqMessage<AgentInfo> mqMessage = new MqMessage<>();
+        mqMessage.setMsgType(MsgType.dagentStart.name());
+        mqMessage.setSendTime(System.currentTimeMillis());
+        mqMessage.setMsg(agentInfo);
+        sender.send(routeKey, mqMessage);
+    }
+
+    @Override
+    public void beforeStop() {
+        MqMessage<String> mqMessage = new MqMessage<>();
+        mqMessage.setMsgType(MsgType.dagentStop.name());
+        mqMessage.setSendTime(System.currentTimeMillis());
+        mqMessage.setMsg(machineId);
+        sender.send(routeKey, mqMessage);
+    }
+
+    @Scheduled(fixedRate = 60_000)
+    @Override
+    public void heartbeat() {
+        MqMessage<String> mqMessage = new MqMessage<>();
+        mqMessage.setMsgType(MsgType.dagentHeartbeat.name());
+        mqMessage.setSendTime(System.currentTimeMillis());
+        mqMessage.setMsg(machineId);
+        sender.send(routeKey, mqMessage);
+    }
+}

+ 21 - 0
dagent/src/main/java/cn/reghao/autodop/dagent/node/agent/HardwareInfo.java

@@ -0,0 +1,21 @@
+package cn.reghao.autodop.dagent.node.agent;
+
+import cn.reghao.autodop.common.sysstat.pojo.cpu.CpuInfo;
+import cn.reghao.autodop.common.sysstat.pojo.disk.DiskInfo;
+import cn.reghao.autodop.common.sysstat.pojo.memory.MemoryInfo;
+import cn.reghao.autodop.common.sysstat.pojo.network.NetworkInfo;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2020-10-20 09:33:43
+ */
+@Data
+public class HardwareInfo {
+    private CpuInfo cpu;
+    private MemoryInfo memory;
+    private List<DiskInfo> disk;
+    private List<NetworkInfo> network;
+}

+ 9 - 11
dagent/src/main/java/cn/reghao/autodop/dagent/service/MachineStatusScheduler.java

@@ -1,20 +1,19 @@
 package cn.reghao.autodop.dagent.service;
 
-import cn.reghao.autodop.common.machine.Cpu;
-import cn.reghao.autodop.common.machine.Memory;
-import cn.reghao.autodop.common.machine.Network;
-import cn.reghao.autodop.common.machine.Process;
-import cn.reghao.autodop.common.machine.pojo.ProcessStat;
-import cn.reghao.autodop.common.machine.pojo.SysStat;
-import cn.reghao.autodop.common.machine.pojo.cpu.CpuUsage;
-import cn.reghao.autodop.common.machine.pojo.mem.MemUsage;
-import cn.reghao.autodop.common.machine.pojo.net.NetConnStat;
+import cn.reghao.autodop.common.sysstat.Cpu;
+import cn.reghao.autodop.common.sysstat.Memory;
+import cn.reghao.autodop.common.sysstat.Network;
+import cn.reghao.autodop.common.sysstat.Process;
+import cn.reghao.autodop.common.sysstat.pojo.ProcessStat;
+import cn.reghao.autodop.common.sysstat.pojo.SysStat;
+import cn.reghao.autodop.common.sysstat.pojo.cpu.CpuUsage;
+import cn.reghao.autodop.common.sysstat.pojo.memory.MemUsage;
+import cn.reghao.autodop.common.sysstat.pojo.network.NetConnStat;
 import cn.reghao.autodop.common.mq.MqMessage;
 import cn.reghao.autodop.common.mq.MsgType;
 import cn.reghao.autodop.common.utils.NetworkUtil;
 import cn.reghao.autodop.common.mq.MessageSender;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -42,7 +41,6 @@ public class MachineStatusScheduler {
         this.sender = sender;
     }
 
-    @Scheduled(fixedRate = 3_000)
     public void status() throws Exception {
         CpuUsage cpuUsage = cpu.topCpu(1_000);
         MemUsage memUsage = mem.free();

+ 5 - 24
dagent/src/main/java/cn/reghao/autodop/dagent/utils/AfterAppStart.java

@@ -1,18 +1,11 @@
 package cn.reghao.autodop.dagent.utils;
 
-import cn.reghao.autodop.common.mq.MessageSender;
-import cn.reghao.autodop.common.mq.MqMessage;
-import cn.reghao.autodop.common.mq.MsgType;
-import cn.reghao.autodop.common.utils.HostAddress;
-import cn.reghao.autodop.common.utils.NetworkUtil;
-import cn.reghao.autodop.dagent.config.DmasterProperties;
+import cn.reghao.autodop.dagent.node.agent.AgentNotifier;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.ApplicationRunner;
 import org.springframework.stereotype.Component;
 
-import java.util.List;
-
 /**
  * Spring Boot 应用启动完成后执行,此时所有的 bean 都已初始化
  *
@@ -22,12 +15,10 @@ import java.util.List;
 @Slf4j
 @Component
 public class AfterAppStart implements ApplicationRunner {
-    private DmasterProperties properties;
-    private MessageSender sender;
+    private AgentNotifier agentNotifier;
 
-    public AfterAppStart(DmasterProperties properties, MessageSender sender) {
-        this.properties = properties;
-        this.sender = sender;
+    public AfterAppStart(AgentNotifier agentNotifier) {
+        this.agentNotifier = agentNotifier;
     }
 
     @Override
@@ -46,16 +37,6 @@ public class AfterAppStart implements ApplicationRunner {
     }
 
     private void notifyDmaster() throws Exception {
-        List<HostAddress> list = NetworkUtil.hostAddr();
-        if (list.isEmpty()) {
-            throw new Exception("");
-        }
-
-        String routeKey = "dmaster@" + properties.getAddress();
-        MqMessage<HostAddress> mqMessage = new MqMessage<>();
-        mqMessage.setMsgType(MsgType.dagentStart.name());
-        mqMessage.setMsg(list.get(0));
-        mqMessage.setSendTime(System.currentTimeMillis());
-        sender.send(routeKey, mqMessage);
+        agentNotifier.afterStart();
     }
 }

+ 4 - 0
dagent/src/main/java/cn/reghao/autodop/dagent/utils/JavaAppStatus.java

@@ -1,5 +1,7 @@
 package cn.reghao.autodop.dagent.utils;
 
+import cn.reghao.autodop.common.utils.DateTimeUtil;
+
 import java.lang.management.ManagementFactory;
 import java.lang.management.RuntimeMXBean;
 
@@ -11,5 +13,7 @@ public class JavaAppStatus {
     public static void main(String[] args) {
         RuntimeMXBean rt = ManagementFactory.getRuntimeMXBean();
         long startTime = rt.getStartTime();
+        String datetime = DateTimeUtil.msTimestampFormat(startTime);
+        System.out.println();
     }
 }

+ 12 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/common/mq/MessageDispatcher.java

@@ -23,9 +23,13 @@ public class MessageDispatcher implements MessageListener {
         try {
             switch (MsgType.valueOf(msgType)) {
                 case dagentStart:
-                    handleMsgFromDagent(body);
+                    log.info("dagent 启动时发送的消息 -> {}", body);
+                    break;
+                case dagentStop:
+                    log.info("dagent 结束时发送的消息 -> {}", body);
                     break;
                 case dagentHeartbeat:
+                    log.info("dagent 心跳 -> {}", body);
                     break;
                 default:
             }
@@ -34,7 +38,12 @@ public class MessageDispatcher implements MessageListener {
         }
     }
 
-    private void handleMsgFromDagent(String msg) {
-        log.info("dagent 启动时发送的消息 -> {}", msg);
+    private void handleAgentStart(String msg) {
+    }
+
+    private void handleAgentStop(String msg) {
+    }
+
+    private void handleAgentHeartbeat(String msg) {
     }
 }

+ 9 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/node/agent/AgentStatus.java

@@ -0,0 +1,9 @@
+package cn.reghao.autodop.dmaster.node.agent;
+
+/**
+ * @author reghao
+ * @date 2020-10-19 15:02:59
+ */
+public class AgentStatus {
+    private String agentId;
+}

+ 3 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/node/controller/NodeController.java

@@ -14,14 +14,14 @@ import org.springframework.web.bind.annotation.*;
 @RequestMapping("/api/node")
 public class NodeController {
     @ApiOperation(value = "")
-    @PostMapping("/start")
+    @PostMapping("/agent/public_ip")
     public String add(@RequestBody String json) {
         return WebResult.success("ok");
     }
 
     @ApiOperation(value = "")
-    @GetMapping("/status")
-    public String get() {
+    @GetMapping("/list")
+    public String nodeList() {
         return WebResult.success("ok");
     }
 }