Parcourir la source

调整代码目录结构

reghao il y a 4 ans
Parent
commit
f70e914c7a
32 fichiers modifiés avec 310 ajouts et 284 suppressions
  1. 21 5
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/Machine.java
  2. 6 6
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/MachineBeanConfig.java
  3. 0 11
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/MachineStat.java
  4. 4 4
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/api/data/MachineInfo.java
  5. 2 0
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/hardware/LinuxProc.java
  6. 5 6
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/hardware/cpu/Cpu.java
  7. 1 1
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/hardware/cpu/CpuInfo.java
  8. 2 1
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/hardware/cpu/CpuPercentageCalculator.java
  9. 1 2
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/hardware/network/Network.java
  10. 0 1
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/hardware/network/TCPConnStat.java
  11. 1 1
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/hardware/network/TcpState.java
  12. 10 9
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/os/Os.java
  13. 7 4
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/os/OsInfo.java
  14. 2 2
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/os/OsStat.java
  15. 1 2
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/os/Process.java
  16. 1 1
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/os/ProcessStat.java
  17. 1 1
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/os/ProcessState.java
  18. 1 1
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/os/SysStat.java
  19. 1 6
      common/src/main/java/cn/reghao/autodop/common/utils/DateTimeConverter.java
  20. 2 2
      dmaster/pom.xml
  21. 4 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/vo/HostInfo.java
  22. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/controller/MonitorController.java
  23. 0 5
      dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/service/MonitorService.java
  24. 3 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/DagentMsgDispatcher.java
  25. 66 13
      dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/processor/AppOpsProcessor.java
  26. 7 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/processor/DagentOpsProcessor.java
  27. 41 8
      dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/processor/MachineOpsProcessor.java
  28. 0 100
      dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/processor/app/AppOpsProcessor.java
  29. 0 53
      dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/processor/machine/MachineOpsProcessor.java
  30. 0 25
      dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/processor/machine/MachineRegistryProcessor.java
  31. 12 6
      dmaster/src/main/resources/templates/machine/host.html
  32. 107 0
      dmaster/src/main/resources/templates/machine/status.html

+ 21 - 5
common/src/main/java/cn/reghao/autodop/common/dagent/machine/Machine.java

@@ -1,11 +1,11 @@
 package cn.reghao.autodop.common.dagent.machine;
 
 import cn.reghao.autodop.common.dagent.machine.api.data.*;
-import cn.reghao.autodop.common.dagent.machine.hardware.cpu.CPU;
+import cn.reghao.autodop.common.dagent.machine.hardware.cpu.Cpu;
 import cn.reghao.autodop.common.dagent.machine.hardware.disk.Disk;
 import cn.reghao.autodop.common.dagent.machine.hardware.memory.Memory;
 import cn.reghao.autodop.common.dagent.machine.hardware.network.Network;
-import cn.reghao.autodop.common.dagent.machine.system.os.OS;
+import cn.reghao.autodop.common.dagent.machine.os.Os;
 import cn.reghao.autodop.common.message.CallResult;
 import cn.reghao.autodop.common.utils.MachineId;
 import org.springframework.stereotype.Component;
@@ -16,15 +16,25 @@ import org.springframework.stereotype.Component;
  */
 @Component
 public class Machine {
-    private CPU cpu;
+    private Cpu cpu;
     private Memory memory;
     private Disk disk;
     private Network network;
-    private OS os;
+    private Os os;
     private String machineId;
     private String machineIpv4;
 
-    public Machine(CPU cpu, Memory memory, Disk disk, Network network, OS os) {
+    public Machine() {
+        this.cpu = new Cpu();
+        this.memory = new Memory();
+        this.disk = new Disk();
+        this.network = new Network();
+        this.os = new Os();
+        this.machineId = MachineId.id();
+        this.machineIpv4 = MachineId.ipv4();
+    }
+
+    public Machine(Cpu cpu, Memory memory, Disk disk, Network network, Os os) {
         this.cpu = cpu;
         this.memory = memory;
         this.disk = disk;
@@ -60,4 +70,10 @@ public class Machine {
     public CallResult<MachineState> state() {
         return CallResult.success(null);
     }
+
+    public static void main(String[] args) {
+        Machine machine = new Machine();
+        MachineInfo info = machine.registry();
+        System.out.println();
+    }
 }

+ 6 - 6
common/src/main/java/cn/reghao/autodop/common/dagent/machine/MachineBeanConfig.java

@@ -1,10 +1,10 @@
 package cn.reghao.autodop.common.dagent.machine;
 
-import cn.reghao.autodop.common.dagent.machine.hardware.cpu.CPU;
+import cn.reghao.autodop.common.dagent.machine.hardware.cpu.Cpu;
 import cn.reghao.autodop.common.dagent.machine.hardware.disk.Disk;
 import cn.reghao.autodop.common.dagent.machine.hardware.memory.Memory;
 import cn.reghao.autodop.common.dagent.machine.hardware.network.Network;
-import cn.reghao.autodop.common.dagent.machine.system.os.OS;
+import cn.reghao.autodop.common.dagent.machine.os.Os;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
@@ -15,8 +15,8 @@ import org.springframework.context.annotation.Configuration;
 @Configuration
 public class MachineBeanConfig {
     @Bean
-    public CPU cpu() {
-        return new CPU();
+    public Cpu cpu() {
+        return new Cpu();
     }
 
     @Bean
@@ -35,7 +35,7 @@ public class MachineBeanConfig {
     }
 
     @Bean
-    public OS os() {
-        return new OS();
+    public Os os() {
+        return new Os();
     }
 }

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

@@ -1,11 +0,0 @@
-package cn.reghao.autodop.common.dagent.machine;
-
-import lombok.Data;
-
-/**
- * @author reghao
- * @date 2020-10-22 15:45:43
- */
-@Data
-public class MachineStat {
-}

+ 4 - 4
common/src/main/java/cn/reghao/autodop/common/dagent/machine/api/data/MachineInfo.java

@@ -1,10 +1,10 @@
 package cn.reghao.autodop.common.dagent.machine.api.data;
 
-import cn.reghao.autodop.common.dagent.machine.hardware.cpu.CPUInfo;
+import cn.reghao.autodop.common.dagent.machine.hardware.cpu.CpuInfo;
 import cn.reghao.autodop.common.dagent.machine.hardware.disk.DiskInfo;
 import cn.reghao.autodop.common.dagent.machine.hardware.memory.MemoryInfo;
 import cn.reghao.autodop.common.dagent.machine.hardware.network.NetworkInfo;
-import cn.reghao.autodop.common.dagent.machine.system.os.OSInfo;
+import cn.reghao.autodop.common.dagent.machine.os.OsInfo;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -18,9 +18,9 @@ import java.util.List;
 @EqualsAndHashCode(callSuper = false)
 public class MachineInfo {
     private String machineId;
-    private CPUInfo cpuInfo;
+    private CpuInfo cpuInfo;
     private MemoryInfo memoryInfo;
     private List<DiskInfo> diskInfo;
     private List<NetworkInfo> networkInfo;
-    private OSInfo osInfo;
+    private OsInfo osInfo;
 }

+ 2 - 0
common/src/main/java/cn/reghao/autodop/common/dagent/machine/hardware/LinuxProc.java

@@ -20,4 +20,6 @@ public class LinuxProc {
     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";
 }

+ 5 - 6
common/src/main/java/cn/reghao/autodop/common/dagent/machine/hardware/cpu/CPU.java → common/src/main/java/cn/reghao/autodop/common/dagent/machine/hardware/cpu/Cpu.java

@@ -2,7 +2,6 @@ package cn.reghao.autodop.common.dagent.machine.hardware.cpu;
 
 import cn.reghao.autodop.common.dagent.machine.hardware.LinuxProc;
 import cn.reghao.autodop.common.dagent.machine.AbstractPercentageCalculator;
-import cn.reghao.autodop.common.dagent.machine.CpuPercentageCalculator;
 import cn.reghao.autodop.common.utils.text.TextFile;
 import lombok.extern.slf4j.Slf4j;
 
@@ -15,11 +14,11 @@ import java.util.*;
  * @date 2019-10-25 13:12:36
  */
 @Slf4j
-public class CPU {
+public class Cpu {
     private AbstractPercentageCalculator<CpuStats> calculator = new CpuPercentageCalculator();;
     private TextFile textFile = new TextFile();
 
-    public CPUInfo info() {
+    public CpuInfo info() {
         List<String> list = textFile.read(LinuxProc.CPU_INFO);
         if (list.isEmpty()) {
             log.error("CPU 信息获取失败...");
@@ -46,7 +45,7 @@ public class CPU {
         }
 
         Map<String, String> info = result.get(0);
-        CPUInfo cpuInfo = new CPUInfo();
+        CpuInfo cpuInfo = new CpuInfo();
         // Raspbian 系统没有此字段
         String cpuCores = info.get("cpu cores");
         if (cpuCores != null) {
@@ -98,8 +97,8 @@ public class CPU {
     }
 
     public static void main(String[] args) {
-        CPU cpu = new CPU();
-        CPUInfo cpuInfo = cpu.info();
+        Cpu cpu = new Cpu();
+        CpuInfo cpuInfo = cpu.info();
         System.out.println();
     }
 }

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/dagent/machine/hardware/cpu/CPUInfo.java → common/src/main/java/cn/reghao/autodop/common/dagent/machine/hardware/cpu/CpuInfo.java

@@ -7,7 +7,7 @@ import lombok.Data;
  * @date 2020-10-20 09:51:52
  */
 @Data
-public class CPUInfo {
+public class CpuInfo {
     private int cpuCores;
     private int cpus;
     private String vendorId;

+ 2 - 1
common/src/main/java/cn/reghao/autodop/common/dagent/machine/CpuPercentageCalculator.java → common/src/main/java/cn/reghao/autodop/common/dagent/machine/hardware/cpu/CpuPercentageCalculator.java

@@ -1,5 +1,6 @@
-package cn.reghao.autodop.common.dagent.machine;
+package cn.reghao.autodop.common.dagent.machine.hardware.cpu;
 
+import cn.reghao.autodop.common.dagent.machine.AbstractPercentageCalculator;
 import cn.reghao.autodop.common.dagent.machine.hardware.cpu.CpuStats;
 import cn.reghao.autodop.common.dagent.machine.hardware.cpu.CpuStat;
 

+ 1 - 2
common/src/main/java/cn/reghao/autodop/common/dagent/machine/hardware/network/Network.java

@@ -1,8 +1,7 @@
 package cn.reghao.autodop.common.dagent.machine.hardware.network;
 
 import cn.reghao.autodop.common.dagent.machine.hardware.LinuxProc;
-import cn.reghao.autodop.common.dagent.machine.contant.TcpState;
-import cn.reghao.autodop.common.dagent.machine.system.os.ProcessStat;
+import cn.reghao.autodop.common.dagent.machine.os.ProcessStat;
 import cn.reghao.autodop.common.utils.IpAddressConverter;
 import cn.reghao.autodop.common.utils.text.TextFile;
 

+ 0 - 1
common/src/main/java/cn/reghao/autodop/common/dagent/machine/hardware/network/TCPConnStat.java

@@ -1,6 +1,5 @@
 package cn.reghao.autodop.common.dagent.machine.hardware.network;
 
-import cn.reghao.autodop.common.dagent.machine.contant.TcpState;
 import lombok.Data;
 
 /**

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

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

+ 10 - 9
common/src/main/java/cn/reghao/autodop/common/dagent/machine/system/os/OS.java → common/src/main/java/cn/reghao/autodop/common/dagent/machine/os/Os.java

@@ -1,18 +1,20 @@
-package cn.reghao.autodop.common.dagent.machine.system.os;
+package cn.reghao.autodop.common.dagent.machine.os;
 
 import cn.reghao.autodop.common.dagent.machine.hardware.LinuxProc;
 import cn.reghao.autodop.common.utils.DateTimeConverter;
 import cn.reghao.autodop.common.utils.text.TextFile;
 
+import java.time.LocalDateTime;
+
 /**
  * @author reghao
  * @date 2020-10-20 23:17:30
  */
-public class OS {
+public class Os {
     private TextFile textFile = new TextFile();
 
-    public OSInfo info() {
-        OSInfo osInfo = new OSInfo();
+    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"));
@@ -21,26 +23,25 @@ public class OS {
         return osInfo;
     }
 
-    private String bootTime() {
+    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.msTimestampFormat(btime*1000);
+                return DateTimeConverter.localDateTime(btime*1000);
             }
         }
-
         return null;
     }
 
-    public OSStat stat() throws Exception {
+    public OsStat stat() throws Exception {
         String loadAvg = textFile.readFile(LinuxProc.LOAD_AVG);
         String[] strs = loadAvg.split("\\s+");
         if (strs.length != 5) {
             throw new Exception("解析 " + LinuxProc.LOAD_AVG + " 文件错误...");
         }
 
-        OSStat osStat = new OSStat();
+        OsStat osStat = new OsStat();
         osStat.setLoadAvg1(Double.parseDouble(strs[0]));
         osStat.setLoadAvg5(Double.parseDouble(strs[1]));
         osStat.setLoadAvg15(Double.parseDouble(strs[2]));

+ 7 - 4
common/src/main/java/cn/reghao/autodop/common/dagent/machine/system/os/OSInfo.java → common/src/main/java/cn/reghao/autodop/common/dagent/machine/os/OsInfo.java

@@ -1,16 +1,19 @@
-package cn.reghao.autodop.common.dagent.machine.system.os;
+package cn.reghao.autodop.common.dagent.machine.os;
 
 import lombok.Data;
 
+import java.time.LocalDateTime;
+
 /**
  * @author reghao
  * @date 2020-10-20 23:16:42
  */
 @Data
-public class OSInfo {
-    private String name;
+public class OsInfo {
     private String arch;
+    private String name;
+    // 系统版本或内核版本
     private String version;
     private String byteOrder;
-    private String bootTime;
+    private LocalDateTime bootTime;
 }

+ 2 - 2
common/src/main/java/cn/reghao/autodop/common/dagent/machine/system/os/OSStat.java → common/src/main/java/cn/reghao/autodop/common/dagent/machine/os/OsStat.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.dagent.machine.system.os;
+package cn.reghao.autodop.common.dagent.machine.os;
 
 import lombok.Data;
 
@@ -7,7 +7,7 @@ import lombok.Data;
  * @date 2020-10-20 23:16:42
  */
 @Data
-public class OSStat {
+public class OsStat {
     private double loadAvg1;
     private double loadAvg5;
     private double loadAvg15;

+ 1 - 2
common/src/main/java/cn/reghao/autodop/common/dagent/machine/system/process/Process.java → common/src/main/java/cn/reghao/autodop/common/dagent/machine/os/Process.java

@@ -1,7 +1,6 @@
-package cn.reghao.autodop.common.dagent.machine.system.process;
+package cn.reghao.autodop.common.dagent.machine.os;
 
 import cn.reghao.autodop.common.dagent.machine.hardware.LinuxProc;
-import cn.reghao.autodop.common.dagent.machine.system.os.ProcessStat;
 import cn.reghao.autodop.common.utils.text.TextFile;
 import lombok.extern.slf4j.Slf4j;
 

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/dagent/machine/system/os/ProcessStat.java → common/src/main/java/cn/reghao/autodop/common/dagent/machine/os/ProcessStat.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.dagent.machine.system.os;
+package cn.reghao.autodop.common.dagent.machine.os;
 
 import lombok.Data;
 

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

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

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/dagent/machine/system/os/SysStat.java → common/src/main/java/cn/reghao/autodop/common/dagent/machine/os/SysStat.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.dagent.machine.system.os;
+package cn.reghao.autodop.common.dagent.machine.os;
 
 import cn.reghao.autodop.common.dagent.machine.hardware.cpu.CpuStat;
 import cn.reghao.autodop.common.dagent.machine.hardware.memory.MemUsage;

+ 1 - 6
common/src/main/java/cn/reghao/autodop/common/utils/DateTimeConverter.java

@@ -4,7 +4,7 @@ import java.time.*;
 import java.time.format.DateTimeFormatter;
 
 /**
- * 时间日期格式转换器
+ * 时间日期字符串格式转换器
  *
  * @author reghao
  * @date 2020-03-20 10:20:01
@@ -158,9 +158,4 @@ public class DateTimeConverter {
         long second = Duration.between(now, future).getSeconds();
         return second * 1000;
     }
-
-    public static void main(String[] args) {
-        LocalDateTime localDateTime = DateTimeConverter.localDateTime(0);
-        System.out.println();
-    }
 }

+ 2 - 2
dmaster/pom.xml

@@ -211,8 +211,8 @@
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
                 <configuration>
-                    <source>1.8</source>
-                    <target>1.8</target>
+                    <source>11</source>
+                    <target>11</target>
                 </configuration>
             </plugin>
 

+ 4 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/vo/HostInfo.java

@@ -12,9 +12,12 @@ import java.time.LocalDateTime;
 public class HostInfo {
     private String machineId;
     private String machineIpv4;
-    private String bootTime;
+    private LocalDateTime bootTime;
     private String osArch;
     private String osName;
     private String osVersion;
+    private int totalCpu;
+    private long totalMem;
+    private long totalDisk;
     private LocalDateTime lastCheck;
 }

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/controller/MonitorController.java

@@ -36,6 +36,6 @@ public class MonitorController {
 
     @GetMapping("/linux/stat")
     public String osStat() {
-        return WebBody.success(monitorService.linuxSysStat());
+        return WebBody.success();
     }
 }

+ 0 - 5
dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/service/MonitorService.java

@@ -3,7 +3,6 @@ package cn.reghao.autodop.dmaster.monitor.service;
 import cn.reghao.autodop.common.jvm.JVM;
 import cn.reghao.autodop.common.jvm.pojo.JVMInfo;
 import cn.reghao.autodop.common.jvm.pojo.JVMStat;
-import cn.reghao.autodop.common.dagent.machine.MachineStat;
 import org.springframework.stereotype.Service;
 
 /**
@@ -25,8 +24,4 @@ public class MonitorService {
     public JVMStat jvmStat() {
         return jvm.stat();
     }
-
-    public MachineStat linuxSysStat() {
-        return null;
-    }
 }

+ 3 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/DagentMsgDispatcher.java

@@ -3,9 +3,9 @@ package cn.reghao.autodop.dmaster.mqttsub;
 import cn.reghao.autodop.common.message.MessageType;
 import cn.reghao.autodop.common.message.AsyncMsg;
 import cn.reghao.autodop.common.utils.serializer.JsonConverter;
-import cn.reghao.autodop.dmaster.mqttsub.processor.app.AppOpsProcessor;
-import cn.reghao.autodop.dmaster.mqttsub.processor.dagent.DagentOpsProcessor;
-import cn.reghao.autodop.dmaster.mqttsub.processor.machine.MachineOpsProcessor;
+import cn.reghao.autodop.dmaster.mqttsub.processor.AppOpsProcessor;
+import cn.reghao.autodop.dmaster.mqttsub.processor.DagentOpsProcessor;
+import cn.reghao.autodop.dmaster.mqttsub.processor.MachineOpsProcessor;
 import lombok.extern.slf4j.Slf4j;
 import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
 import org.eclipse.paho.client.mqttv3.MqttCallback;

+ 66 - 13
dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/processor/app/AppDeployResultProcessor.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/processor/AppOpsProcessor.java

@@ -1,6 +1,9 @@
-package cn.reghao.autodop.dmaster.mqttsub.processor.app;
+package cn.reghao.autodop.dmaster.mqttsub.processor;
 
+import cn.reghao.autodop.common.dagent.app.api.data.AppStatus;
 import cn.reghao.autodop.common.dagent.app.api.data.DeployResult;
+import cn.reghao.autodop.common.message.CallResult;
+import cn.reghao.autodop.common.message.ops.AppOps;
 import cn.reghao.autodop.common.utils.serializer.JsonConverter;
 import cn.reghao.autodop.dmaster.app.db.query.AppQuery;
 import cn.reghao.autodop.dmaster.app.entity.AppDeploying;
@@ -14,18 +17,26 @@ import cn.reghao.autodop.dmaster.app.repository.AppRunningRepository;
 import cn.reghao.autodop.dmaster.app.repository.log.BuildLogRepository;
 import cn.reghao.autodop.dmaster.app.repository.log.DeployLogRepository;
 import cn.reghao.autodop.dmaster.app.service.bd.DeployNotifyMsg;
+import cn.reghao.autodop.common.message.ops.OpsProcessor;
 import cn.reghao.autodop.dmaster.utils.notifier.DingMsg;
 import cn.reghao.autodop.dmaster.utils.notifier.NotifyService;
+import com.google.gson.reflect.TypeToken;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
 
+import java.lang.reflect.Type;
 import java.util.List;
 import java.util.Optional;
 
 /**
+ * 分发 App 相关的消息
+ *
  * @author reghao
- * @date 2021-06-09 18:48:48
+ * @date 2020-12-30 10:26:47
  */
-public class AppDeployResultProcessor implements Runnable {
-    private String payload;
+@Slf4j
+@Component
+public class AppOpsProcessor implements OpsProcessor {
     private BuildLogRepository buildLogRepository;
     private DeployLogRepository deployLogRepository;
     private AppDeployingRepository deployingRepository;
@@ -33,14 +44,12 @@ public class AppDeployResultProcessor implements Runnable {
     private AppQuery appQuery;
     private NotifyService notifyService;
 
-    public AppDeployResultProcessor(String payload,
-                                    BuildLogRepository buildLogRepository,
-                                    DeployLogRepository deployLogRepository,
-                                    AppDeployingRepository deployingRepository,
-                                    AppRunningRepository runningRepository,
-                                    AppQuery appQuery,
-                                    NotifyService notifyService) {
-        this.payload = payload;
+    public AppOpsProcessor(BuildLogRepository buildLogRepository,
+                           DeployLogRepository deployLogRepository,
+                           AppDeployingRepository deployingRepository,
+                           AppRunningRepository runningRepository,
+                           AppQuery appQuery,
+                           NotifyService notifyService) {
         this.buildLogRepository = buildLogRepository;
         this.deployLogRepository = deployLogRepository;
         this.deployingRepository = deployingRepository;
@@ -50,7 +59,32 @@ public class AppDeployResultProcessor implements Runnable {
     }
 
     @Override
-    public void run() {
+    public void process(String ops, String payload) {
+        switch (AppOps.valueOf(ops)) {
+            case appDeployResult:
+                processAppDeployResult(payload);
+                break;
+            case appStatusResult:
+                processAppStatus(payload);
+                break;
+            case appRestartResult:
+                processAppStatus(payload);
+                break;
+            case appStopResult:
+                processAppStatus(payload);
+                break;
+            case appStartResult:
+                processAppStatus(payload);
+                break;
+            case appLogResult:
+                break;
+            default:
+                log.error("AppOps 中没有相应类型...");
+                break;
+        }
+    }
+
+    private void processAppDeployResult(String payload) {
         DeployResult deployResult = JsonConverter.jsonToObject(payload, DeployResult.class);
         DeployLog deployLog = DeployLog.from(deployResult);
         deployLogRepository.save(deployLog);
@@ -92,4 +126,23 @@ public class AppDeployResultProcessor implements Runnable {
         List<NotifyReceiver> notifyReceivers = app.getNotifyReceivers();
         notifyReceivers.forEach(notifyReceiver -> notifyService.notify(notifyReceiver, dingMsg));
     }
+
+    private void processAppStatus(String payload) {
+        Type type = new TypeToken<CallResult<AppStatus>>(){}.getType();
+        CallResult<AppStatus> callResult = JsonConverter.jsonToObject(payload, type);
+        if (callResult.getCode() != 0) {
+            // TODO 处理调用失败的情况
+            log.error("调用失败, 原因: {}", callResult.getMsg());
+            return;
+        }
+
+        AppStatus appStatus = callResult.getData();
+        String appId = appStatus.getAppId();
+        String machineId = appStatus.getMachineId();
+        AppRunning appRunning = runningRepository.findByAppIdAndMachineId(appId, machineId);
+        if (appRunning != null) {
+            appRunning.update(appStatus);
+            runningRepository.save(appRunning);
+        }
+    }
 }

+ 7 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/processor/dagent/DagentOpsProcessor.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/processor/DagentOpsProcessor.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.dmaster.mqttsub.processor.dagent;
+package cn.reghao.autodop.dmaster.mqttsub.processor;
 
 import cn.reghao.autodop.common.log.RunningLog;
 import cn.reghao.autodop.common.message.ops.DagentOps;
@@ -28,12 +28,16 @@ public class DagentOpsProcessor implements OpsProcessor {
     public void process(String ops, String payload) {
         switch (DagentOps.valueOf(ops)) {
             case dagentLog:
-                RunningLog runningLog = JsonConverter.jsonToObject(payload, RunningLog.class);
-                runtimeLogRepository.save(AppRunningLog.from(runningLog));
+                processDagentLog(payload);
                 break;
             default:
                 log.error("DagentOps 中没有相应类型...");
                 break;
         }
     }
+
+    private void processDagentLog(String payload) {
+        RunningLog runningLog = JsonConverter.jsonToObject(payload, RunningLog.class);
+        runtimeLogRepository.save(AppRunningLog.from(runningLog));
+    }
 }

+ 41 - 8
dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/processor/machine/MachineHeartbeatProcessor.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/processor/MachineOpsProcessor.java

@@ -1,35 +1,68 @@
-package cn.reghao.autodop.dmaster.mqttsub.processor.machine;
+package cn.reghao.autodop.dmaster.mqttsub.processor;
 
 import cn.reghao.autodop.common.dagent.machine.api.data.MachineHeartbeat;
 import cn.reghao.autodop.common.dagent.machine.hardware.disk.DiskInfo;
+import cn.reghao.autodop.common.message.ops.MachineOps;
 import cn.reghao.autodop.common.utils.ByteConverter;
 import cn.reghao.autodop.common.utils.ByteType;
 import cn.reghao.autodop.common.utils.PercentCalculator;
 import cn.reghao.autodop.common.utils.serializer.JsonConverter;
+import cn.reghao.autodop.dmaster.machine.entity.MachineInfo;
 import cn.reghao.autodop.dmaster.machine.entity.MachineStatus;
 import cn.reghao.autodop.dmaster.machine.repository.MachineStatusRepository;
+import cn.reghao.autodop.dmaster.machine.db.MachineCrudService;
+import cn.reghao.autodop.common.message.ops.OpsProcessor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
 
 import java.time.LocalDateTime;
 import java.util.List;
 
 /**
+ * 分发 Machine 相关的消息
+ *
  * @author reghao
- * @date 2021-06-09 13:52:37
+ * @date 2020-12-30 10:26:47
  */
 @Slf4j
-public class MachineHeartbeatProcessor implements Runnable {
-    private String payload;
-    private MachineStatusRepository statusRepository;
+@Component
+public class MachineOpsProcessor implements OpsProcessor {
     private ByteConverter convert = new ByteConverter();
+    private MachineCrudService machineCrudService;
+    private MachineStatusRepository statusRepository;
 
-    public MachineHeartbeatProcessor(String payload, MachineStatusRepository statusRepository) {
-        this.payload = payload;
+    public MachineOpsProcessor(MachineCrudService machineCrudService, MachineStatusRepository statusRepository) {
+        this.machineCrudService = machineCrudService;
         this.statusRepository = statusRepository;
     }
 
     @Override
-    public void run() {
+    public void process(String ops, String payload) {
+        try {
+            switch (MachineOps.valueOf(ops)) {
+                case machineRegistry:
+                    processMachineRegistry(payload);
+                    break;
+                case machineHeartbeat:
+                    processMachineHeartbeat(payload);
+                    break;
+                case machineShellResult:
+                case machineStateResult:
+                    break;
+                default:
+                    log.info("未知类型的机器消息...");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private void processMachineRegistry(String payload) {
+        MachineInfo machineInfo = JsonConverter.jsonToObject(payload, MachineInfo.class);
+        machineCrudService.insertOrUpdate(machineInfo);
+    }
+
+    private void processMachineHeartbeat(String payload) {
         MachineHeartbeat heartbeat = JsonConverter.jsonToObject(payload, MachineHeartbeat.class);
         String machineIpv4 = heartbeat.getMachineIpv4();
         String diskAvail = calculateDiskUsage(machineIpv4, heartbeat.getDiskInfo());

+ 0 - 100
dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/processor/app/AppOpsProcessor.java

@@ -1,100 +0,0 @@
-package cn.reghao.autodop.dmaster.mqttsub.processor.app;
-
-import cn.reghao.autodop.common.dagent.app.api.data.AppStatus;
-import cn.reghao.autodop.common.message.CallResult;
-import cn.reghao.autodop.common.message.ops.AppOps;
-import cn.reghao.autodop.common.utils.serializer.JsonConverter;
-import cn.reghao.autodop.dmaster.app.db.query.AppQuery;
-import cn.reghao.autodop.dmaster.app.entity.AppRunning;
-import cn.reghao.autodop.dmaster.app.repository.AppDeployingRepository;
-import cn.reghao.autodop.dmaster.app.repository.AppRunningRepository;
-import cn.reghao.autodop.dmaster.app.repository.log.BuildLogRepository;
-import cn.reghao.autodop.dmaster.app.repository.log.DeployLogRepository;
-import cn.reghao.autodop.dmaster.common.thread.ThreadPoolWrapper;
-import cn.reghao.autodop.common.message.ops.OpsProcessor;
-import cn.reghao.autodop.dmaster.utils.notifier.NotifyService;
-import com.google.gson.reflect.TypeToken;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-
-import java.lang.reflect.Type;
-import java.util.concurrent.ExecutorService;
-
-/**
- * 分发 App 相关的消息
- *
- * @author reghao
- * @date 2020-12-30 10:26:47
- */
-@Slf4j
-@Component
-public class AppOpsProcessor implements OpsProcessor {
-    private ExecutorService threadPool;
-    private BuildLogRepository buildLogRepository;
-    private DeployLogRepository deployLogRepository;
-    private AppDeployingRepository appDeployingRepository;
-    private AppRunningRepository appRunningRepository;
-    private AppQuery appQuery;
-    private NotifyService notifyService;
-
-    public AppOpsProcessor(BuildLogRepository buildLogRepository,
-                           DeployLogRepository deployLogRepository,
-                           AppDeployingRepository appDeployingRepository,
-                           AppRunningRepository appRunningRepository,
-                           AppQuery appQuery,
-                           NotifyService notifyService) {
-        this.threadPool = ThreadPoolWrapper.threadPool("app-ops-processor");
-        this.buildLogRepository = buildLogRepository;
-        this.deployLogRepository = deployLogRepository;
-        this.appDeployingRepository = appDeployingRepository;
-        this.appRunningRepository = appRunningRepository;
-        this.appQuery = appQuery;
-        this.notifyService = notifyService;
-    }
-
-    @Override
-    public void process(String ops, String payload) {
-        switch (AppOps.valueOf(ops)) {
-            case appDeployResult:
-                threadPool.submit(new AppDeployResultProcessor(payload, buildLogRepository, deployLogRepository,
-                        appDeployingRepository, appRunningRepository, appQuery, notifyService));
-                break;
-            case appStatusResult:
-                processAppStatus(payload);
-                break;
-            case appRestartResult:
-                processAppStatus(payload);
-                break;
-            case appStopResult:
-                processAppStatus(payload);
-                break;
-            case appStartResult:
-                processAppStatus(payload);
-                break;
-            case appLogResult:
-                break;
-            default:
-                log.error("AppOps 中没有相应类型...");
-                break;
-        }
-    }
-
-    private void processAppStatus(String payload) {
-        Type type = new TypeToken<CallResult<AppStatus>>(){}.getType();
-        CallResult<AppStatus> callResult = JsonConverter.jsonToObject(payload, type);
-        if (callResult.getCode() != 0) {
-            // TODO 处理调用失败的情况
-            log.error("调用失败, 原因: {}", callResult.getMsg());
-            return;
-        }
-
-        AppStatus appStatus = callResult.getData();
-        String appId = appStatus.getAppId();
-        String machineId = appStatus.getMachineId();
-        AppRunning appRunning = appRunningRepository.findByAppIdAndMachineId(appId, machineId);
-        if (appRunning != null) {
-            appRunning.update(appStatus);
-            appRunningRepository.save(appRunning);
-        }
-    }
-}

+ 0 - 53
dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/processor/machine/MachineOpsProcessor.java

@@ -1,53 +0,0 @@
-package cn.reghao.autodop.dmaster.mqttsub.processor.machine;
-
-import cn.reghao.autodop.common.message.ops.MachineOps;
-import cn.reghao.autodop.dmaster.common.thread.ThreadPoolWrapper;
-import cn.reghao.autodop.dmaster.machine.repository.MachineStatusRepository;
-import cn.reghao.autodop.dmaster.machine.db.MachineCrudService;
-import cn.reghao.autodop.common.message.ops.OpsProcessor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-
-import java.util.concurrent.ExecutorService;
-
-/**
- * 分发 Machine 相关的消息
- *
- * @author reghao
- * @date 2020-12-30 10:26:47
- */
-@Slf4j
-@Component
-public class MachineOpsProcessor implements OpsProcessor {
-    private ExecutorService threadPool;
-    private MachineCrudService machineCrudService;
-    private MachineStatusRepository statusRepository;
-
-    public MachineOpsProcessor(MachineCrudService machineCrudService, MachineStatusRepository statusRepository) {
-        this.threadPool = ThreadPoolWrapper.threadPool("machine-ops-processor");
-        this.machineCrudService = machineCrudService;
-        this.statusRepository = statusRepository;
-    }
-
-    @Override
-    public void process(String ops, String payload) {
-        try {
-            switch (MachineOps.valueOf(ops)) {
-                case machineRegistry:
-                    log.info("机器注册消息...");
-                    threadPool.submit(new MachineRegistryProcessor(payload, machineCrudService));
-                    break;
-                case machineHeartbeat:
-                    threadPool.submit(new MachineHeartbeatProcessor(payload, statusRepository));
-                    break;
-                case machineShellResult:
-                case machineStateResult:
-                    break;
-                default:
-                    log.info("未知类型的机器消息...");
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-}

+ 0 - 25
dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/processor/machine/MachineRegistryProcessor.java

@@ -1,25 +0,0 @@
-package cn.reghao.autodop.dmaster.mqttsub.processor.machine;
-
-import cn.reghao.autodop.common.utils.serializer.JsonConverter;
-import cn.reghao.autodop.dmaster.machine.entity.MachineInfo;
-import cn.reghao.autodop.dmaster.machine.db.MachineCrudService;
-
-/**
- * @author reghao
- * @date 2021-06-09 13:52:37
- */
-public class MachineRegistryProcessor implements Runnable {
-    private String payload;
-    private MachineCrudService machineCrudService;
-
-    public MachineRegistryProcessor(String payload, MachineCrudService machineCrudService) {
-        this.payload = payload;
-        this.machineCrudService = machineCrudService;
-    }
-
-    @Override
-    public void run() {
-        MachineInfo machineInfo = JsonConverter.jsonToObject(payload, MachineInfo.class);
-        machineCrudService.insertOrUpdate(machineInfo);
-    }
-}

+ 12 - 6
dmaster/src/main/resources/templates/machine/host.html

@@ -46,10 +46,12 @@
                     <th class="sortable" data-field="machineIpv4">机器地址</th>
                     <th class="sortable" data-field="bootTime">启动时间</th>
                     <th class="sortable" data-field="osArch">系统架构</th>
-                    <th class="sortable" data-field="osName">系统名</th>
-                    <th class="sortable" data-field="osVersion">内核版本</th>
+                    <th class="sortable" data-field="osArch">系统类型</th>
+                    <th class="sortable" data-field="osName">系统名字</th>
+                    <th class="sortable" data-field="osVersion">系统版本</th>
                     <th class="sortable" data-field="cpus">CPU 数量</th>
-                    <th class="sortable" data-field="totalMem">内存容量</th>
+                    <th class="sortable" data-field="totalMem">内存总量(MiB)</th>
+                    <th class="sortable" data-field="totalMem">磁盘总量(MiB)</th>
                     <th class="sortable" data-field="lastCheckedTime">上次接收心跳</th>
                     <th>操作</th>
                 </tr>
@@ -61,12 +63,16 @@
                     <td th:text="${item.machineIpv4}">机器地址</td>
                     <td th:text="${item.bootTime}">启动时间</td>
                     <td th:text="${item.osArch}">系统架构</td>
-                    <td th:text="${item.osName}">系统名</td>
-                    <td th:text="${item.osVersion}">内核版本</td>
+                    <td th:text="${item.osArch}">系统类型</td>
+                    <td th:text="${item.osName}">系统名字</td>
+                    <td th:text="${item.osVersion}">系统版本</td>
                     <td th:text="${item.cpus}">CPU 数量</td>
-                    <td th:text="${item.totalMem}">内存容量</td>
+                    <td th:text="${item.totalMem}">内存总量</td>
+                    <td th:text="${item.totalMem}">磁盘总量</td>
                     <td th:text="${item.lastCheckedTime}">上次接收心跳</td>
                     <td>
+                        <a class="open-popup" data-title="机器当前状态" th:attr="data-url=@{'/machine/host/detail/'+${item.machineId}}"
+                           data-size="1200,600" href="#">当前状态</a>
                         <a class="open-popup" data-title="机器详细信息" th:attr="data-url=@{'/machine/host/detail/'+${item.machineId}}"
                            data-size="1200,600" href="#">详细</a>
                         <a class="open-popup" data-title="编辑" th:attr="data-url=@{'//machine/host/'+${item.machineId}}"

+ 107 - 0
dmaster/src/main/resources/templates/machine/status.html

@@ -0,0 +1,107 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org">
+<head th:replace="/common/template :: header(~{::title},~{::link},~{::style})"></head>
+
+<body>
+    <div class="timo-detail-page">
+        <div class="timo-detail-title">操作系统信息</div>
+        <table class="layui-table timo-detail-table">
+            <tbody>
+            <tr>
+                <th>系统名字</th>
+                <td th:text="${machine.osInfo.name}"></td>
+                <th>系统架构</th>
+                <td th:text="${machine.osInfo.arch}"></td>
+                <th>系统版本</th>
+                <td th:text="${machine.osInfo.version}"></td>
+            </tr>
+            <tr>
+                <th>系统字节序</th>
+                <td th:text="${machine.osInfo.byteOrder}"></td>
+                <th>系统启动时间</th>
+                <td th:text="${machine.osInfo.bootTime}"></td>
+            </tr>
+            </tbody>
+        </table>
+        <div class="timo-detail-title">网络信息</div>
+        <table class="layui-table timo-detail-table">
+            <tbody>
+            <tr th:each="item:${machine.networkInfo}">
+                <th>网卡接口</th>
+                <td th:text="${item.iface}"></td>
+                <th>MAC 地址</th>
+                <td th:text="${item.mac}"></td>
+                <th>IPv4 地址</th>
+                <td th:text="${item.ipv4}"></td>
+                <th>IPv6 地址</th>
+                <td th:text="${item.ipv6}"></td>
+            </tr>
+            </tbody>
+        </table>
+        <div class="timo-detail-title">处理器信息</div>
+        <table class="layui-table timo-detail-table">
+            <tbody>
+            <tr>
+                <th>处理器核心数量</th>
+                <td th:text="${machine.cpuInfo.cpuCores}"></td>
+                <th>逻辑处理器数量</th>
+                <td th:text="${machine.cpuInfo.cpus}"></td>
+            </tr>
+            <tr>
+                <th>处理器品牌</th>
+                <td th:text="${machine.cpuInfo.vendorId}"></td>
+                <th>处理器型号</th>
+                <td th:text="${machine.cpuInfo.modelName}"></td>
+                <th>bogoMips</th>
+                <td th:text="${machine.cpuInfo.bogoMips}"></td>
+            </tr>
+            </tbody>
+        </table>
+        <div class="timo-detail-title">内存信息</div>
+        <table class="layui-table timo-detail-table">
+            <tbody>
+            <tr>
+                <th>内存总量</th>
+                <td th:text="${machine.memoryInfo.total}"></td>
+                <th>已用内存</th>
+                <td th:text="${machine.memoryInfo.used}"></td>
+                <th>可用内存</th>
+                <td th:text="${machine.memoryInfo.available}"></td>
+            </tr>
+            <tr>
+                <th>交换分区总量</th>
+                <td th:text="${machine.memoryInfo.swapTotal}"></td>
+                <th>已使用交换分区</th>
+                <td th:text="${machine.memoryInfo.swapUsed}"></td>
+                <th>可用交换分区</th>
+                <td th:text="${machine.memoryInfo.swapFree}"></td>
+            </tr>
+            </tbody>
+        </table>
+        <div class="timo-detail-title">磁盘信息</div>
+        <table class="layui-table timo-detail-table">
+            <tbody>
+            <tr th:each="item:${machine.diskInfo}">
+                <th>分区路径</th>
+                <td th:text="${item.diskPath}"></td>
+                <th>分区挂载路径</th>
+                <td th:text="${item.mountedOn}"></td>
+                <th>文件系统</th>
+                <td th:text="${item.fsType}"></td>
+                <th>总容量</th>
+                <td th:text="${item.size}"></td>
+                <th>已使用</th>
+                <td th:text="${item.used}"></td>
+                <th>可用</th>
+                <td th:text="${item.avail}"></td>
+                <th>inode 总量</th>
+                <td th:text="${item.inodeTotal}"></td>
+                <th>inode 可用量</th>
+                <td th:text="${item.inodeFree}"></td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+<script th:replace="/common/template :: script"></script>
+</body>
+</html>