Kaynağa Gözat

机器监控模块

reghao 6 yıl önce
ebeveyn
işleme
3835cacf40
33 değiştirilmiş dosya ile 518 ekleme ve 400 silme
  1. 26 0
      .gitignore
  2. 1 0
      common/src/main/java/cn/reghao/autodop/common/docker/DockerClient.java
  3. 42 60
      common/src/main/java/cn/reghao/autodop/common/machine/Cpu.java
  4. 17 8
      common/src/main/java/cn/reghao/autodop/common/machine/Disk.java
  5. 37 33
      common/src/main/java/cn/reghao/autodop/common/machine/Memory.java
  6. 57 4
      common/src/main/java/cn/reghao/autodop/common/machine/Network.java
  7. 70 0
      common/src/main/java/cn/reghao/autodop/common/machine/Process.java
  8. 0 46
      common/src/main/java/cn/reghao/autodop/common/machine/ProcessState.java
  9. 2 0
      common/src/main/java/cn/reghao/autodop/common/machine/SysInfo.java
  10. 27 0
      common/src/main/java/cn/reghao/autodop/common/machine/contant/TcpState.java
  11. 37 0
      common/src/main/java/cn/reghao/autodop/common/machine/pojo/CpuStat.java
  12. 10 25
      common/src/main/java/cn/reghao/autodop/common/machine/pojo/CpuUsage.java
  13. 31 0
      common/src/main/java/cn/reghao/autodop/common/machine/pojo/DiskStat.java
  14. 0 11
      common/src/main/java/cn/reghao/autodop/common/machine/pojo/DiskStats.java
  15. 2 0
      common/src/main/java/cn/reghao/autodop/common/machine/pojo/DiskUsage.java
  16. 2 1
      common/src/main/java/cn/reghao/autodop/common/machine/pojo/MemProfile.java
  17. 22 0
      common/src/main/java/cn/reghao/autodop/common/machine/pojo/MemStat.java
  18. 8 2
      common/src/main/java/cn/reghao/autodop/common/machine/pojo/MemUsage.java
  19. 19 0
      common/src/main/java/cn/reghao/autodop/common/machine/pojo/NetStat.java
  20. 0 20
      common/src/main/java/cn/reghao/autodop/common/machine/pojo/NetState.java
  21. 16 2
      common/src/main/java/cn/reghao/autodop/common/machine/pojo/ProcessInfo.java
  22. 4 8
      common/src/main/java/cn/reghao/autodop/common/machine/utils/AbstractPercentageCalculator.java
  23. 0 32
      common/src/main/java/cn/reghao/autodop/common/machine/utils/BeanConversion.java
  24. 1 1
      common/src/main/java/cn/reghao/autodop/common/machine/utils/ByteConvert.java
  25. 0 46
      common/src/main/java/cn/reghao/autodop/common/machine/utils/CpuCalculator.java
  26. 46 0
      common/src/main/java/cn/reghao/autodop/common/machine/utils/CpuPercentageCalculator.java
  27. 3 2
      common/src/main/java/cn/reghao/autodop/common/machine/utils/IpAddressConversion.java
  28. 25 33
      common/src/main/java/cn/reghao/autodop/common/machine/utils/MemCalculator.java
  29. 0 21
      common/src/main/java/cn/reghao/autodop/common/machine/vo/CpuStat.java
  30. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/controller/IndexController.java
  31. 12 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/NodeController.java
  32. 0 27
      dmaster/src/main/java/cn/reghao/autodop/dmaster/orchestrate/pojo/AppBuildLog.java
  33. 0 14
      dmaster/src/main/java/cn/reghao/autodop/dmaster/orchestrate/repository/AppBuildLogRepository.java

+ 26 - 0
.gitignore

@@ -2,3 +2,29 @@
 \.idea/
 
 *.iml
+
+common/\.settings/
+
+common/\.classpath
+
+common/\.factorypath
+
+common/\.project
+
+dagent/\.settings/
+
+dagent/\.classpath
+
+dagent/\.factorypath
+
+dagent/\.project
+
+dmaster/\.settings/
+
+dmaster/\.project
+
+dmaster/\.classpath
+
+dmaster/\.factorypath
+
+logs/

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

@@ -222,6 +222,7 @@ public class DockerClient implements ImageOps, ContainerOps, AutoCloseable {
         for (Container container : containers) {
             if (container.getNames()[0].equals(name)) {
                 String id = container.getId();
+                // 匹配任意状态与名字相同的容器
                 if ("running".equals(container.getState())) {
                     stop(id);
                 }

+ 42 - 60
common/src/main/java/cn/reghao/autodop/common/machine/Cpu.java

@@ -1,33 +1,30 @@
 package cn.reghao.autodop.common.machine;
 
 import cn.reghao.autodop.common.machine.pojo.CpuInfo;
+import cn.reghao.autodop.common.machine.pojo.CpuStat;
 import cn.reghao.autodop.common.machine.pojo.CpuUsage;
-import cn.reghao.autodop.common.machine.utils.AbstractCalculator;
-import cn.reghao.autodop.common.machine.utils.BeanConversion;
-import cn.reghao.autodop.common.machine.utils.CpuCalculator;
+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 com.google.gson.Gson;
 import lombok.extern.slf4j.Slf4j;
 
 import java.util.*;
 
 /**
+ * CPU 信息
+ *
  * @author reghao
  * @date 2019-10-25 13:12:36
  */
 @Slf4j
 public class Cpu {
-    private final String infoFile = "/proc/cpuinfo";
-    private final String statFile = "/proc/stat";
-    private final String whiteSpace = "\\s+";
-    private AbstractCalculator<CpuUsage> calculator;
-
-    public Cpu() {
-        this.calculator = new CpuCalculator();
-    }
+    private AbstractPercentageCalculator<CpuStat> calculator = new CpuPercentageCalculator();;
+    private TextFile textFile = new TextFile();
+    private int cpuCores = Runtime.getRuntime().availableProcessors();
 
     public List<CpuInfo> info() throws IllegalAccessException {
-        List<CpuInfo> infos = new ArrayList<>();
+        /*List<CpuInfo> infos = new ArrayList<>();
+        String infoFile = "/proc/cpuinfo";
         String[] infoArray = new TextFile().readFile(infoFile).split("\n\n");
         for (String info : infoArray) {
             String[] tmp = info.split("\n");
@@ -43,63 +40,48 @@ public class Cpu {
             infos.add(cpu);
         }
 
-        return infos;
-    }
-
-    public List<CpuUsage> stat() throws IllegalAccessException {
-        List<CpuUsage> usages = new ArrayList<>();
-        String stat = new TextFile().readFile(statFile).split("intr")[0];
-        String[] stats = stat.split(System.lineSeparator());
-
-        BeanConversion<CpuUsage> conversion = new BeanConversion<>();
-        for (int i = 0; i < stats.length; i++) {
-            String[] tmp = stats[i].split(whiteSpace);
-            String[] array = Arrays.copyOfRange(tmp, 1, tmp.length);
-
-            CpuUsage usage = new CpuUsage();
-            conversion.convert(array, usage);
-            usages.add(usage);
-        }
-
-        return usages;
+        return infos;*/
+        return null;
     }
 
     /**
-     * top 命令的 cpu 部分
-     * TODO 确保代码执行时间小于 CPU 频率
+     * CPU 使用率
      *
-     * @param interval 刷新间隔时间
+     * @param interval 采样时间,单位是 ms
      * @return
-     * @date 2019-10-28 下午9:24
+     * @date 2020-03-19 上午10:07
      */
-    public String topCpu(int interval) throws InterruptedException, IllegalAccessException {
-        List<CpuUsage> stats1 = stat();
-        Thread.sleep(   interval*1_000);
-        List<CpuUsage> stats2 = stat();
-
-        Map<String, Object> res = new LinkedHashMap<>();
-        for (int i = 0; i < stats1.size(); i++) {
-            CpuUsage[] array = new CpuUsage[2];
-            array[0] = stats1.get(i);
-            array[1] = stats2.get(i);
+    public CpuUsage usage(long interval) throws InterruptedException {
+        CpuStat stat1 = stat();
+        Thread.sleep(interval);
+        CpuStat stat2 = stat();
 
-            Object r = calculator.format(array);
-            if (i == 0) {
-                res.put("%cpu", r);
-            } else {
-                res.put("%cpu"+(i-1), r);
-            }
-        }
+        return (CpuUsage) calculator.format(stat1, stat2);
+    }
 
-        return new Gson().toJson(res);
+    private CpuStat stat() {
+        String statFile = "/proc/stat";
+        String[] stat = textFile.readFile(statFile).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 IllegalAccessException, InterruptedException {
+    public static void main(String[] args) throws InterruptedException {
         Cpu cpu = new Cpu();
-        cpu.topCpu(3);
-
-        for (;;) {
-            log.info("\n{}", cpu.topCpu(3));
-        }
+        log.info("cpu usage -> {}", cpu.usage(1000));
     }
 }

+ 17 - 8
common/src/main/java/cn/reghao/autodop/common/machine/Disk.java

@@ -1,9 +1,14 @@
 package cn.reghao.autodop.common.machine;
 
+import cn.reghao.autodop.common.machine.pojo.DiskStat;
 import cn.reghao.autodop.common.utils.text.TextFile;
 import lombok.extern.slf4j.Slf4j;
 
+import java.util.Arrays;
+
 /**
+ * 磁盘信息
+ *
  * @author reghao
  * @date 2019-10-25 13:21:31
  */
@@ -11,6 +16,7 @@ import lombok.extern.slf4j.Slf4j;
 public class Disk {
     private final String statFile = "/proc/diskstats";
     private final String whiteSpace = "\\s+";
+    private TextFile textFile = new TextFile();
 
     /**
      * df -h 命令
@@ -19,18 +25,21 @@ public class Disk {
      * @return
      * @date 2019-10-29 上午9:38
      */
-    public void df () {
-        String[] statArray = new TextFile().readFile(statFile).split("\n");
-        String[] tmp = new String[statArray.length];
-        for (int i = 0; i < statArray.length; i++) {
-            tmp[i] = statArray[i].replaceAll(whiteSpace, ",");
-        }
+    public void stat() {
+        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("");
+            log.info("");
+        }
     }
 
     public static void main(String[] args) {
         Disk disk = new Disk();
-        disk.df();
+        disk.stat();
     }
 }

+ 37 - 33
common/src/main/java/cn/reghao/autodop/common/machine/Memory.java

@@ -1,53 +1,57 @@
 package cn.reghao.autodop.common.machine;
 
-import cn.reghao.autodop.common.utils.text.TextFile;
-import cn.reghao.autodop.common.machine.utils.BeanConversion;
+import cn.reghao.autodop.common.machine.pojo.MemStat;
+import cn.reghao.autodop.common.machine.pojo.MemUsage;
+import cn.reghao.autodop.common.machine.utils.AbstractPercentageCalculator;
 import cn.reghao.autodop.common.machine.utils.MemCalculator;
-import cn.reghao.autodop.common.machine.pojo.MemInfo;
-import cn.reghao.autodop.common.machine.utils.AbstractCalculator;
-import com.google.gson.Gson;
+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 final String meminfo = "/proc/meminfo";
-    private AbstractCalculator<MemInfo> calculator;
+    private AbstractPercentageCalculator<MemStat> calculator = new MemCalculator();
+    private TextFile textFile = new TextFile();
 
-    public Memory() {
-        calculator = new MemCalculator();
+    public MemUsage usage() {
+        MemStat memStat = stat();
+        return (MemUsage) calculator.format(memStat, null);
     }
 
-    /**
-     * free -h 命令
-     *
-     * @param
-     * @return
-     * @date 2019-10-29 上午9:35
-     */
-    public String free() throws IllegalAccessException {
-        MemInfo memInfo = parse();
-        Object r = calculator.format(memInfo);
-        return new Gson().toJson(r);
-    }
-
-    private MemInfo parse() throws IllegalAccessException {
-        TextFile info = new TextFile();
-        String[] infos = info.readFile(meminfo)
-                .replace(" ", "").split(System.lineSeparator());
-
-        String[] tmp = new String[infos.length];
-        for (int i = 0; i < infos.length; i++) {
-            tmp[i] = infos[i].split(":")[1].split("kB")[0];
+    private MemStat stat() {
+        String[] info = textFile.readFile(meminfo).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));
         }
 
-        BeanConversion<MemInfo> conversion = new BeanConversion<>();
-        MemInfo memInfo = new MemInfo();
-        conversion.convert(tmp, memInfo);
+        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;
+    }
 
-        return memInfo;
+    public static void main(String[] args) {
+        Memory mem = new Memory();
+        mem.usage();
     }
 }

+ 57 - 4
common/src/main/java/cn/reghao/autodop/common/machine/Network.java

@@ -1,5 +1,8 @@
 package cn.reghao.autodop.common.machine;
 
+import cn.reghao.autodop.common.machine.contant.TcpState;
+import cn.reghao.autodop.common.machine.pojo.NetStat;
+import cn.reghao.autodop.common.machine.utils.IpAddressConversion;
 import cn.reghao.autodop.common.utils.text.TextFile;
 import lombok.extern.slf4j.Slf4j;
 
@@ -12,14 +15,15 @@ import java.util.Enumeration;
 import java.util.List;
 
 /**
- * 系统之网络信息
+ * 网络信息
  *
  * @author reghao
  * @date 2019-10-23 21:17:04
  */
 @Slf4j
 public class Network {
-    private final String tcpFile = "/proc/net/tcp";
+    private TextFile textFile = new TextFile();
+    private IpAddressConversion conversion = new IpAddressConversion();
 
     /**
      * 获取本机物理网卡 IPv4 地址(不获取 loopback 和虚拟接口的地址)
@@ -51,17 +55,66 @@ public class Network {
     }
 
     /**
-     * netstat 命令
+     * netstat -anp|grep '^tcp.*' 命令实现
      *
      * @param
      * @return
      * @date 2019-10-25 上午8:59
      */
     public void netstat() {
-        String tcp = new TextFile().readFile(tcpFile).split("intr")[0];
+        String tcpFile = "/proc/net/tcp";
+        String[] conns = textFile.readFile(tcpFile).split(System.lineSeparator());
+
+        List<NetStat> list = new ArrayList<>();
+        for (int i = 1; i < conns.length; i++) {
+            String[] fields = conns[i].split("\\s+");
+            NetStat netStat = new NetStat();
+            String localAddr = fields[2].split(":")[0];
+            String localPort = fields[2].split(":")[1];
+            netStat.setLocalAddr(conversion.dotDecimal(localAddr));
+            netStat.setLocalPort(Integer.valueOf(localPort, 16));
+
+            String remoteAddr = fields[3].split(":")[0];
+            String remotePort = fields[3].split(":")[1];
+            netStat.setRemoteAddr(conversion.dotDecimal(remoteAddr));
+            netStat.setRemotePort(Integer.valueOf(remotePort, 16));
+            netStat.setState(tcpState(Integer.valueOf(fields[4], 16)));
+
+            list.add(netStat);
+        }
+
         log.info("");
     }
 
+    private TcpState tcpState(int state) {
+        switch (state) {
+            case 1:
+                return TcpState.TCP_ESTABLISHED;
+            case 2:
+                return TcpState.TCP_SYN_SENT;
+            case 3:
+                return TcpState.TCP_SYN_RECV;
+            case 4:
+                return TcpState.TCP_FIN_WAIT1;
+            case 5:
+                return TcpState.TCP_FIN_WAIT2;
+            case 6:
+                return TcpState.TCP_TIME_WAIT;
+            case 7:
+                return TcpState.TCP_CLOSE;
+            case 8:
+                return TcpState.TCP_CLOSE_WAIT;
+            case 9:
+                return TcpState.TCP_LAST_ACK;
+            case 10:
+                return TcpState.TCP_LISTEN;
+            case 11:
+                return TcpState.TCP_CLOSING;
+            default:
+                return null;
+        }
+    }
+
     public static void main(String[] args) {
         Network network = new Network();
         network.netstat();

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

@@ -0,0 +1,70 @@
+package cn.reghao.autodop.common.machine;
+
+import cn.reghao.autodop.common.machine.pojo.ProcessInfo;
+import cn.reghao.autodop.common.utils.text.TextFile;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.File;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+/**
+ * 进程信息
+ *
+ * @author reghao
+ * @date 2019-10-25 09:49:09
+ */
+@Slf4j
+public class Process {
+    private final Pattern pattern = Pattern.compile("[0-9]*");
+    private TextFile textFile = new TextFile();
+
+    public void ps() {
+        long start = System.currentTimeMillis();
+        File procDir = new File("/proc");
+        List<ProcessInfo> infos = Arrays.stream(Objects.requireNonNull(procDir.listFiles()))
+                .parallel()
+                .filter(file -> pattern.matcher(file.getName()).matches())
+                .map(File::getAbsolutePath)
+                .map(this::info)
+                .collect(Collectors.toList());
+
+        log.info("costs {}ms", System.currentTimeMillis()-start);
+        log.info("");
+    }
+
+    private ProcessInfo info(String filepath) {
+        ProcessInfo info = new ProcessInfo();
+        try {
+            String[] stat = textFile.readFile(filepath + "/stat").split(" ");
+
+            info.setPid(Integer.parseInt(stat[0]));
+            info.setName(stat[1].replace("(", "").replace(")", ""));
+            info.setState(stat[3]);
+            info.setPpid(Integer.parseInt(stat[4]));
+            info.setUtime(Long.parseLong(stat[14]));
+            info.setStime(Long.parseLong(stat[15]));
+            info.setCutime(Long.parseLong(stat[16]));
+            info.setCstime(Long.parseLong(stat[17]));
+            info.setPriority(Integer.parseInt(stat[18]));
+            info.setNice(Integer.parseInt(stat[19]));
+            info.setNumThreads(Integer.parseInt(stat[20]));
+            info.setStarttime(Long.parseLong(stat[22]));
+            info.setVsize(stat[23]);
+            info.setRss(stat[24]);
+            info.setRsslim(stat[25]);
+            info.setDatetime(LocalDateTime.now().toString());
+
+            return info;
+        } catch (Exception ignore) {
+        }
+
+        return null;
+    }
+
+    public static void main(String[] args) {
+        new Process().ps();
+    }
+}

+ 0 - 46
common/src/main/java/cn/reghao/autodop/common/machine/ProcessState.java

@@ -1,46 +0,0 @@
-package cn.reghao.autodop.common.machine;
-
-import lombok.extern.slf4j.Slf4j;
-
-import java.io.File;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-/**
- * 进程状态
- *
- * @author reghao
- * @date 2019-10-25 09:49:09
- */
-@Slf4j
-public class ProcessState {
-    public void ps() {
-        Map<Integer, String> processMap = new LinkedHashMap<>();
-
-        File proc = new File("/proc");
-        for (File file : proc.listFiles()) {
-            try {
-                processMap.put(Integer.parseInt(file.getName()), file.getPath());
-            } catch (NumberFormatException e) {
-                //e.printStackTrace();
-            }
-        }
-
-        log.info("");
-    }
-
-    /**
-     * top 命令的进程部分
-     *
-     * @param
-     * @return
-     * @date 2019-10-29 上午9:35
-     */
-    public void topProc() {
-
-    }
-
-    public static void main(String[] args) {
-        new ProcessState().ps();
-    }
-}

+ 2 - 0
common/src/main/java/cn/reghao/autodop/common/machine/SysInfo.java

@@ -3,6 +3,8 @@ package cn.reghao.autodop.common.machine;
 import lombok.extern.slf4j.Slf4j;
 
 /**
+ * 操作系统信息
+ *
  * @author reghao
  * @date 2019-10-27 00:03:56
  */

+ 27 - 0
common/src/main/java/cn/reghao/autodop/common/machine/contant/TcpState.java

@@ -0,0 +1,27 @@
+package cn.reghao.autodop.common.machine.contant;
+
+/**
+ * TCP 状态
+ *
+ * @author reghao
+ * @date 2020-03-19 17:25:49
+ */
+public enum TcpState {
+    TCP_ESTABLISHED(1),
+    TCP_SYN_SENT(2),
+    TCP_SYN_RECV(3),
+    TCP_FIN_WAIT1(4),
+    TCP_FIN_WAIT2(5),
+    TCP_TIME_WAIT(6),
+    TCP_CLOSE(7),
+    TCP_CLOSE_WAIT(8),
+    TCP_LAST_ACK(9),
+    TCP_LISTEN(10),
+    TCP_CLOSING(11);
+
+    private int code;
+
+    TcpState(int code) {
+        this.code = code;
+    }
+}

+ 37 - 0
common/src/main/java/cn/reghao/autodop/common/machine/pojo/CpuStat.java

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

+ 10 - 25
common/src/main/java/cn/reghao/autodop/common/machine/pojo/CpuUsage.java

@@ -3,34 +3,19 @@ package cn.reghao.autodop.common.machine.pojo;
 import lombok.Data;
 
 /**
- * /proc/stat CPU 内容
+ * CPU 使用率
  *
  * @author reghao
- * @date 2019-10-25 14:40:53
+ * @date 2020-03-19 10:01:03
  */
 @Data
 public class CpuUsage {
-    private long user;
-    private long nice;
-    private long system;
-    private long idle;
-    private long iowait;
-    private long irq;
-    private long softirq;
-    private long steal;
-    private long guest;
-    private long guestnice;
-
-    public long total() {
-        return user + nice + system + idle + iowait + irq + softirq + steal + guest + guestnice;
-    }
-
-    public long us() {
-        //return user + nice;
-        return user;
-    }
-
-    public long sy() {
-        return system + irq + softirq;
-    }
+    private String us;
+    private String sy;
+    private String ni;
+    private String id;
+    private String wa;
+    private String hi;
+    private String si;
+    private String st;
 }

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

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

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

@@ -1,11 +0,0 @@
-package cn.reghao.autodop.common.machine.pojo;
-
-/**
- * /proc/diskstats 文件内容
- *
- * @author reghao
- * @date 2019-10-30 10:09:24
- */
-public class DiskStats {
-
-}

+ 2 - 0
common/src/main/java/cn/reghao/autodop/common/machine/pojo/DiskUsage.java

@@ -3,6 +3,8 @@ package cn.reghao.autodop.common.machine.pojo;
 import lombok.Data;
 
 /**
+ * 磁盘使用率
+ *
  * @author reghao
  * @date 2019-10-30 09:59:52
  */

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

@@ -3,13 +3,14 @@ package cn.reghao.autodop.common.machine.pojo;
 import lombok.Data;
 
 /**
+ * 内存状态
  * /proc/meminfo 文件内容
  *
  * @author reghao
  * @date 2019-10-26 22:21:18
  */
 @Data
-public class MemInfo {
+public class MemProfile {
     private long memTotal;
     private long memFree;
     private long memAvailable;

+ 22 - 0
common/src/main/java/cn/reghao/autodop/common/machine/pojo/MemStat.java

@@ -0,0 +1,22 @@
+package cn.reghao.autodop.common.machine.pojo;
+
+import lombok.Data;
+
+/**
+ * 内存状态
+ * /proc/meminfo 文件内容
+ *
+ * @author reghao
+ * @date 2019-10-26 22:21:18
+ */
+@Data
+public class MemStat {
+    private long memTotal;
+    private long memFree;
+    private long shared;
+    private long buffers;
+    private long cached;
+    private long memAvailable;
+    private long swapTotal;
+    private long swapFree;
+}

+ 8 - 2
common/src/main/java/cn/reghao/autodop/common/machine/vo/MemUsage.java → common/src/main/java/cn/reghao/autodop/common/machine/pojo/MemUsage.java

@@ -1,9 +1,9 @@
-package cn.reghao.autodop.common.machine.vo;
+package cn.reghao.autodop.common.machine.pojo;
 
 import lombok.Data;
 
 /**
- * view 使用的 内存信息
+ * 内存使用率
  * free -h 命令输出内容
  *
  * @author reghao
@@ -23,4 +23,10 @@ public class MemUsage {
     private String buffCachePercent;
     private String available;
     private String availablePercent;
+    private String swapTotal;
+    private String swapTotalPercent;
+    private String swapUsed;
+    private String swapUsedPercent;
+    private String swapFree;
+    private String swapFreePercent;
 }

+ 19 - 0
common/src/main/java/cn/reghao/autodop/common/machine/pojo/NetStat.java

@@ -0,0 +1,19 @@
+package cn.reghao.autodop.common.machine.pojo;
+
+import cn.reghao.autodop.common.machine.contant.TcpState;
+import lombok.Data;
+
+/**
+ * netstat 命令输出
+ *
+ * @author reghao
+ * @date 2019-10-25 08:55:25
+ */
+@Data
+public class NetStat {
+    private String localAddr;
+    private int localPort;
+    private String remoteAddr;
+    private int remotePort;
+    private TcpState state;
+}

+ 0 - 20
common/src/main/java/cn/reghao/autodop/common/machine/pojo/NetState.java

@@ -1,20 +0,0 @@
-package cn.reghao.autodop.common.machine.pojo;
-
-import lombok.Data;
-
-/**
- * netstat 命令输出
- *
- * @author reghao
- * @date 2019-10-25 08:55:25
- */
-@Data
-public class NetState {
-    private String protocol;
-    private int recvQueue;
-    private int sendQueue;
-    private String local;
-    private String foreign;
-    private String state;
-    private String process;
-}

+ 16 - 2
common/src/main/java/cn/reghao/autodop/common/machine/pojo/ProcessInfo.java

@@ -3,7 +3,7 @@ package cn.reghao.autodop.common.machine.pojo;
 import lombok.Data;
 
 /**
- * top 命令的输出
+ * 进程详细信息
  *
  * @author reghao
  * @date 2019-10-25 10:21:34
@@ -11,5 +11,19 @@ import lombok.Data;
 @Data
 public class ProcessInfo {
     private int pid;
-    private String user;
+    private String name;
+    private String state;
+    private int ppid;
+    private long utime;
+    private long stime;
+    private long cutime;
+    private long cstime;
+    private int priority;
+    private int nice;
+    private int numThreads;
+    private long starttime;
+    private String vsize;
+    private String rss;
+    private String rsslim;
+    private String datetime;
 }

+ 4 - 8
common/src/main/java/cn/reghao/autodop/common/machine/utils/AbstractCalculator.java → common/src/main/java/cn/reghao/autodop/common/machine/utils/AbstractPercentageCalculator.java

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

+ 0 - 32
common/src/main/java/cn/reghao/autodop/common/machine/utils/BeanConversion.java

@@ -1,32 +0,0 @@
-package cn.reghao.autodop.common.machine.utils;
-
-import java.lang.reflect.Field;
-
-/**
- * @author reghao
- * @date 2019-10-28 21:20:21
- */
-public class BeanConversion<T> {
-    public void convert(String[] array, T t) throws IllegalAccessException {
-        Field[] fields = t.getClass().getDeclaredFields();
-        for (int i = 0; i < array.length; i++) {
-            fields[i].setAccessible(true);
-            String name = fields[i].getGenericType().getTypeName();
-            switch (name) {
-                case "int":
-                    fields[i].set(t, Integer.parseInt(array[i]));
-                    break;
-                case "long":
-                    fields[i].set(t, Long.parseLong(array[i]));
-                    break;
-                case "double":
-                    fields[i].set(t, Double.parseDouble(array[i]));
-                    break;
-                case "java.lang.String":
-                    fields[i].set(t, array[i]);
-                    break;
-                default:
-            }
-        }
-    }
-}

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/machine/utils/ByteConvert.java

@@ -5,7 +5,7 @@ import lombok.extern.slf4j.Slf4j;
 import java.text.DecimalFormat;
 
 /**
- * 进制转换
+ * 字节转换
  *
  * @author reghao
  * @date 2019-10-26 22:39:23

+ 0 - 46
common/src/main/java/cn/reghao/autodop/common/machine/utils/CpuCalculator.java

@@ -1,46 +0,0 @@
-package cn.reghao.autodop.common.machine.utils;
-
-import cn.reghao.autodop.common.machine.vo.CpuStat;
-import cn.reghao.autodop.common.machine.pojo.CpuUsage;
-
-/**
- * @author reghao
- * @date 2019-10-29 13:03:43
- */
-public class CpuCalculator extends AbstractCalculator<CpuUsage> {
-    @Override
-    public Object format(CpuUsage[] usages) {
-        long total1 = usages[0].total();
-        long us1 = usages[0].us();
-        long sy1 = usages[0].sy();
-        long ni1 = usages[0].getNice();
-        long id1 = usages[0].getIdle();
-        long wa1 = usages[0].getIowait();
-        long hi1 = usages[0].getIrq();
-        long si1 = usages[0].getSoftirq();
-        long st1 = usages[0].getSteal();
-
-        long total2 = usages[1].total();
-        long us2 = usages[1].us();
-        long sy2 = usages[1].sy();
-        long ni2 = usages[1].getNice();
-        long id2 = usages[1].getIdle();
-        long wa2 = usages[1].getIowait();
-        long hi2 = usages[1].getIrq();
-        long si2 = usages[1].getSoftirq();
-        long st2 = usages[1].getSteal();
-
-        long total = total2 - total1;
-        CpuStat stat = new CpuStat();
-        stat.setUsPercent(divide(us2-us1, total));
-        stat.setSyPercent(divide(sy2-sy1, total));
-        stat.setNiPercent(divide(ni2-ni1, total));
-        stat.setIdPercent(divide(id2-id1, total));
-        stat.setWaPercent(divide(wa2-wa1, total));
-        stat.setHiPercent(divide(hi2-hi1, total));
-        stat.setSiPercent(divide(si2-si1, total));
-        stat.setStPercent(divide(st2-st1, total));
-
-        return stat;
-    }
-}

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

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

+ 3 - 2
common/src/main/java/cn/reghao/autodop/common/machine/utils/IpAddressConversion.java

@@ -1,12 +1,12 @@
 package cn.reghao.autodop.common.machine.utils;
 
 /**
+ * IP 地址转换
+ *
  * @author reghao
  * @date 2019-10-26 22:44:16
  */
 public class IpAddressConversion {
-    private final int size = 32;
-
     /**
      * 点分十进制格式转换为十进制
      *
@@ -35,6 +35,7 @@ public class IpAddressConversion {
         long decimal = Long.parseLong(hex, 16);
         String binary = Long.toBinaryString(decimal);
         int len = binary.length();
+        int size = 32;
         if (len != size) {
             StringBuilder sb = new StringBuilder();
 

+ 25 - 33
common/src/main/java/cn/reghao/autodop/common/machine/utils/MemCalculator.java

@@ -1,55 +1,47 @@
 package cn.reghao.autodop.common.machine.utils;
 
-import cn.reghao.autodop.common.machine.pojo.MemInfo;
-import cn.reghao.autodop.common.machine.vo.MemUsage;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
+import cn.reghao.autodop.common.machine.pojo.MemStat;
+import cn.reghao.autodop.common.machine.pojo.MemUsage;
 
 /**
  * @author reghao
  * @date 2019-10-29 13:03:43
  */
-public class MemCalculator extends AbstractCalculator<MemInfo> {
+public class MemCalculator extends AbstractPercentageCalculator<MemStat> {
     private ByteConvert convert = new ByteConvert();
 
     @Override
-    public Object format(MemInfo[] infos) {
+    public Object format(MemStat stat1, MemStat stat2) {
         MemUsage memUsage = new MemUsage();
-        memUsage.setTotal(convert.convert(infos[0].getMemTotal(), ByteType.KiB));
-
-        memUsage.setUsed(convert.convert(infos[0].getMemTotal()-infos[0].getMemAvailable(), ByteType.KiB));
-        memUsage.setUsedPercent(divide(infos[0].getMemTotal()-infos[0].getMemAvailable(), infos[0].getMemTotal()));
-
-        memUsage.setFree(convert.convert(infos[0].getMemFree(), ByteType.KiB));
-        memUsage.setFreePercent(divide(infos[0].getMemFree(), infos[0].getMemTotal()));
+        memUsage.setTotal(convert.convert(stat1.getMemTotal(), ByteType.KiB));
+        memUsage.setTotalPercent("100.00");
 
-        memUsage.setShared(null);
-        memUsage.setSharedPercent(null);
+        long used = stat1.getMemTotal()-stat1.getMemFree()-stat1.getBuffers()-stat1.getCached();
+        memUsage.setUsed(convert.convert(used, ByteType.KiB));
+        memUsage.setUsedPercent(divide(used, stat1.getMemTotal()));
 
-        memUsage.setBuffCache(convert.convert(infos[0].getBuffers()+infos[0].getCached(), ByteType.KiB));
-        memUsage.setBuffCachePercent(divide(infos[0].getBuffers()+infos[0].getCached(), infos[0].getMemTotal()));
+        memUsage.setFree(convert.convert(stat1.getMemFree(), ByteType.KiB));
+        memUsage.setFreePercent(divide(stat1.getMemFree(), stat1.getMemTotal()));
 
-        memUsage.setAvailable(convert.convert(infos[0].getMemAvailable(), ByteType.KiB));
-        memUsage.setAvailablePercent(divide(infos[0].getMemAvailable(), infos[0].getMemTotal()));
+        memUsage.setShared(convert.convert(stat1.getShared(), ByteType.KiB));
+        memUsage.setSharedPercent(divide(stat1.getShared(), stat1.getMemTotal()));
 
-        MemUsage swapUsage = new MemUsage();
-        swapUsage.setTotal(convert.convert(infos[0].getSwapTotal(), ByteType.KiB));
+        memUsage.setBuffCache(convert.convert(stat1.getBuffers()+stat1.getCached(), ByteType.KiB));
+        memUsage.setBuffCachePercent(divide(stat1.getBuffers()+stat1.getCached(), stat1.getMemTotal()));
 
-        swapUsage.setUsed(convert.convert(infos[0].getSwapCached(), ByteType.KiB));
-        swapUsage.setUsedPercent(divide(infos[0].getSwapCached(), infos[0].getSwapTotal()));
+        memUsage.setAvailable(convert.convert(stat1.getMemAvailable(), ByteType.KiB));
+        memUsage.setAvailablePercent(divide(stat1.getMemAvailable(), stat1.getMemTotal()));
 
-        swapUsage.setFree(convert.convert(infos[0].getSwapFree(), ByteType.KiB));
-        swapUsage.setFreePercent(divide(infos[0].getSwapFree(), infos[0].getSwapTotal()));
+        memUsage.setSwapTotal(convert.convert(stat1.getSwapTotal(), ByteType.KiB));
+        memUsage.setSwapTotalPercent("100.00");
 
-        Map<String, MemUsage> memMap = new LinkedHashMap<>();
-        memMap.put("mem", memUsage);
-        memMap.put("swap", swapUsage);
+        long swapUsed = stat1.getSwapTotal() - stat1.getSwapFree();
+        memUsage.setSwapUsed(convert.convert(swapUsed, ByteType.KiB));
+        memUsage.setSwapUsedPercent(divide(swapUsed, stat1.getSwapTotal()));
 
-        MemUsage[] array = new MemUsage[2];
-        array[0] = memUsage;
-        array[1] = swapUsage;
+        memUsage.setSwapFree(convert.convert(stat1.getSwapFree(), ByteType.KiB));
+        memUsage.setSwapFreePercent(divide(stat1.getSwapFree(), stat1.getSwapTotal()));
 
-        return memMap;
+        return memUsage;
     }
 }

+ 0 - 21
common/src/main/java/cn/reghao/autodop/common/machine/vo/CpuStat.java

@@ -1,21 +0,0 @@
-package cn.reghao.autodop.common.machine.vo;
-
-import lombok.Data;
-
-/**
- * view 使用的 CPU 状态信息
- *
- * @author reghao
- * @date 2019-10-29 23:17:31
- */
-@Data
-public class CpuStat {
-    private String usPercent;
-    private String syPercent;
-    private String niPercent;
-    private String idPercent;
-    private String waPercent;
-    private String hiPercent;
-    private String siPercent;
-    private String stPercent;
-}

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

@@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.*;
 @RestController
 public class IndexController {
     @GetMapping("/status")
-    public String restart() {
+    public String status() {
         return "OK";
     }
 }

+ 12 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/NodeController.java

@@ -1,15 +1,24 @@
 package cn.reghao.autodop.dmaster.machine;
 
-import com.google.gson.Gson;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * @author reghao
  * @date 2019-11-15 08:44:50
  */
 @Slf4j
-//@RestController
-//@RequestMapping("/api/node")
+@RestController
+@RequestMapping("/api/node")
 public class NodeController {
+    @ApiOperation(value = "")
+    @PostMapping("/status/send")
+    public String info() {
+        return null;
+    }
 }

+ 0 - 27
dmaster/src/main/java/cn/reghao/autodop/dmaster/orchestrate/pojo/AppBuildLog.java

@@ -1,27 +0,0 @@
-package cn.reghao.autodop.dmaster.orchestrate.pojo;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-
-import javax.persistence.Entity;
-import javax.persistence.Table;
-
-/**
- * 应用构建日志
- *
- * @author reghao
- * @date 2020-01-21 14:53:03
- */
-@Entity
-@Table
-@Data
-@EqualsAndHashCode(callSuper = false)
-@AllArgsConstructor
-@NoArgsConstructor
-public class AppBuildLog extends BaseEntity {
-    private String appId;
-    private long version;
-    private String appPath;
-}

+ 0 - 14
dmaster/src/main/java/cn/reghao/autodop/dmaster/orchestrate/repository/AppBuildLogRepository.java

@@ -1,14 +0,0 @@
-package cn.reghao.autodop.dmaster.orchestrate.repository;
-
-import cn.reghao.autodop.dmaster.orchestrate.pojo.AppBuildLog;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-/**
- * 应用构建日志
- *
- * @author reghao
- * @date 2020-01-21 14:53:03
- */
-public interface AppBuildLogRepository extends JpaRepository<AppBuildLog, Integer> {
-    AppBuildLog findByAppIdOrderByCreateTimeDesc(String appId);
-}