ソースを参照

将机器状态 MachineStat 存储到 Mongo

reghao 5 年 前
コミット
fca379ed10
54 ファイル変更367 行追加340 行削除
  1. 1 4
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/Machine.java
  2. 1 1
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/MachineInfo.java
  3. 1 2
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/MachineStat.java
  4. 1 1
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/cpu/Cpu.java
  5. 1 1
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/cpu/CpuPercentageCalculator.java
  6. 1 1
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/shell/MachineShell.java
  7. 1 1
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/shell/MachineShellArgs.java
  8. 3 3
      common/src/main/java/cn/reghao/autodop/common/mqtt/DefaultMqttClient.java
  9. 1 1
      common/src/main/java/cn/reghao/autodop/common/utils/AbstractPercentageCalculator.java
  10. 3 0
      common/src/main/java/cn/reghao/autodop/common/utils/MachineIdentity.java
  11. 23 25
      dagent/src/main/java/cn/reghao/autodop/dagent/utils/DagentLifecycle.java
  12. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/view/AppConfigPageController.java
  13. 2 5
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/view/BuildConfigPageController.java
  14. 7 7
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/AppBuildingCrudService.java
  15. 7 7
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/AppDeployingCrudService.java
  16. 8 8
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/AppRunningCrudService.java
  17. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/AppCrudService.java
  18. 8 7
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/BuildDeployDispatcher.java
  19. 6 13
      dmaster/src/main/java/cn/reghao/autodop/dmaster/common/orm/CrudOps.java
  20. 14 13
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/controller/MachinePageController.java
  21. 7 14
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/db/crud/MachineInfoCrudService.java
  22. 49 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/db/crud/MachineStatCrudService.java
  23. 0 42
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/db/crud/MachineStatusCrudService.java
  24. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/db/query/MachineInfoQuery.java
  25. 7 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/MachineHost.java
  26. 0 36
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/MachineStatus.java
  27. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/info/CpuInfo.java
  28. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/info/MachineInfo.java
  29. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/info/NetworkInfo.java
  30. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/info/OsInfo.java
  31. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/stat/DiskUsage.java
  32. 48 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/stat/MachineStat.java
  33. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/stat/MemoryUsage.java
  34. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/stat/StatusType.java
  35. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/repository/MachineInfoRepository.java
  36. 12 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/repository/MachineStatRepository.java
  37. 7 7
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/service/MachineService.java
  38. 2 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/vo/HostInfo.java
  39. 27 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/vo/MachineStatus.java
  40. 2 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/controller/MonitorController.java
  41. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/entity/MachineMonitor.java
  42. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/entity/MonitorJob.java
  43. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/service/AppMonitorServiceImpl.java
  44. 9 10
      dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/service/MachineMonitorServiceImpl.java
  45. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/service/MonitorListService.java
  46. 22 49
      dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/service/MonitorScheduler.java
  47. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/service/MonitorService.java
  48. 2 6
      dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/service/job/machine/MachineDiskUsageCheckJob.java
  49. 2 6
      dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/service/job/machine/MachineHeartbeatCheckJob.java
  50. 0 15
      dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/vo/AppHealthCheck.java
  51. 19 23
      dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/processor/DagentOpsProcessor.java
  52. 38 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/sys/db/AppRuntimeLogCrudService.java
  53. 8 9
      dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/lifecycle/DmasterLifecycle.java
  54. 1 0
      dmaster/src/main/resources/templates/machine/host.html

+ 1 - 4
common/src/main/java/cn/reghao/autodop/common/dagent/machine/Machine.java

@@ -1,6 +1,6 @@
 package cn.reghao.autodop.common.dagent.machine;
 
-import cn.reghao.autodop.common.dagent.machine.api.data.*;
+import cn.reghao.autodop.common.dagent.machine.shell.MachineShell;
 import cn.reghao.autodop.common.dagent.machine.cpu.Cpu;
 import cn.reghao.autodop.common.dagent.machine.disk.Disk;
 import cn.reghao.autodop.common.dagent.machine.memory.Memory;
@@ -24,7 +24,6 @@ public class Machine {
     private Network network;
     private Os os;
     private String machineId;
-    private String machineIpv4;
 
     public Machine(MachineIdentity machineIdentity, Cpu cpu, Memory memory, Disk disk, Network network, Os os)
             throws IOException {
@@ -34,7 +33,6 @@ public class Machine {
         this.network = network;
         this.os = os;
         this.machineId = machineIdentity.id();
-        this.machineIpv4 = machineIdentity.ipv4();
     }
 
     public MachineInfo registry() {
@@ -49,7 +47,6 @@ public class Machine {
     public MachineStat heartbeat() {
         MachineStat machineStat = new MachineStat();
         machineStat.setMachineId(machineId);
-        machineStat.setMachineIpv4(machineIpv4);
         machineStat.setOsStat(os.stat());
         machineStat.setNetworkStat(network.stat());
         machineStat.setCpuStat(null);

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

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.dagent.machine.api.data;
+package cn.reghao.autodop.common.dagent.machine;
 
 import cn.reghao.autodop.common.dagent.machine.cpu.CpuInfo;
 import cn.reghao.autodop.common.dagent.machine.network.NetworkInfo;

+ 1 - 2
common/src/main/java/cn/reghao/autodop/common/dagent/machine/api/data/MachineStat.java → common/src/main/java/cn/reghao/autodop/common/dagent/machine/MachineStat.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.dagent.machine.api.data;
+package cn.reghao.autodop.common.dagent.machine;
 
 import cn.reghao.autodop.common.dagent.machine.cpu.CpuStat;
 import cn.reghao.autodop.common.dagent.machine.disk.DiskInfo;
@@ -16,7 +16,6 @@ import java.util.List;
 @Data
 public class MachineStat {
     private String machineId;
-    private String machineIpv4;
     private OsStat osStat;
     private NetworkStat networkStat;
     private CpuStat cpuStat;

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/dagent/machine/cpu/Cpu.java

@@ -1,7 +1,7 @@
 package cn.reghao.autodop.common.dagent.machine.cpu;
 
 import cn.reghao.autodop.common.dagent.machine.LinuxProc;
-import cn.reghao.autodop.common.dagent.machine.AbstractPercentageCalculator;
+import cn.reghao.autodop.common.utils.AbstractPercentageCalculator;
 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/cpu/CpuPercentageCalculator.java

@@ -1,6 +1,6 @@
 package cn.reghao.autodop.common.dagent.machine.cpu;
 
-import cn.reghao.autodop.common.dagent.machine.AbstractPercentageCalculator;
+import cn.reghao.autodop.common.utils.AbstractPercentageCalculator;
 
 /**
  * @author reghao

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/dagent/machine/api/data/MachineShell.java → common/src/main/java/cn/reghao/autodop/common/dagent/machine/shell/MachineShell.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.dagent.machine.api.data;
+package cn.reghao.autodop.common.dagent.machine.shell;
 
 import lombok.Data;
 

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/dagent/machine/api/data/MachineShellArgs.java → common/src/main/java/cn/reghao/autodop/common/dagent/machine/shell/MachineShellArgs.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.dagent.machine.api.data;
+package cn.reghao.autodop.common.dagent.machine.shell;
 
 import lombok.Data;
 

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

@@ -10,7 +10,6 @@ import org.springframework.stereotype.Component;
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.UUID;
 
 /**
  * @author reghao
@@ -36,6 +35,7 @@ public class DefaultMqttClient implements AutoCloseable {
         MqttConnectOptions options = new MqttConnectOptions();
         options.setUserName(properties.getUsername());
         options.setPassword(properties.getPassword().toCharArray());
+        // 在服务端保存状态
         options.setCleanSession(false);
         // 自动重连
         options.setAutomaticReconnect(true);
@@ -51,11 +51,11 @@ public class DefaultMqttClient implements AutoCloseable {
     }
 
     public void putRecord(String msgId, AsyncMsg asyncMsg) {
-        this.pubSubRecorder.put(msgId, asyncMsg);
+        pubSubRecorder.put(msgId, asyncMsg);
     }
 
     public void removeRecord(String msgId) {
-        this.pubSubRecorder.remove(msgId);
+        pubSubRecorder.remove(msgId);
     }
 
     public boolean isConnected() {

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

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

+ 3 - 0
common/src/main/java/cn/reghao/autodop/common/utils/MachineIdentity.java

@@ -1,6 +1,7 @@
 package cn.reghao.autodop.common.utils;
 
 import cn.reghao.autodop.common.dagent.machine.network.NetworkInfo;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
 import java.io.*;
@@ -15,6 +16,7 @@ import java.util.List;
  * @author reghao
  * @date 2021-05-20 15:45:28
  */
+@Slf4j
 @Component
 public class MachineIdentity {
     public String id() throws IOException {
@@ -56,6 +58,7 @@ public class MachineIdentity {
                 }
             }
         } catch (SocketException e) {
+            log.error("{}", e.getMessage());
         }
         return ipv4List.isEmpty() ? "" : ipv4List.get(0);
     }

+ 23 - 25
dagent/src/main/java/cn/reghao/autodop/dagent/utils/DagentLifecycle.java

@@ -42,7 +42,6 @@ public class DagentLifecycle implements ApplicationRunner, DisposableBean {
     private DefaultMqttClient mqttClient;
     private MachineScheduler machineScheduler;
     private Machine machine;
-    private String topic;
 
     public DagentLifecycle(MachineIdentity machineIdentity,
                            DmasterMsgDispatcher dmasterMsgDispatcher,
@@ -55,50 +54,49 @@ public class DagentLifecycle implements ApplicationRunner, DisposableBean {
         this.mqttClient = mqttClient;
         this.machineScheduler = machineScheduler;
         this.machine = machine;
-        this.topic = "dagent/" + DagentLifecycle.MACHINE_ID;
         initLogger();
     }
 
-    @Override
-    public void run(ApplicationArguments args) throws Exception {
-        activate();
-    }
-
-    @Override
-    public void destroy() throws MqttException {
-        String payload = MACHINE_ID;
-        AsyncMsg asyncMsg = AsyncMsg.asyncMsg(MACHINE_ID, MessageType.dagentType.name(),
-                DagentOps.dagnetShutdown.name(), payload);
-        mqttClient.pub("dmaster", 1, JsonConverter.objectToJson(asyncMsg));
-        log.info("Dagent 停止...");
-    }
-
     private void initLogger() {
         List<Appender<ILoggingEvent>> appenders = new ArrayList<>();
         appenders.add(Appenders.mqttAppender(MACHINE_ID, MACHINE_IPV4, "dagent", mqttClient));
         LoggerConfig.initLogger(appenders);
     }
 
-    /**
-     * @date 2019-09-26 下午5:23
-     */
-    private void activate() throws Exception {
-        subAndPub();
-        scheduledJobs();
-        log.info("dagent 应用已启动...");
+    @Override
+    public void run(ApplicationArguments args) throws Exception {
+        subTopic();
+        pubDagentStart();
+        pubDagentHeartbeat();
     }
 
-    private void subAndPub() throws MqttException {
+    @Override
+    public void destroy() throws MqttException {
+        pubDagentShutdown();
+    }
+
+    private void subTopic() throws MqttException {
+        String topic = "dagent/" + DagentLifecycle.MACHINE_ID;
         mqttClient.sub(topic, dmasterMsgDispatcher);
+    }
 
+    private void pubDagentStart() throws MqttException {
         String payload = JsonConverter.objectToJson(machine.registry());
         AsyncMsg asyncMsg = AsyncMsg.asyncMsg(MACHINE_ID, MessageType.dagentType.name(),
                 DagentOps.dagentStart.name(), payload);
         mqttClient.pub("dmaster", 1, JsonConverter.objectToJson(asyncMsg));
     }
 
-    private void scheduledJobs() throws SchedulerException {
+    private void pubDagentHeartbeat() throws SchedulerException {
         machineScheduler.add(HeartbeatJob.class, "machine-heartbeat", "0/10 * * * * ?");
         machineScheduler.start();
     }
+
+    private void pubDagentShutdown() throws MqttException {
+        String payload = MACHINE_ID;
+        AsyncMsg asyncMsg = AsyncMsg.asyncMsg(MACHINE_ID, MessageType.dagentType.name(),
+                DagentOps.dagnetShutdown.name(), payload);
+        mqttClient.pub("dmaster", 1, JsonConverter.objectToJson(asyncMsg));
+        log.info("Dagent 停止...");
+    }
 }

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/view/AppConfigPageController.java

@@ -14,7 +14,7 @@ import cn.reghao.autodop.dmaster.app.entity.config.AppOrchestration;
 import cn.reghao.autodop.dmaster.app.entity.config.ProjOrchestration;
 import cn.reghao.autodop.dmaster.app.vo.KeyValue;
 import cn.reghao.autodop.dmaster.machine.db.query.MachineInfoQuery;
-import cn.reghao.autodop.dmaster.machine.entity.NetworkInfo;
+import cn.reghao.autodop.dmaster.machine.entity.info.NetworkInfo;
 import cn.reghao.autodop.dmaster.notification.repository.NotifyGroupRepository;
 import cn.reghao.autodop.dmaster.utils.db.PageList;
 import cn.reghao.autodop.dmaster.utils.db.PageSort;

+ 2 - 5
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/view/BuildConfigPageController.java

@@ -14,8 +14,7 @@ import cn.reghao.autodop.dmaster.app.entity.config.build.CompilerConfig;
 import cn.reghao.autodop.dmaster.app.entity.config.build.PackerConfig;
 import cn.reghao.autodop.dmaster.app.entity.config.build.RepoAuthConfig;
 import cn.reghao.autodop.dmaster.app.vo.KeyValue;
-import cn.reghao.autodop.dmaster.machine.db.crud.MachineStatusCrudService;
-import cn.reghao.autodop.dmaster.machine.entity.DiskUsage;
+import cn.reghao.autodop.dmaster.machine.entity.stat.DiskUsage;
 import cn.reghao.autodop.dmaster.utils.db.PageList;
 import cn.reghao.autodop.dmaster.utils.db.PageSort;
 import cn.reghao.autodop.dmaster.utils.lifecycle.DmasterLifecycle;
@@ -50,9 +49,7 @@ public class BuildConfigPageController {
     private Disk disk;
 
     public BuildConfigPageController(BuildDirQuery buildDirQuery, RepoAuthQuery repoAuthQuery,
-                                     CompilerQuery compilerQuery, PackerQuery packerQuery,
-                                     MachineStatusCrudService statusCrudService,
-                                     Disk disk) {
+                                     CompilerQuery compilerQuery, PackerQuery packerQuery, Disk disk) {
         this.buildDirQuery = buildDirQuery;
         this.repoAuthQuery = repoAuthQuery;
         this.compilerQuery = compilerQuery;

+ 7 - 7
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/AppBuildingCrudService.java

@@ -10,24 +10,24 @@ import org.springframework.stereotype.Service;
  * @date 2020-11-10 21:58:00
  */
 @Service
-public class AppBuildingCrudService implements CrudOps<AppBuilding> {
+public class AppBuildingCrudService {
     private AppBuildingRepository buildingRepository;
 
     public AppBuildingCrudService(AppBuildingRepository buildingRepository) {
         this.buildingRepository = buildingRepository;
     }
 
-    @Override
-    public AppBuilding insertOrUpdate(AppBuilding appBuilding) {
-        return null;
+    public void insertOrUpdate(AppBuilding appBuilding) {
     }
 
-    @Override
     public void delete(AppBuilding appBuilding) {
     }
 
-    @Override
-    public AppBuilding select(Integer id) {
+    public AppBuilding selectByPk(Integer id) {
+        return null;
+    }
+
+    public AppBuilding selectByUk(String uk) {
         return null;
     }
 }

+ 7 - 7
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/AppDeployingCrudService.java

@@ -10,24 +10,24 @@ import org.springframework.stereotype.Service;
  * @date 2020-11-10 21:58:00
  */
 @Service
-public class AppDeployingCrudService implements CrudOps<AppDeploying> {
+public class AppDeployingCrudService {
     private AppDeployingRepository deployingRepository;
 
     public AppDeployingCrudService(AppDeployingRepository deployingRepository) {
         this.deployingRepository = deployingRepository;
     }
 
-    @Override
-    public AppDeploying insertOrUpdate(AppDeploying appDeploying) {
-        return null;
+    public void insertOrUpdate(AppDeploying appDeploying) {
     }
 
-    @Override
     public void delete(AppDeploying appDeploying) {
     }
 
-    @Override
-    public AppDeploying select(Integer id) {
+    public AppDeploying selectByPk(Integer id) {
+        return null;
+    }
+
+    public AppDeploying selectByUk(String uk) {
         return null;
     }
 }

+ 8 - 8
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/AppRunningCrudService.java

@@ -10,24 +10,24 @@ import org.springframework.stereotype.Service;
  * @date 2020-11-10 21:58:00
  */
 @Service
-public class AppRunningCrudService implements CrudOps<AppRunning> {
+public class AppRunningCrudService {
     private AppRunningRepository runningRepository;
 
     public AppRunningCrudService(AppRunningRepository runningRepository) {
         this.runningRepository = runningRepository;
     }
 
-    @Override
-    public AppRunning insertOrUpdate(AppRunning appRunning) {
-        return null;
+    public void insertOrUpdate(AppRunning appRunning) {
     }
 
-    @Override
     public void delete(AppRunning appRunning) {
     }
-    
-    @Override
-    public AppRunning select(Integer id) {
+
+    public AppRunning selectByPk(Integer id) {
+        return null;
+    }
+
+    public AppRunning selectByUk(String id) {
         return null;
     }
 }

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/AppCrudService.java

@@ -13,7 +13,7 @@ import cn.reghao.autodop.dmaster.app.service.AppBuildDeployService;
 import cn.reghao.autodop.dmaster.app.vo.NewApp;
 import cn.reghao.autodop.dmaster.app.entity.config.AppOrchestration;
 import cn.reghao.autodop.dmaster.app.repository.config.AppOrchestrationRepository;
-import cn.reghao.autodop.dmaster.machine.entity.MachineInfo;
+import cn.reghao.autodop.dmaster.machine.entity.info.MachineInfo;
 import cn.reghao.autodop.dmaster.machine.repository.MachineInfoRepository;
 import org.springframework.cache.annotation.CacheConfig;
 import org.springframework.stereotype.Service;

+ 8 - 7
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/BuildDeployDispatcher.java

@@ -78,6 +78,7 @@ public class BuildDeployDispatcher {
             return appId + " 正在构建中";
         }
 
+        /* TODO 后面再使用缓存
         AppIntegrate appIntegrate = integrateMap.get(appId);
         if (appIntegrate != null) {
             if (reinitInterceptor.isAppChanged(appId)) {
@@ -85,17 +86,17 @@ public class BuildDeployDispatcher {
                 appIntegrate.reInit(app);
             }
         } else {
-            AppOrchestration app = appQuery.findByAppId(appId);
-            if (app == null) {
-                onBuilding.remove(appId);
-                throw new Exception(appId + " 不存在...");
-            }
-            appIntegrate = new AppIntegrate(app);
             integrateMap.put(appId, appIntegrate);
+        }*/
+
+        AppOrchestration app = appQuery.findByAppId(appId);
+        if (app == null) {
+            onBuilding.remove(appId);
+            throw new Exception(appId + " 不存在...");
         }
+        AppIntegrate appIntegrate = new AppIntegrate(app);
 
         BuildSupplier supplier = new BuildSupplier(appIntegrate);
-        AppOrchestration app = appIntegrate.app();
         List<NotifyGroup> notifyGroups = app.getNotifyGroups();
         log.info("开始异步构建 {}...", appId);
         CompletableFuture.supplyAsync(supplier, threadPool)

+ 6 - 13
dmaster/src/main/java/cn/reghao/autodop/dmaster/common/orm/CrudOps.java

@@ -12,21 +12,14 @@ import java.util.List;
  * @date 2020-06-25 01:34:27
  */
 public interface CrudOps<T> {
-    T insertOrUpdate(T t);
+    default void insert(T t) {}
+    default void update(T t) {}
+    void insertOrUpdate(T t);
     void delete(T t);
+    default void deleteByUk(String uk) {}
 
-    default T select(Integer id) {
-        return null;
-    }
-    default T selectByPk(String pk) {
-        return null;
-    }
-    default T selectByUk(String uk) {
-        return null;
-    }
-    default T selectByUniqueKey(String uniqueKey) {
-        return null;
-    }
+    T selectByPk(Integer pk);
+    T selectByUk(String uk);
     default Page<T> selectByPage(Pageable pageable) {
         return null;
     }

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

@@ -1,12 +1,13 @@
 package cn.reghao.autodop.dmaster.machine.controller;
 
 import cn.reghao.autodop.dmaster.machine.db.crud.MachineInfoCrudService;
-import cn.reghao.autodop.dmaster.machine.db.crud.MachineStatusCrudService;
-import cn.reghao.autodop.dmaster.machine.entity.MachineStatus;
+import cn.reghao.autodop.dmaster.machine.db.crud.MachineStatCrudService;
+import cn.reghao.autodop.dmaster.machine.entity.stat.MachineStat;
+import cn.reghao.autodop.dmaster.machine.entity.stat.MachineStat;
 import cn.reghao.autodop.dmaster.machine.service.MachineService;
 import cn.reghao.autodop.dmaster.machine.vo.HostInfo;
 import cn.reghao.autodop.dmaster.utils.db.PageList;
-import cn.reghao.autodop.dmaster.machine.entity.MachineInfo;
+import cn.reghao.autodop.dmaster.machine.entity.info.MachineInfo;
 import cn.reghao.autodop.dmaster.utils.db.PageSort;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -30,14 +31,14 @@ import org.springframework.web.bind.annotation.RequestParam;
 @RequestMapping("/machine")
 public class MachinePageController {
     private MachineInfoCrudService infoCrudService;
-    private MachineStatusCrudService statusCrudService;
+    private MachineStatCrudService statCrudService;
     private MachineService machineService;
 
     public MachinePageController(MachineInfoCrudService infoCrudService,
-                                 MachineStatusCrudService statusCrudService,
+                                 MachineStatCrudService statCrudService,
                                  MachineService machineService) {
         this.infoCrudService = infoCrudService;
-        this.statusCrudService = statusCrudService;
+        this.statCrudService = statCrudService;
         this.machineService = machineService;
     }
 
@@ -66,7 +67,7 @@ public class MachinePageController {
     @ApiOperation(value = "机器信息详情页面")
     @GetMapping("/host/detail/{machineId}")
     public String hostDetailPage(@PathVariable("machineId") String machineId, Model model) {
-        MachineInfo machineInfo = infoCrudService.selectByUniqueKey(machineId);
+        MachineInfo machineInfo = infoCrudService.selectByUk(machineId);
         model.addAttribute("machine", machineInfo);
         return "/machine/detail";
     }
@@ -80,9 +81,9 @@ public class MachinePageController {
     @ApiOperation(value = "内存使用详情页面")
     @GetMapping("/host/status/mem/{machineId}")
     public String memUsagePage(@PathVariable("machineId") String machineId, Model model) {
-        MachineStatus machineStatus = statusCrudService.selectByUniqueKey(machineId);
-        if (machineStatus != null) {
-            model.addAttribute("memoryUsage", machineStatus.getMemoryUsage());
+        MachineStat machineStat = statCrudService.selectByUk(machineId);
+        if (machineStat != null) {
+            model.addAttribute("memoryUsage", machineStat.getMemoryUsage());
         }
         return "/machine/memusage";
     }
@@ -90,9 +91,9 @@ public class MachinePageController {
     @ApiOperation(value = "磁盘使用详情页面")
     @GetMapping("/host/status/disk/{machineId}")
     public String diskUsagePage(@PathVariable("machineId") String machineId, Model model) {
-        MachineStatus machineStatus = statusCrudService.selectByUniqueKey(machineId);
-        if (machineStatus != null) {
-            model.addAttribute("diskUsages", machineStatus.getDiskUsages());
+        MachineStat machineStat = statCrudService.selectByUk(machineId);
+        if (machineStat != null) {
+            model.addAttribute("diskUsages", machineStat.getDiskUsages());
         }
         return "/machine/diskusage";
     }

+ 7 - 14
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/db/crud/MachineInfoCrudService.java

@@ -1,12 +1,9 @@
 package cn.reghao.autodop.dmaster.machine.db.crud;
 
-import cn.reghao.autodop.dmaster.machine.entity.MachineInfo;
+import cn.reghao.autodop.dmaster.machine.entity.info.MachineInfo;
 import cn.reghao.autodop.dmaster.machine.repository.MachineInfoRepository;
 import cn.reghao.autodop.dmaster.common.orm.CrudOps;
 import org.springframework.cache.annotation.CacheConfig;
-import org.springframework.cache.annotation.CacheEvict;
-import org.springframework.cache.annotation.CachePut;
-import org.springframework.cache.annotation.Cacheable;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
@@ -20,15 +17,14 @@ import java.util.Optional;
  */
 @CacheConfig(cacheNames = {"caffeineCacheManager"})
 @Service
-public class MachineInfoCrudService implements CrudOps<MachineInfo> {
+public class MachineInfoCrudService {
     private MachineInfoRepository infoRepository;
 
     public MachineInfoCrudService(MachineInfoRepository infoRepository) {
         this.infoRepository = infoRepository;
     }
 
-    @Override
-    public MachineInfo insertOrUpdate(MachineInfo machineInfo) {
+    public void insertOrUpdate(MachineInfo machineInfo) {
         // 重复 machineId 则更新
         MachineInfo infoEntity = infoRepository.findByMachineId(machineInfo.getMachineId());
         if (infoEntity != null) {
@@ -36,26 +32,23 @@ public class MachineInfoCrudService implements CrudOps<MachineInfo> {
             machineInfo.setCreateTime(infoEntity.getCreateTime());
             machineInfo.setUpdateTime(LocalDateTime.now());
         }
-        return infoRepository.save(machineInfo);
+        infoRepository.save(machineInfo);
     }
 
-    @Override
     public void delete(MachineInfo machineInfo) {
+        infoRepository.delete(machineInfo);
     }
 
-    @Override
-    public MachineInfo select(Integer id) {
+    public MachineInfo selectByPk(Integer id) {
         Optional<MachineInfo> optional = infoRepository.findById(id);
         return optional.orElse(null);
     }
 
-    @Override
-    public MachineInfo selectByUniqueKey(String machineId) {
+    public MachineInfo selectByUk(String machineId) {
         return infoRepository.findByMachineId(machineId);
     }
 
     //@Cacheable(cacheNames = {"machineInfos"}, key = "T(String).valueOf(#pageable.pageNumber).concat('-').concat(#pageable.pageSize)")
-    @Override
     public Page<MachineInfo> selectByPage(Pageable pageable) {
         return infoRepository.findByIsDeleteFalse(pageable);
     }

+ 49 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/db/crud/MachineStatCrudService.java

@@ -0,0 +1,49 @@
+package cn.reghao.autodop.dmaster.machine.db.crud;
+
+import cn.reghao.autodop.dmaster.machine.entity.stat.MachineStat;
+import cn.reghao.autodop.dmaster.machine.repository.MachineStatRepository;
+import com.github.benmanes.caffeine.cache.Cache;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+
+/**
+ * TODO 系统启动时将所有数据放入缓存,系统结束前将所有数据持久化到数据库
+ *
+ * @author reghao
+ * @date 2021-06-15 16:29:18
+ */
+@Service
+public class MachineStatCrudService {
+    private Cache<String, Object> cache;
+    private MachineStatRepository statRepository;
+
+    public MachineStatCrudService(Cache<String, Object> cache,
+                                  MachineStatRepository statRepository) {
+        this.cache = cache;
+        this.statRepository = statRepository;
+    }
+
+    public void insertOrUpdate(MachineStat machineStat) {
+        MachineStat stat = statRepository.findByMachineId(machineStat.getMachineId());
+        if (stat != null) {
+            machineStat.setId(stat.getId());
+            machineStat.setCreateTime(stat.getCreateTime());
+            machineStat.setUpdateTime(LocalDateTime.now());
+        }
+        statRepository.save(machineStat);
+        //cache.put(machineStat.getMachineId(), machineStat);
+    }
+
+    public void delete(MachineStat machineStat) {
+    }
+
+    public MachineStat selectByPk(Integer id) {
+        return null;
+    }
+
+    public MachineStat selectByUk(String machineId) {
+        return statRepository.findByMachineId(machineId);
+        //return (MachineStat) cache.getIfPresent(machineId);
+    }
+}

+ 0 - 42
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/db/crud/MachineStatusCrudService.java

@@ -1,42 +0,0 @@
-package cn.reghao.autodop.dmaster.machine.db.crud;
-
-import cn.reghao.autodop.dmaster.common.orm.CrudOps;
-import cn.reghao.autodop.dmaster.machine.entity.MachineStatus;
-import com.github.benmanes.caffeine.cache.Cache;
-import org.springframework.cache.annotation.CacheConfig;
-import org.springframework.stereotype.Service;
-
-/**
- * TODO 系统启动时将所有数据放入缓存,系统结束前将所有数据持久化到数据库
- *
- * @author reghao
- * @date 2021-06-15 16:29:18
- */
-@Service
-public class MachineStatusCrudService implements CrudOps<MachineStatus> {
-    private Cache<String, Object> cache;
-
-    public MachineStatusCrudService(Cache<String, Object> cache) {
-        this.cache = cache;
-    }
-
-    @Override
-    public MachineStatus insertOrUpdate(MachineStatus machineStatus) {
-        cache.put(machineStatus.getMachineId(), machineStatus);
-        return null;
-    }
-
-    @Override
-    public void delete(MachineStatus machineStatus) {
-    }
-
-    @Override
-    public MachineStatus select(Integer id) {
-        return null;
-    }
-
-    @Override
-    public MachineStatus selectByUniqueKey(String machineId) {
-        return (MachineStatus) cache.getIfPresent(machineId);
-    }
-}

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/db/query/MachineInfoQuery.java

@@ -1,6 +1,6 @@
 package cn.reghao.autodop.dmaster.machine.db.query;
 
-import cn.reghao.autodop.dmaster.machine.entity.MachineInfo;
+import cn.reghao.autodop.dmaster.machine.entity.info.MachineInfo;
 import cn.reghao.autodop.dmaster.machine.repository.MachineInfoRepository;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;

+ 7 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/Host.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/MachineHost.java

@@ -1,10 +1,12 @@
 package cn.reghao.autodop.dmaster.machine.entity;
 
 import cn.reghao.autodop.dmaster.common.orm.BaseEntity;
+import cn.reghao.autodop.dmaster.machine.entity.info.MachineInfo;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import javax.persistence.Entity;
+import javax.persistence.OneToOne;
 
 /**
  * @author reghao
@@ -13,7 +15,10 @@ import javax.persistence.Entity;
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Entity
-public class Host extends BaseEntity<Integer> {
-    private String machineId;
+public class MachineHost extends BaseEntity<Integer> {
+    @OneToOne(optional = false)
+    private MachineInfo machineInfo;
     private String env;
+    private String status;
+    // TODO 根据机器所属的地区,机房等维度来分组
 }

+ 0 - 36
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/MachineStatus.java

@@ -1,36 +0,0 @@
-package cn.reghao.autodop.dmaster.machine.entity;
-
-import cn.reghao.autodop.common.dagent.machine.api.data.MachineStat;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2020-12-25 17:53:15
- */
-@Data
-public class MachineStatus {
-    private String machineId;
-    private String machineIpv4;
-    private String status;
-    private LocalDateTime lastCheck;
-    private Integer tcpConnNum;
-    private MemoryUsage memoryUsage;
-    private List<DiskUsage> diskUsages;
-
-    public MachineStatus(MachineStat machineStat) {
-        this.machineId = machineStat.getMachineId();
-        this.machineIpv4 = machineStat.getMachineIpv4();
-        this.status = StatusType.UP.name();
-        this.lastCheck = LocalDateTime.now();
-    }
-
-    public MachineStatus(String machineId, String machineIpv4) {
-        this.machineId = machineId;
-        this.machineIpv4 = machineIpv4;
-        this.status = StatusType.UP.name();
-        this.lastCheck = LocalDateTime.now();
-    }
-}

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/CpuInfo.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/info/CpuInfo.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.dmaster.machine.entity;
+package cn.reghao.autodop.dmaster.machine.entity.info;
 
 import lombok.Data;
 

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/MachineInfo.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/info/MachineInfo.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.dmaster.machine.entity;
+package cn.reghao.autodop.dmaster.machine.entity.info;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/NetworkInfo.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/info/NetworkInfo.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.dmaster.machine.entity;
+package cn.reghao.autodop.dmaster.machine.entity.info;
 
 import lombok.Data;
 

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/OsInfo.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/info/OsInfo.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.dmaster.machine.entity;
+package cn.reghao.autodop.dmaster.machine.entity.info;
 
 import lombok.Data;
 

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/DiskUsage.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/stat/DiskUsage.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.dmaster.machine.entity;
+package cn.reghao.autodop.dmaster.machine.entity.stat;
 
 import cn.reghao.autodop.common.dagent.machine.disk.DiskInfo;
 import cn.reghao.autodop.common.utils.ByteConverter;

+ 48 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/stat/MachineStat.java

@@ -0,0 +1,48 @@
+package cn.reghao.autodop.dmaster.machine.entity.stat;
+
+import cn.reghao.autodop.common.dagent.machine.cpu.CpuStat;
+import cn.reghao.autodop.common.dagent.machine.disk.DiskInfo;
+import cn.reghao.autodop.common.dagent.machine.memory.MemoryInfo;
+import cn.reghao.autodop.common.dagent.machine.network.NetworkStat;
+import cn.reghao.autodop.common.dagent.machine.os.OsStat;
+import cn.reghao.autodop.dmaster.common.orm.BaseDocument;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.time.LocalDateTime;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2020-12-25 17:53:15
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Document("MachineStat")
+public class MachineStat extends BaseDocument {
+    private String machineId;
+    private OsStat osStat;
+    private NetworkStat networkStat;
+    private CpuStat cpuStat;
+    private MemoryInfo memoryInfo;
+    private List<DiskInfo> diskInfos;
+    private String status;
+    private LocalDateTime lastCheck;
+    private Integer tcpConnNum;
+
+    public MachineStat(String machineId) {
+        this.machineId = machineId;
+        this.status = StatusType.UP.name();
+        this.lastCheck = LocalDateTime.now();
+    }
+
+    public MemoryUsage getMemoryUsage() {
+        return null;
+    }
+
+    public List<DiskUsage> getDiskUsages() {
+        return Collections.emptyList();
+    }
+}

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/MemoryUsage.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/stat/MemoryUsage.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.dmaster.machine.entity;
+package cn.reghao.autodop.dmaster.machine.entity.stat;
 
 import lombok.Data;
 

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/StatusType.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/entity/stat/StatusType.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.dmaster.machine.entity;
+package cn.reghao.autodop.dmaster.machine.entity.stat;
 
 /**
  * @author reghao

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/repository/MachineInfoRepository.java

@@ -1,6 +1,6 @@
 package cn.reghao.autodop.dmaster.machine.repository;
 
-import cn.reghao.autodop.dmaster.machine.entity.MachineInfo;
+import cn.reghao.autodop.dmaster.machine.entity.info.MachineInfo;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;

+ 12 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/repository/MachineStatRepository.java

@@ -0,0 +1,12 @@
+package cn.reghao.autodop.dmaster.machine.repository;
+
+import cn.reghao.autodop.dmaster.machine.entity.stat.MachineStat;
+import org.springframework.data.mongodb.repository.MongoRepository;
+
+/**
+ * @author reghao
+ * @date 2020-01-21 14:53:03
+ */
+public interface MachineStatRepository extends MongoRepository<MachineStat, String> {
+    MachineStat findByMachineId(String machineId);
+}

+ 7 - 7
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/service/MachineService.java

@@ -1,8 +1,7 @@
 package cn.reghao.autodop.dmaster.machine.service;
 
-import cn.reghao.autodop.dmaster.machine.db.crud.MachineStatusCrudService;
-import cn.reghao.autodop.dmaster.machine.entity.MachineInfo;
-import cn.reghao.autodop.dmaster.machine.entity.MachineStatus;
+import cn.reghao.autodop.dmaster.machine.db.crud.MachineStatCrudService;
+import cn.reghao.autodop.dmaster.machine.entity.info.MachineInfo;
 import cn.reghao.autodop.dmaster.machine.vo.HostInfo;
 import org.springframework.stereotype.Service;
 
@@ -12,14 +11,15 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class MachineService {
-    private MachineStatusCrudService machineStatusCrudService;
+    private MachineStatCrudService machineStatusCrudService;
 
-    public MachineService(MachineStatusCrudService machineStatusCrudService) {
+    public MachineService(MachineStatCrudService machineStatusCrudService) {
         this.machineStatusCrudService = machineStatusCrudService;
     }
 
     public HostInfo hostInfo(MachineInfo machineInfo) {
-        MachineStatus machineStatus = machineStatusCrudService.selectByUniqueKey(machineInfo.getMachineId());
-        return machineStatus != null ? new HostInfo(machineInfo, machineStatus) : new HostInfo(machineInfo);
+        /*MachineStat machineStatus = machineStatusCrudService.selectByUk(machineInfo.getMachineId());
+        return machineStatus != null ? new HostInfo(machineInfo, machineStatus) : new HostInfo(machineInfo);*/
+        return null;
     }
 }

+ 2 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/vo/HostInfo.java

@@ -1,8 +1,7 @@
 package cn.reghao.autodop.dmaster.machine.vo;
 
-import cn.reghao.autodop.dmaster.machine.entity.MachineInfo;
-import cn.reghao.autodop.dmaster.machine.entity.MachineStatus;
-import cn.reghao.autodop.dmaster.machine.entity.NetworkInfo;
+import cn.reghao.autodop.dmaster.machine.entity.info.MachineInfo;
+import cn.reghao.autodop.dmaster.machine.entity.info.NetworkInfo;
 import lombok.Data;
 
 import java.time.LocalDateTime;

+ 27 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/vo/MachineStatus.java

@@ -0,0 +1,27 @@
+package cn.reghao.autodop.dmaster.machine.vo;
+
+import cn.reghao.autodop.common.dagent.machine.disk.DiskInfo;
+import cn.reghao.autodop.common.dagent.machine.memory.MemoryInfo;
+import cn.reghao.autodop.dmaster.machine.entity.stat.DiskUsage;
+import cn.reghao.autodop.dmaster.machine.entity.stat.MemoryUsage;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2020-12-25 17:53:15
+ */
+@Data
+public class MachineStatus {
+    private String machineId;
+    private String machineIpv4;
+    private String status;
+    private LocalDateTime lastCheck;
+    private Integer tcpConnNum;
+    private MemoryUsage memoryUsage;
+    private List<DiskUsage> diskUsages;
+    private MemoryInfo memoryInfo;
+    private List<DiskInfo> diskInfos;
+}

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

@@ -71,11 +71,11 @@ public class MonitorController {
         switch (MonitorType.valueOf(monitorType)) {
             case machine:
                 MachineMonitor machineMonitor = machineMonitorRepository.findById(id).orElse(null);
-                machineMonitorService.addJob(machineMonitor, monitorJob);
+                machineMonitorService.addOrModifyJob(machineMonitor, monitorJob);
                 break;
             case app:
                 AppMonitor appMonitor = appMonitorRepository.findById(id).orElse(null);
-                appMonitorService.addJob(appMonitor, monitorJob);
+                appMonitorService.addOrModifyJob(appMonitor, monitorJob);
                 break;
             default:
         }

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/entity/MachineMonitor.java

@@ -1,6 +1,6 @@
 package cn.reghao.autodop.dmaster.monitor.entity;
 
-import cn.reghao.autodop.dmaster.machine.entity.MachineInfo;
+import cn.reghao.autodop.dmaster.machine.entity.info.MachineInfo;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/entity/MonitorJob.java

@@ -17,7 +17,7 @@ import javax.validation.constraints.NotBlank;
 @Embeddable
 public class MonitorJob {
     private String jobId;
-    @NotBlank(message = "任务 ID 不能为空白字符串")
+    @NotBlank(message = "任务类名不能为空白字符串")
     private String jobClassName;
     @NotBlank(message = "CRON 表达式不能为空白字符串")
     private String cronExp;

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/service/AppMonitorServiceImpl.java

@@ -32,7 +32,7 @@ public class AppMonitorServiceImpl implements MonitorService<AppMonitor> {
     }
 
     @Override
-    public void addJob(AppMonitor monitor, MonitorJob monitorJob) {
+    public void addOrModifyJob(AppMonitor monitor, MonitorJob monitorJob) {
     }
 
     @Override

+ 9 - 10
dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/service/MachineMonitorServiceImpl.java

@@ -34,7 +34,7 @@ public class MachineMonitorServiceImpl implements MonitorService<MachineMonitor>
     }
 
     @Override
-    public synchronized void addJob(MachineMonitor monitor, MonitorJob monitorJob) {
+    public synchronized void addOrModifyJob(MachineMonitor monitor, MonitorJob monitorJob) {
         Map<String, MonitorJob> jobMap = monitor.getJobMap();
         String jobId = String.format("%s-%s", monitor.getMachineId(), monitorJob.getJobClassName());
         MonitorJob job = jobMap.get(jobId);
@@ -44,11 +44,10 @@ public class MachineMonitorServiceImpl implements MonitorService<MachineMonitor>
                 monitorJob.setJobId(jobId);
                 monitorJob.setEnable(true);
                 jobMap.put(jobId, monitorJob);
-
-                int runningJobs = monitor.getRunningJobs();
-                monitor.setRunningJobs(runningJobs+1);
                 int totalJobs = monitor.getTotalJobs();
                 monitor.setTotalJobs(totalJobs+1);
+                int runningJobs = monitor.getRunningJobs();
+                monitor.setRunningJobs(runningJobs+1);
 
                 monitorScheduler.addMachineMonitorJob(monitor, jobId);
             } else {
@@ -56,7 +55,7 @@ public class MachineMonitorServiceImpl implements MonitorService<MachineMonitor>
                 job.setCronExp(monitorJob.getCronExp());
                 monitorScheduler.modifyJob(jobId, monitorJob.getCronExp());
             }
-            // TODO 两个操作的状态应该保持一致
+            // TODO 数据库和 Scheduler 中的数据应该总是保持一致
             machineMonitorRepository.save(monitor);
         } catch (SchedulerException | IOException e) {
             log.error("{}", e.getMessage());
@@ -68,15 +67,15 @@ public class MachineMonitorServiceImpl implements MonitorService<MachineMonitor>
         Map<String, MonitorJob> map = monitor.getJobMap();
         MonitorJob monitorJob = map.get(jobId);
         map.remove(jobId);
+        int totalJobs = monitor.getTotalJobs();
+        monitor.setTotalJobs(totalJobs-1);
         if (monitorJob.getEnable()) {
             int runningJobs = monitor.getRunningJobs();
             monitor.setRunningJobs(runningJobs-1);
         }
-        int totalJobs = monitor.getTotalJobs();
-        monitor.setTotalJobs(totalJobs-1);
 
         try {
-            monitorScheduler.delete(jobId);
+            monitorScheduler.deleteJob(jobId);
             machineMonitorRepository.save(monitor);
         } catch (SchedulerException e) {
             log.error("{}", e.getMessage());
@@ -95,7 +94,7 @@ public class MachineMonitorServiceImpl implements MonitorService<MachineMonitor>
             try {
                 boolean isExist = monitorScheduler.isJobExist(jobId);
                 if (isExist) {
-                    monitorScheduler.resume(monitorJob.getJobId());
+                    monitorScheduler.resumeJob(monitorJob.getJobId());
                 } else {
                     monitorScheduler.addMachineMonitorJob(monitor, jobId);
                 }
@@ -116,7 +115,7 @@ public class MachineMonitorServiceImpl implements MonitorService<MachineMonitor>
             monitor.setRunningJobs(runningJobs-1);
 
             try {
-                monitorScheduler.pause(monitorJob.getJobId());
+                monitorScheduler.pauseJob(monitorJob.getJobId());
                 machineMonitorRepository.save(monitor);
             } catch (SchedulerException e) {
                 log.error("{}", e.getMessage());

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/service/MonitorListService.java

@@ -2,7 +2,7 @@ package cn.reghao.autodop.dmaster.monitor.service;
 
 import cn.reghao.autodop.dmaster.app.entity.AppRunning;
 import cn.reghao.autodop.dmaster.app.repository.AppRunningRepository;
-import cn.reghao.autodop.dmaster.machine.entity.MachineInfo;
+import cn.reghao.autodop.dmaster.machine.entity.info.MachineInfo;
 import cn.reghao.autodop.dmaster.machine.repository.MachineInfoRepository;
 import cn.reghao.autodop.dmaster.monitor.entity.AppMonitor;
 import cn.reghao.autodop.dmaster.monitor.entity.MachineMonitor;

+ 22 - 49
dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/service/MonitorScheduler.java

@@ -3,7 +3,7 @@ package cn.reghao.autodop.dmaster.monitor.service;
 import cn.reghao.autodop.common.http.DefaultWebRequest;
 import cn.reghao.autodop.common.http.WebRequest;
 import cn.reghao.autodop.dmaster.DmasterApplication;
-import cn.reghao.autodop.dmaster.machine.db.crud.MachineStatusCrudService;
+import cn.reghao.autodop.dmaster.machine.db.crud.MachineStatCrudService;
 import cn.reghao.autodop.dmaster.app.repository.AppRunningRepository;
 import cn.reghao.autodop.dmaster.monitor.entity.AppMonitor;
 import cn.reghao.autodop.dmaster.monitor.entity.MachineMonitor;
@@ -34,15 +34,15 @@ public class MonitorScheduler {
     private Scheduler scheduler;
     private NotifyService notifyService;
     private AppRunningRepository runningRepository;
-    private MachineStatusCrudService statusCrudService;
+    private MachineStatCrudService statusCrudService;
     private WebRequest webRequest;
     private MachineMonitorRepository machineMonitorRepository;
     private AppMonitorRepository appMonitorRepository;
-    private PackageScanner packageScanner = new PackageScanner();
+    private PackageScanner packageScanner;
 
     public MonitorScheduler(NotifyService notifyService,
                             AppRunningRepository runningRepository,
-                            MachineStatusCrudService statusCrudService,
+                            MachineStatCrudService statusCrudService,
                             MachineMonitorRepository machineMonitorRepository,
                             AppMonitorRepository appMonitorRepository) throws SchedulerException {
         this.scheduler = StdSchedulerFactory.getDefaultScheduler();
@@ -52,9 +52,12 @@ public class MonitorScheduler {
         this.webRequest = new DefaultWebRequest();
         this.machineMonitorRepository = machineMonitorRepository;
         this.appMonitorRepository = appMonitorRepository;
+        this.packageScanner = new PackageScanner();
     }
 
     /**
+     * TODO 系统启动时启用所有存在的任务
+     *
      * @param
      * @return
      * @date 2021-06-24 上午10:22
@@ -78,14 +81,12 @@ public class MonitorScheduler {
                 }
             }
         }
-        // TODO 系统启动时启用所有存在的任务
         scheduler.start();
     }
 
-    public void pauseScheduler() throws SchedulerException {
-        if (!scheduler.isShutdown()) {
-            scheduler.pauseAll();
-        }
+    public void updateNotifyGroup(String jobId, List<NotifyGroup> notifyGroups) throws SchedulerException {
+        JobDetail jobDetail = scheduler.getJobDetail(JobKey.jobKey(jobId));
+        JobDataMap jobDataMap = jobDetail.getJobDataMap();
     }
 
     public void addMachineMonitorJob(MachineMonitor machineMonitor, String jobId)
@@ -100,7 +101,7 @@ public class MonitorScheduler {
         jobDataMap.put("notifyGroups", notifyGroups);
         jobDataMap.put("machineId", machineMonitor.getMachineId());
         jobDataMap.put("statusCrudService", statusCrudService);
-        addAndStart(jobClass, jobId, cronExp, jobDataMap);
+        addJob(jobId, cronExp, jobClass, jobDataMap);
     }
 
     private void addMachineMonitorJob(MachineMonitor machineMonitor, MonitorJob monitorJob)
@@ -114,41 +115,24 @@ public class MonitorScheduler {
         jobDataMap.put("notifyGroups", notifyGroups);
         jobDataMap.put("machineId", machineMonitor.getMachineId());
         jobDataMap.put("statusCrudService", statusCrudService);
-        addAndStart(jobClass, monitorJob.getJobId(), cronExp, jobDataMap);
-    }
-
-    public void addAppMonitorJob(AppMonitor appMonitor, String jobId) throws SchedulerException, IOException {
-        MonitorJob monitorJob = appMonitor.getJobMap().get(jobId);
-        List<NotifyGroup> notifyGroups = appMonitor.getNotifyGroups();
-        String cronExp = monitorJob.getCronExp();
-        Class jobClass = findClassBySimpleName(monitorJob.getJobClassName());
-
-        JobDataMap jobDataMap = new JobDataMap();
-        jobDataMap.put("notifyService", notifyService);
-        jobDataMap.put("notifyGroups", notifyGroups);
-        jobDataMap.put("webRequest", webRequest);
-        jobDataMap.put("appId", appMonitor.getAppId());
-        jobDataMap.put("machineId", appMonitor.getMachineId());
-        jobDataMap.put("runningRepository", runningRepository);
-        addAndStart(jobClass, jobId, cronExp, jobDataMap);
+        addJob(monitorJob.getJobId(), cronExp, jobClass, jobDataMap);
     }
 
     private void addAppMonitorJob(AppMonitor appMonitor, MonitorJob monitorJob) throws SchedulerException, IOException {
-        List<NotifyGroup> notifyGroups = appMonitor.getNotifyGroups();
         String cronExp = monitorJob.getCronExp();
         Class jobClass = findClassBySimpleName(monitorJob.getJobClassName());
 
         JobDataMap jobDataMap = new JobDataMap();
         jobDataMap.put("notifyService", notifyService);
-        jobDataMap.put("notifyGroups", notifyGroups);
+        jobDataMap.put("notifyGroups", appMonitor.getNotifyGroups());
         jobDataMap.put("webRequest", webRequest);
         jobDataMap.put("appId", appMonitor.getAppId());
         jobDataMap.put("machineId", appMonitor.getMachineId());
         jobDataMap.put("runningRepository", runningRepository);
-        addAndStart(jobClass, monitorJob.getJobId(), cronExp, jobDataMap);
+        addJob(monitorJob.getJobId(), cronExp, jobClass, jobDataMap);
     }
 
-    private void addAndStart(Class<? extends Job> clazz, String jobId, String cronExp, JobDataMap jobDataMap)
+    private void addJob(String jobId, String cronExp, Class<? extends Job> clazz, JobDataMap jobDataMap)
             throws SchedulerException {
         JobDetail jobDetail = JobBuilder.newJob(clazz)
                 .withIdentity(jobId)
@@ -168,39 +152,28 @@ public class MonitorScheduler {
     }
 
     public void modifyJob(String jobId, String cronExp) throws SchedulerException {
-        Trigger trigger = scheduler.getTrigger(TriggerKey.triggerKey(jobId));
-        JobDetail jobDetail = scheduler.getJobDetail(JobKey.jobKey(jobId));
-        JobDataMap jobDataMap = jobDetail.getJobDataMap();
-
+        TriggerKey triggerKey = TriggerKey.triggerKey(jobId);
         CronTrigger cronTrigger = TriggerBuilder.newTrigger()
                 .withIdentity(jobId)
                 .withSchedule(CronScheduleBuilder.cronSchedule(cronExp))
                 .build();
-
-        //scheduler.rescheduleJob()
-    }
-
-    public void updateNotifyGroup(String jobId, List<NotifyGroup> notifyGroups) {
-
+        scheduler.rescheduleJob(triggerKey, cronTrigger);
     }
 
-    public void delete(String jobId) throws SchedulerException {
+    public void deleteJob(String jobId) throws SchedulerException {
         scheduler.deleteJob(JobKey.jobKey(jobId));
     }
 
-    public void pause(String jobId) throws SchedulerException {
+    public void pauseJob(String jobId) throws SchedulerException {
         scheduler.pauseJob(JobKey.jobKey(jobId));
     }
 
-    public boolean isJobExist(String jobId) throws SchedulerException {
-        return scheduler.checkExists(JobKey.jobKey(jobId));
-    }
-
-    public void resume(String jobId) throws SchedulerException {
+    public void resumeJob(String jobId) throws SchedulerException {
         scheduler.resumeJob(JobKey.jobKey(jobId));
     }
 
-    public void remove(String jobId) {
+    public boolean isJobExist(String jobId) throws SchedulerException {
+        return scheduler.checkExists(JobKey.jobKey(jobId));
     }
 
     private Class findClassBySimpleName(String simpleName) throws IOException {

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

@@ -11,7 +11,7 @@ import cn.reghao.autodop.dmaster.notification.entity.NotifyGroup;
  */
 public interface MonitorService<T> {
     void setNotify(T monitor, NotifyGroup notifyGroup);
-    void addJob(T monitor, MonitorJob monitorJob);
+    void addOrModifyJob(T monitor, MonitorJob monitorJob);
     void deleteJob(T monitor, String jobId);
     void startJob(T monitor, String jobId);
     void pauseJob(T monitor, String jobId);

+ 2 - 6
dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/service/job/machine/MachineDiskUsageCheckJob.java

@@ -1,18 +1,14 @@
 package cn.reghao.autodop.dmaster.monitor.service.job.machine;
 
-import cn.reghao.autodop.common.utils.DateTimeConverter;
-import cn.reghao.autodop.dmaster.machine.db.crud.MachineStatusCrudService;
-import cn.reghao.autodop.dmaster.machine.entity.MachineStatus;
+import cn.reghao.autodop.dmaster.machine.db.crud.MachineStatCrudService;
 import cn.reghao.autodop.dmaster.notification.entity.NotifyGroup;
 import cn.reghao.autodop.dmaster.notification.service.NotifyService;
-import cn.reghao.autodop.dmaster.notification.service.notifier.ding.DingMsg;
 import lombok.extern.slf4j.Slf4j;
 import org.quartz.Job;
 import org.quartz.JobDataMap;
 import org.quartz.JobDetail;
 import org.quartz.JobExecutionContext;
 
-import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -30,7 +26,7 @@ public class MachineDiskUsageCheckJob implements Job {
 
         NotifyService notifyService = (NotifyService) jobDataMap.get("notifyService");
         List<NotifyGroup> notifyGroups = (List<NotifyGroup>) jobDataMap.get("notifyGroups");
-        MachineStatusCrudService statusCrudService = (MachineStatusCrudService) jobDataMap.get("statusCrudService");
+        MachineStatCrudService statusCrudService = (MachineStatCrudService) jobDataMap.get("statusCrudService");
         String machineId = jobDataMap.getString("machineId");
         log.info("检查 {} 的磁盘使用情况...", machineId);
 

+ 2 - 6
dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/service/job/machine/MachineHeartbeatCheckJob.java

@@ -1,18 +1,14 @@
 package cn.reghao.autodop.dmaster.monitor.service.job.machine;
 
-import cn.reghao.autodop.common.utils.DateTimeConverter;
-import cn.reghao.autodop.dmaster.machine.db.crud.MachineStatusCrudService;
-import cn.reghao.autodop.dmaster.machine.entity.MachineStatus;
+import cn.reghao.autodop.dmaster.machine.db.crud.MachineStatCrudService;
 import cn.reghao.autodop.dmaster.notification.entity.NotifyGroup;
 import cn.reghao.autodop.dmaster.notification.service.NotifyService;
-import cn.reghao.autodop.dmaster.notification.service.notifier.ding.DingMsg;
 import lombok.extern.slf4j.Slf4j;
 import org.quartz.Job;
 import org.quartz.JobDataMap;
 import org.quartz.JobDetail;
 import org.quartz.JobExecutionContext;
 
-import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -30,7 +26,7 @@ public class MachineHeartbeatCheckJob implements Job {
 
         NotifyService notifyService = (NotifyService) jobDataMap.get("notifyService");
         List<NotifyGroup> notifyGroups = (List<NotifyGroup>) jobDataMap.get("notifyGroups");
-        MachineStatusCrudService statusCrudService = (MachineStatusCrudService) jobDataMap.get("statusCrudService");
+        MachineStatCrudService statusCrudService = (MachineStatCrudService) jobDataMap.get("statusCrudService");
         String machineId = jobDataMap.getString("machineId");
         log.info("检查 {} 的上次心跳时间...", machineId);
 

+ 0 - 15
dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/vo/AppHealthCheck.java

@@ -1,15 +0,0 @@
-package cn.reghao.autodop.dmaster.monitor.vo;
-
-import lombok.Data;
-
-/**
- * @author reghao
- * @date 2021-06-22 20:38:11
- */
-@Data
-public class AppHealthCheck {
-    private String appId;
-    private String machineIpv4;
-    private Integer httpPort;
-    private String healthCheck;
-}

+ 19 - 23
dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/processor/DagentOpsProcessor.java

@@ -1,6 +1,5 @@
 package cn.reghao.autodop.dmaster.mqttsub.processor;
 
-import cn.reghao.autodop.common.dagent.machine.api.data.MachineStat;
 import cn.reghao.autodop.common.dagent.machine.disk.DiskInfo;
 import cn.reghao.autodop.common.dagent.machine.memory.MemoryInfo;
 import cn.reghao.autodop.common.dagent.machine.network.NetworkStat;
@@ -14,8 +13,9 @@ import cn.reghao.autodop.common.utils.PercentCalculator;
 import cn.reghao.autodop.common.utils.serializer.JsonConverter;
 import cn.reghao.autodop.common.message.ops.OpsProcessor;
 import cn.reghao.autodop.dmaster.machine.db.crud.MachineInfoCrudService;
-import cn.reghao.autodop.dmaster.machine.db.crud.MachineStatusCrudService;
-import cn.reghao.autodop.dmaster.machine.entity.*;
+import cn.reghao.autodop.dmaster.machine.db.crud.MachineStatCrudService;
+import cn.reghao.autodop.dmaster.machine.entity.info.MachineInfo;
+import cn.reghao.autodop.dmaster.machine.entity.stat.*;
 import cn.reghao.autodop.dmaster.sys.entity.AppRuntimeLog;
 import cn.reghao.autodop.dmaster.sys.repository.AppRuntimeLogRepository;
 import lombok.extern.slf4j.Slf4j;
@@ -36,16 +36,14 @@ import java.util.stream.Collectors;
 public class DagentOpsProcessor implements OpsProcessor {
     private ByteConverter converter = new ByteConverter();
     private MachineInfoCrudService machineInfoCrudService;
-    private MachineStatusCrudService statusCrudService;
-    // TODO 使用 service 访问
-    @Deprecated
+    private MachineStatCrudService statCrudService;
     private AppRuntimeLogRepository runtimeLogRepository;
 
     public DagentOpsProcessor(MachineInfoCrudService machineInfoCrudService,
-                              MachineStatusCrudService statusCrudService,
+                              MachineStatCrudService statCrudService,
                               AppRuntimeLogRepository runtimeLogRepository) {
         this.machineInfoCrudService = machineInfoCrudService;
-        this.statusCrudService = statusCrudService;
+        this.statCrudService = statCrudService;
         this.runtimeLogRepository = runtimeLogRepository;
     }
 
@@ -72,26 +70,25 @@ public class DagentOpsProcessor implements OpsProcessor {
 
     private void processDagentStart(String payload) {
         MachineInfo machineInfo = JsonConverter.jsonToObject(payload, MachineInfo.class);
-        machineInfo = machineInfoCrudService.insertOrUpdate(machineInfo);
+        machineInfoCrudService.insertOrUpdate(machineInfo);
 
-        MachineStatus status = statusCrudService.selectByUniqueKey(machineInfo.getMachineId());
-        if (status != null) {
-            status.setStatus(StatusType.UP.name());
-            status.setLastCheck(LocalDateTime.now());
+        MachineStat stat = statCrudService.selectByUk(machineInfo.getMachineId());
+        if (stat != null) {
+            stat.setStatus(StatusType.UP.name());
+            stat.setLastCheck(LocalDateTime.now());
         } else {
-            status = new MachineStatus(machineInfo.getMachineId(), machineInfo.machineIpv4());
+            stat = new MachineStat(machineInfo.getMachineId());
         }
-        statusCrudService.insertOrUpdate(status);
+        statCrudService.insertOrUpdate(stat);
     }
 
     private void processDagentHeartbeat(String payload) {
         MachineStat machineStat = JsonConverter.jsonToObject(payload, MachineStat.class);
-        String machineIpv4 = machineStat.getMachineIpv4();
-
-        int tcpConnNum = tcpConnNum(machineStat.getNetworkStat());
+        statCrudService.insertOrUpdate(machineStat);
+        /*int tcpConnNum = tcpConnNum(machineStat.getNetworkStat());
         MemoryUsage memoryUsage = getMemoryUsage(machineIpv4, machineStat.getMemoryInfo());
         List<DiskUsage> diskUsages = getDiskUsage(machineIpv4, machineStat.getDiskInfos());
-        MachineStatus status = statusCrudService.selectByUniqueKey(machineStat.getMachineId());
+        MachineStat status = statusCrudService.selectByUk(machineStat.getMachineId());
         if (status != null) {
             status.setMachineIpv4(machineIpv4);
             status.setLastCheck(LocalDateTime.now());
@@ -99,12 +96,12 @@ public class DagentOpsProcessor implements OpsProcessor {
             status.setMemoryUsage(memoryUsage);
             status.setDiskUsages(diskUsages);
         } else {
-            status = new MachineStatus(machineStat);
+            status = new MachineStat(machineStat);
             status.setTcpConnNum(tcpConnNum);
             status.setMemoryUsage(memoryUsage);
             status.setDiskUsages(diskUsages);
         }
-        statusCrudService.insertOrUpdate(status);
+        statusCrudService.insertOrUpdate(status);*/
     }
 
     private int tcpConnNum(NetworkStat networkStat) {
@@ -163,13 +160,12 @@ public class DagentOpsProcessor implements OpsProcessor {
             // TODO 发出告警通知
             log.info("{} 上可用的磁盘空间仅占总磁盘空间的 {},共计 {}", machineIpv4, percent, availSize);
         }
-
         return diskInfos.stream().map(DiskUsage::new).collect(Collectors.toList());
     }
 
     private void processDagentShutdown(String payload) {
         String machineId = JsonConverter.jsonToObject(payload, String.class);
-        MachineStatus status = statusCrudService.selectByUniqueKey(machineId);
+        MachineStat status = statCrudService.selectByUk(machineId);
         if (status != null) {
             status.setStatus(StatusType.DOWN.name());
         }

+ 38 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/sys/db/AppRuntimeLogCrudService.java

@@ -0,0 +1,38 @@
+package cn.reghao.autodop.dmaster.sys.db;
+
+import cn.reghao.autodop.dmaster.sys.entity.AppRuntimeLog;
+import cn.reghao.autodop.dmaster.sys.repository.AppRuntimeLogRepository;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author reghao
+ * @date 2019-11-15 08:48:04
+ */
+@Service
+public class AppRuntimeLogCrudService {
+    private AppRuntimeLogRepository runtimeLogRepository;
+
+    public AppRuntimeLogCrudService(AppRuntimeLogRepository runtimeLogRepository) {
+        this.runtimeLogRepository = runtimeLogRepository;
+    }
+
+    public void insertOrUpdate(AppRuntimeLog machineInfo) {
+    }
+
+    public void delete(AppRuntimeLog machineInfo) {
+    }
+
+    public AppRuntimeLog selectByPk(Integer id) {
+        return null;
+    }
+
+    public AppRuntimeLog selectByUk(String machineId) {
+        return null;
+    }
+
+    public Page<AppRuntimeLog> selectByPage(Pageable pageable) {
+        return null;
+    }
+}

+ 8 - 9
dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/lifecycle/DmasterLifecycle.java

@@ -13,7 +13,6 @@ import cn.reghao.autodop.dmaster.sys.repository.AppRuntimeLogRepository;
 import cn.reghao.autodop.dmaster.utils.log.Appenders;
 import lombok.extern.slf4j.Slf4j;
 import org.eclipse.paho.client.mqttv3.MqttException;
-import org.quartz.SchedulerException;
 import org.springframework.beans.factory.DisposableBean;
 import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.ApplicationRunner;
@@ -49,11 +48,17 @@ public class DmasterLifecycle implements ApplicationRunner, DisposableBean {
         this.dagentMsgDispatcher = dagentMsgDispatcher;
         this.mqttClient = mqttClient;
         this.buildDirCrudService = buildDirCrudService;
+        initLogger();
+    }
+
+    private void initLogger() {
+        List<Appender<ILoggingEvent>> appenders = new ArrayList<>();
+        appenders.add(Appenders.mongoAppender("dmaster", logRepository));
+        LoggerConfig.initLogger(appenders);
     }
 
     @Override
-    public void run(ApplicationArguments args) throws MqttException, SchedulerException {
-        initLogger();
+    public void run(ApplicationArguments args) throws MqttException {
         subTopic();
         initBuildDir();
         log.info("autodop-master 初始化完成...");
@@ -69,12 +74,6 @@ public class DmasterLifecycle implements ApplicationRunner, DisposableBean {
         mqttClient.sub(topic, dagentMsgDispatcher);
     }
 
-    private void initLogger() {
-        List<Appender<ILoggingEvent>> appenders = new ArrayList<>();
-        appenders.add(Appenders.mongoAppender("dmaster", logRepository));
-        LoggerConfig.initLogger(appenders);
-    }
-
     private void initBuildDir() {
         log.info("初始化构建目录...");
         BuildDir buildDir = buildDirCrudService.selectByUniqueKey(MACHINE_ID);

+ 1 - 0
dmaster/src/main/resources/templates/machine/host.html

@@ -39,6 +39,7 @@
             <table class="layui-table timo-table">
                 <thead>
                 <tr>
+                    <!-- TODO 使用 checkbox 批量指定环境 -->
                     <th class="timo-table-checkbox">
                         <label class="timo-checkbox"><input type="checkbox">
                             <i class="layui-icon layui-icon-ok"></i></label>