Przeglądaj źródła

update web.mgr.machine

reghao 1 rok temu
rodzic
commit
0054bc3ab1
29 zmienionych plików z 240 dodań i 320 usunięć
  1. 1 1
      web/src/main/java/cn/reghao/devops/web/mgr/app/controller/page/AppDeployConfigPageController.java
  2. 1 0
      web/src/main/java/cn/reghao/devops/web/mgr/app/db/query/AppDeployQuery.java
  3. 1 0
      web/src/main/java/cn/reghao/devops/web/mgr/app/db/repository/config/AppDeployConfigRepository.java
  4. 1 1
      web/src/main/java/cn/reghao/devops/web/mgr/app/service/bd/impl/DeployAppImpl.java
  5. 9 3
      web/src/main/java/cn/reghao/devops/web/mgr/app/service/impl/AppDeployServiceImpl.java
  6. 1 1
      web/src/main/java/cn/reghao/devops/web/mgr/build/chain/BuildTools.java
  7. 1 1
      web/src/main/java/cn/reghao/devops/web/mgr/build/model/BuildConfigDto.java
  8. 1 1
      web/src/main/java/cn/reghao/devops/web/mgr/build/tool/packer/DockerPack.java
  9. 1 1
      web/src/main/java/cn/reghao/devops/web/mgr/builds/controller/DockerRegistryController.java
  10. 1 1
      web/src/main/java/cn/reghao/devops/web/mgr/builds/model/po/DockerRegistry.java
  11. 1 1
      web/src/main/java/cn/reghao/devops/web/mgr/builds/model/po/PackerConfig.java
  12. 1 1
      web/src/main/java/cn/reghao/devops/web/mgr/builds/service/DockerRegistryService.java
  13. 5 4
      web/src/main/java/cn/reghao/devops/web/mgr/machine/controller/MachineHostController.java
  14. 19 28
      web/src/main/java/cn/reghao/devops/web/mgr/machine/controller/page/MachineHostPageController.java
  15. 12 3
      web/src/main/java/cn/reghao/devops/web/mgr/machine/db/query/MachineQuery.java
  16. 71 18
      web/src/main/java/cn/reghao/devops/web/mgr/machine/db/query/impl/MachineQueryImpl.java
  17. 0 2
      web/src/main/java/cn/reghao/devops/web/mgr/machine/db/repository/MachineHostRepository.java
  18. 0 3
      web/src/main/java/cn/reghao/devops/web/mgr/machine/db/repository/MachineInfoRepository.java
  19. 3 1
      web/src/main/java/cn/reghao/devops/web/mgr/machine/model/vo/MachineHostVO.java
  20. 0 23
      web/src/main/java/cn/reghao/devops/web/mgr/machine/service/MachineHostPage.java
  21. 8 4
      web/src/main/java/cn/reghao/devops/web/mgr/machine/service/MachineService.java
  22. 0 81
      web/src/main/java/cn/reghao/devops/web/mgr/machine/service/impl/MachineHostPageImpl.java
  23. 81 33
      web/src/main/java/cn/reghao/devops/web/mgr/machine/service/impl/MachineServiceImpl.java
  24. 4 4
      web/src/main/java/cn/reghao/devops/web/ws/EventDispatcherConfig.java
  25. 5 4
      web/src/main/java/cn/reghao/devops/web/ws/event/EvtAgentHeartbeatHandler.java
  26. 5 4
      web/src/main/java/cn/reghao/devops/web/ws/event/EvtAgentStartHandler.java
  27. 5 56
      web/src/main/java/cn/reghao/devops/web/ws/event/MachineEventService.java
  28. 2 0
      web/src/main/resources/templates/devops/machine/host/index.html
  29. 0 40
      web/src/test/java/cn/reghao/devops/web/devops/DockerTest.java

+ 1 - 1
web/src/main/java/cn/reghao/devops/web/mgr/app/controller/page/AppDeployConfigPageController.java

@@ -57,7 +57,7 @@ public class AppDeployConfigPageController {
     @GetMapping("/add/{appId}")
     public String addAppConfigPage(@PathVariable("appId") String appId, Model model) {
         AppConfig appConfig = appBuildQuery.getAppConfig(appId);
-        List<KeyValue> machines = machineQuery.onlineMachines(appConfig.getEnv());
+        List<KeyValue> machines = machineQuery.getOnlineMachines(appConfig.getEnv());
 
         model.addAttribute("appId", appId);
         model.addAttribute("packType", appConfig.getPackerConfig().getType());

+ 1 - 0
web/src/main/java/cn/reghao/devops/web/mgr/app/db/query/AppDeployQuery.java

@@ -8,6 +8,7 @@ import cn.reghao.devops.web.mgr.app.model.vo.AppDeployConfigVo;
 import cn.reghao.devops.web.mgr.app.model.vo.AppDeployingVO;
 import cn.reghao.devops.web.mgr.app.model.vo.AppRunning;
 import cn.reghao.devops.web.mgr.app.model.vo.AppRunningVO;
+import cn.reghao.devops.web.mgr.machine.model.po.MachineHost;
 import cn.reghao.jutil.jdk.db.BaseQuery;
 import cn.reghao.jutil.jdk.db.PageList;
 import org.springframework.data.domain.Page;

+ 1 - 0
web/src/main/java/cn/reghao/devops/web/mgr/app/db/repository/config/AppDeployConfigRepository.java

@@ -19,6 +19,7 @@ public interface AppDeployConfigRepository
     void deleteByMachineHost(MachineHost machineHost);
 
     int countByAppConfig(AppConfig appConfig);
+    int countByMachineHost(MachineHost machineHost);
     List<AppDeployConfig> findByMachineHost(MachineHost machineHost);
     List<AppDeployConfig> findByAppConfig(AppConfig appConfig);
 }

+ 1 - 1
web/src/main/java/cn/reghao/devops/web/mgr/app/service/bd/impl/DeployAppImpl.java

@@ -1,6 +1,6 @@
 package cn.reghao.devops.web.mgr.app.service.bd.impl;
 
-import cn.reghao.devops.common.docker.po.DockerAuth;
+import cn.reghao.devops.common.docker.model.DockerAuth;
 import cn.reghao.devops.common.msg.constant.PackType;
 import cn.reghao.devops.web.mgr.app.db.query.AppDeployQuery;
 import cn.reghao.devops.web.mgr.app.db.repository.log.BuildLogRepository;

+ 9 - 3
web/src/main/java/cn/reghao/devops/web/mgr/app/service/impl/AppDeployServiceImpl.java

@@ -1,6 +1,6 @@
 package cn.reghao.devops.web.mgr.app.service.impl;
 
-import cn.reghao.devops.common.docker.po.Config;
+import cn.reghao.devops.common.docker.model.Config;
 import cn.reghao.devops.common.msg.constant.PackType;
 import cn.reghao.devops.web.mgr.app.db.query.AppDeployQuery;
 import cn.reghao.devops.web.mgr.app.db.repository.AppDeployingRepository;
@@ -148,6 +148,7 @@ public class AppDeployServiceImpl implements AppDeployService {
         return Result.result(ResultStatus.SUCCESS);
     }
 
+    @Override
     public void deleteByMachineHost(MachineHost machineHost) {
         List<AppDeployConfig> list = deployConfigRepository.findByMachineHost(machineHost);
         List<String> apps = list.stream()
@@ -168,7 +169,6 @@ public class AppDeployServiceImpl implements AppDeployService {
             String appId = appDeployConfig.getAppConfig().getAppId();
             String machineId = appDeployConfig.getMachineHost().getMachineId();
             deleteAppDeploying(appId, machineId);
-
         }
 
         deployConfigRepository.deleteByMachineHost(machineHost);
@@ -191,7 +191,6 @@ public class AppDeployServiceImpl implements AppDeployService {
             if (idx != -1) {
                 deployingNodes.remove(idx);
                 deployLogRepository.deleteByMachineHost_MachineId(machineId);
-                deployingRepository.delete(appDeploying);
                 deployingRepository.deleteByAppConfig_AppId(appId);
             }
         }
@@ -282,6 +281,13 @@ public class AppDeployServiceImpl implements AppDeployService {
             });
 
             deployingRepository.save(appDeploying);
+        } else {
+            String machineIpv4 = "0.0.0.0";
+            MachineHost machineHost = machineQuery.getMachineHost(machineId);
+            if (machineHost != null) {
+                machineIpv4 = machineHost.getMachineIpv4();
+            }
+            log.info("{} -> {} not exist", machineIpv4, appId);
         }
     }
 

+ 1 - 1
web/src/main/java/cn/reghao/devops/web/mgr/build/chain/BuildTools.java

@@ -1,6 +1,6 @@
 package cn.reghao.devops.web.mgr.build.chain;
 
-import cn.reghao.devops.common.docker.po.DockerAuth;
+import cn.reghao.devops.common.docker.model.DockerAuth;
 import cn.reghao.devops.web.mgr.build.model.AppDto;
 import cn.reghao.devops.web.mgr.build.model.CompilerDto;
 import cn.reghao.devops.web.mgr.build.model.PackerDto;

+ 1 - 1
web/src/main/java/cn/reghao/devops/web/mgr/build/model/BuildConfigDto.java

@@ -1,6 +1,6 @@
 package cn.reghao.devops.web.mgr.build.model;
 
-import cn.reghao.devops.common.docker.po.DockerAuth;
+import cn.reghao.devops.common.docker.model.DockerAuth;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 

+ 1 - 1
web/src/main/java/cn/reghao/devops/web/mgr/build/tool/packer/DockerPack.java

@@ -2,7 +2,7 @@ package cn.reghao.devops.web.mgr.build.tool.packer;
 
 import cn.reghao.devops.common.docker.Docker;
 import cn.reghao.devops.common.docker.DockerImpl;
-import cn.reghao.devops.common.docker.po.DockerAuth;
+import cn.reghao.devops.common.docker.model.DockerAuth;
 import lombok.extern.slf4j.Slf4j;
 
 import java.io.File;

+ 1 - 1
web/src/main/java/cn/reghao/devops/web/mgr/builds/controller/DockerRegistryController.java

@@ -1,6 +1,6 @@
 package cn.reghao.devops.web.mgr.builds.controller;
 
-import cn.reghao.devops.common.docker.po.DockerAuth;
+import cn.reghao.devops.common.docker.model.DockerAuth;
 import cn.reghao.devops.web.mgr.builds.service.DockerRegistryService;
 import cn.reghao.jutil.jdk.result.WebResult;
 import io.swagger.annotations.Api;

+ 1 - 1
web/src/main/java/cn/reghao/devops/web/mgr/builds/model/po/DockerRegistry.java

@@ -1,6 +1,6 @@
 package cn.reghao.devops.web.mgr.builds.model.po;
 
-import cn.reghao.devops.common.docker.po.DockerAuth;
+import cn.reghao.devops.common.docker.model.DockerAuth;
 import cn.reghao.devops.web.admin.util.BaseEntity;
 import lombok.Getter;
 import lombok.NoArgsConstructor;

+ 1 - 1
web/src/main/java/cn/reghao/devops/web/mgr/builds/model/po/PackerConfig.java

@@ -1,6 +1,6 @@
 package cn.reghao.devops.web.mgr.builds.model.po;
 
-import cn.reghao.devops.common.docker.po.DockerAuth;
+import cn.reghao.devops.common.docker.model.DockerAuth;
 import cn.reghao.devops.web.mgr.build.model.PackerDto;
 import cn.reghao.devops.common.msg.constant.PackType;
 import cn.reghao.devops.web.util.provider.PackerConfigGroupSequenceProvider;

+ 1 - 1
web/src/main/java/cn/reghao/devops/web/mgr/builds/service/DockerRegistryService.java

@@ -1,7 +1,7 @@
 package cn.reghao.devops.web.mgr.builds.service;
 
 import cn.reghao.devops.common.docker.DockerImpl;
-import cn.reghao.devops.common.docker.po.DockerAuth;
+import cn.reghao.devops.common.docker.model.DockerAuth;
 import cn.reghao.devops.web.mgr.builds.db.repository.DockerRegistryRepository;
 import cn.reghao.devops.web.mgr.builds.model.po.DockerRegistry;
 import org.springframework.stereotype.Service;

+ 5 - 4
web/src/main/java/cn/reghao/devops/web/mgr/machine/controller/MachineHostController.java

@@ -36,14 +36,14 @@ public class MachineHostController {
     @PostMapping(value = "/env/{machineId}", produces = MediaType.APPLICATION_JSON_VALUE)
     public ResponseEntity<String> editExtraMachineInfo(@PathVariable("machineId") String machineId,
                                                        @RequestParam("env") String env) {
-        machineService.setEnv(machineId, env);
+        machineService.setMachineEnv(machineId, env);
         return ResponseEntity.ok().body(WebResult.success());
     }
 
     @ApiOperation(value = "编辑 SSH 认证信息")
     @PostMapping(value = "/sshauth/{machineId}", produces = MediaType.APPLICATION_JSON_VALUE)
     public ResponseEntity<String> editSshAuth(@PathVariable("machineId") String machineId, @Valid SshAuth sshAuth) {
-        machineService.setSshAuth(machineId, sshAuth);
+        machineService.setMachineSshAuth(machineId, sshAuth);
         return ResponseEntity.ok().body(WebResult.success());
     }
 
@@ -54,13 +54,14 @@ public class MachineHostController {
             return WebResult.failWithMsg("机器处于在线状态, 不能删除");
         }
 
-        Result result = machineService.delete(machineId);
+        Result result = machineService.deleteMachine(machineId);
         return WebResult.result(result);
     }
 
+    @ApiOperation(value = "设置机器为弃用状态")
     @PostMapping(value = "/deprecate", produces = MediaType.APPLICATION_JSON_VALUE)
     public String deleteAll(@RequestParam(value = "ids") List<String> machineIds) {
-        Result result = machineService.updateMachineStat(machineIds);
+        Result result = machineService.setMachinesDeprecate(machineIds);
         return WebResult.result(result);
     }
 }

+ 19 - 28
web/src/main/java/cn/reghao/devops/web/mgr/machine/controller/page/MachineHostPageController.java

@@ -2,6 +2,7 @@ package cn.reghao.devops.web.mgr.machine.controller.page;
 
 import cn.reghao.devops.web.mgr.app.model.vo.KeyValue;
 import cn.reghao.devops.web.mgr.machine.db.query.MachineQuery;
+import cn.reghao.devops.web.mgr.machine.model.po.MachineInfo;
 import cn.reghao.devops.web.util.DefaultSetting;
 import cn.reghao.devops.web.util.PageSort;
 import cn.reghao.devops.web.mgr.build.model.constant.EnvType;
@@ -11,14 +12,11 @@ import cn.reghao.devops.web.mgr.machine.model.po.SshAuth;
 import cn.reghao.devops.web.mgr.machine.model.vo.MachineHostVO;
 import cn.reghao.devops.web.mgr.machine.model.vo.MachineInfoVO;
 import cn.reghao.devops.web.mgr.machine.model.vo.MachineSshAuth;
-import cn.reghao.devops.web.mgr.machine.service.MachineHostPage;
 import cn.reghao.devops.web.mgr.machine.util.Keys;
-import cn.reghao.jutil.jdk.db.PageList;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageImpl;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
@@ -39,11 +37,9 @@ import java.util.stream.Collectors;
 @Controller
 @RequestMapping("/machine/host")
 public class MachineHostPageController {
-    private final MachineHostPage machineHostPage;
     private final MachineQuery machineQuery;
 
-    public MachineHostPageController(MachineHostPage machineHostPage, MachineQuery machineQuery) {
-        this.machineHostPage = machineHostPage;
+    public MachineHostPageController(MachineQuery machineQuery) {
         this.machineQuery = machineQuery;
     }
 
@@ -58,20 +54,16 @@ public class MachineHostPageController {
 
         PageRequest pageRequest = PageSort.pageRequest();
         Page<MachineHostVO> page;
-        PageList<MachineHostVO> pageList;
         if (machineIpv4 != null) {
-            //page = machineHostPage.searchResultPage(machineIpv4);
-            pageList = PageList.empty();
+            //page = machineQuery.searchResultPage(machineIpv4);
+            page = Page.empty();
         } else {
-            int pageNumber = pageRequest.getPageNumber();
-            int pageSize = pageRequest.getPageSize();
-            pageList = machineQuery.getByPage(env, pageNumber+1, pageSize);
+            page = machineQuery.getMachineHostByPage(env, pageRequest);
         }
 
-        Page<MachineHostVO> page1 = new PageImpl<>(pageList.getList(), pageRequest, pageList.getTotalSize());
         model.addAttribute("env", env);
-        model.addAttribute("page", page1);
-        model.addAttribute("list", pageList.getList());
+        model.addAttribute("page", page);
+        model.addAttribute("list", page.getContent());
         return "/devops/machine/host/index";
     }
 
@@ -82,7 +74,9 @@ public class MachineHostPageController {
         for (EnvType envType : EnvType.values()) {
             envs.add(new KeyValue(envType.name(), envType.name()));
         }
-        String env = machineHostPage.setEnvPage(machineId);
+
+        MachineHost machineHost = machineQuery.getMachineHost(machineId);
+        String env = machineHost.getEnv();
         model.addAttribute("machineId", machineId);
         model.addAttribute("environments", envs);
         model.addAttribute("env", env);
@@ -92,7 +86,7 @@ public class MachineHostPageController {
     @ApiOperation(value = "SSH 认证设置页面")
     @GetMapping("/sshauth/{machineId}")
     public String sshAuthPage(@PathVariable("machineId") String machineId, Model model) {
-        MachineSshAuth machineSshAuth = machineHostPage.setSshAuthPage(machineId);
+        MachineSshAuth machineSshAuth = machineQuery.getMachineSshAuth(machineId);
         List<KeyValue> ipv4List = machineSshAuth.getIpv4List().stream()
                 .map(ipv4 -> new KeyValue(ipv4, ipv4)).collect(Collectors.toList());
 
@@ -114,7 +108,7 @@ public class MachineHostPageController {
     @ApiOperation(value = "SSH 控制台页面")
     @GetMapping("/webssh/{machineId}")
     public String webSshPage(@PathVariable("machineId") String machineId, Model model) {
-        MachineHost machineHost = machineHostPage.sshTerminalPage(machineId);
+        MachineHost machineHost = machineQuery.getMachineHost(machineId);
         SshAuth sshAuth = machineHost.getSshAuth();
         if (sshAuth == null) {
             String errMsg = "先设置 SSH 认证";
@@ -135,16 +129,13 @@ public class MachineHostPageController {
 
     @ApiOperation(value = "机器信息详情页面")
     @GetMapping("/detail/{machineId}")
-    public String hostDetailPage(@PathVariable("machineId") String machineId, Model model) {
-        MachineInfoVO machineInfoVO = machineHostPage.hostDetailPage(machineId);
-        model.addAttribute("machine", machineInfoVO);
-        return "/devops/machine/host/detail";
-    }
+    public String getMachineInfo(@PathVariable("machineId") String machineId, Model model) {
+        MachineInfo machineInfo = machineQuery.getMachineInfo(machineId);
+        if (machineInfo == null) {
 
-    @ApiOperation(value = "dagnet 日志页面")
-    @GetMapping("/agentlog/{machineId}")
-    public String agentLogPage(@PathVariable("machineId") String machineId, Model model) {
-        model.addAttribute("list", Collections.emptyList());
-        return "/devops/machine/host/agentlog";
+        }
+
+        model.addAttribute("machine", new MachineInfoVO(machineInfo));
+        return "/devops/machine/host/detail";
     }
 }

+ 12 - 3
web/src/main/java/cn/reghao/devops/web/mgr/machine/db/query/MachineQuery.java

@@ -2,8 +2,13 @@ package cn.reghao.devops.web.mgr.machine.db.query;
 
 import cn.reghao.devops.web.mgr.app.model.vo.KeyValue;
 import cn.reghao.devops.web.mgr.machine.model.po.MachineHost;
+import cn.reghao.devops.web.mgr.machine.model.po.MachineInfo;
 import cn.reghao.devops.web.mgr.machine.model.vo.MachineHostVO;
+import cn.reghao.devops.web.mgr.machine.model.vo.MachineInfoVO;
+import cn.reghao.devops.web.mgr.machine.model.vo.MachineSshAuth;
 import cn.reghao.jutil.jdk.db.PageList;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
 
 import java.util.List;
 
@@ -12,8 +17,12 @@ import java.util.List;
  * @date 2024-08-04 19:57:45
  */
 public interface MachineQuery {
-    PageList<MachineHostVO> getByPage(String env, int pageNumber, int pageSize);
-    boolean isAgentOnline(String machineId);
+    Page<MachineHostVO> getMachineHostByPage(String env, PageRequest pageRequest);
     MachineHost getMachineHost(String machineId);
-    List<KeyValue> onlineMachines(String env);
+    MachineSshAuth getMachineSshAuth(String machineId);
+    MachineInfo getMachineInfo(String machineId);
+    List<MachineInfo> getMachineInfos(List<String> machineIds);
+    List<MachineInfo> getMachineInfos(int stat);
+    List<KeyValue> getOnlineMachines(String env);
+    boolean isAgentOnline(String machineId);
 }

+ 71 - 18
web/src/main/java/cn/reghao/devops/web/mgr/machine/db/query/impl/MachineQueryImpl.java

@@ -1,20 +1,28 @@
 package cn.reghao.devops.web.mgr.machine.db.query.impl;
 
 import cn.reghao.devops.common.msg.constant.NodeStatus;
+import cn.reghao.devops.web.mgr.app.db.repository.config.AppDeployConfigRepository;
 import cn.reghao.devops.web.mgr.app.model.vo.KeyValue;
 import cn.reghao.devops.web.mgr.machine.db.query.MachineQuery;
 import cn.reghao.devops.web.mgr.machine.db.repository.MachineHostRepository;
 import cn.reghao.devops.web.mgr.machine.db.repository.MachineInfoRepository;
 import cn.reghao.devops.web.mgr.machine.model.po.MachineHost;
 import cn.reghao.devops.web.mgr.machine.model.po.MachineInfo;
+import cn.reghao.devops.web.mgr.machine.model.po.NetworkInfo;
+import cn.reghao.devops.web.mgr.machine.model.po.SshAuth;
 import cn.reghao.devops.web.mgr.machine.model.vo.MachineHostVO;
+import cn.reghao.devops.web.mgr.machine.model.vo.MachineSshAuth;
 import cn.reghao.jutil.jdk.converter.DateTimeConverter;
-import cn.reghao.jutil.jdk.db.PageList;
 import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
 import org.springframework.data.domain.PageRequest;
+import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 
+import javax.persistence.criteria.*;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -25,18 +33,21 @@ import java.util.stream.Collectors;
 public class MachineQueryImpl implements MachineQuery {
     private final MachineInfoRepository machineInfoRepository;
     private final MachineHostRepository machineHostRepository;
+    private final AppDeployConfigRepository deployConfigRepository;
 
-    public MachineQueryImpl(MachineInfoRepository machineInfoRepository, MachineHostRepository machineHostRepository) {
+    public MachineQueryImpl(MachineInfoRepository machineInfoRepository, MachineHostRepository machineHostRepository,
+                            AppDeployConfigRepository deployConfigRepository) {
         this.machineInfoRepository = machineInfoRepository;
         this.machineHostRepository = machineHostRepository;
+        this.deployConfigRepository = deployConfigRepository;
     }
 
     @Override
-    public PageList<MachineHostVO> getByPage(String env, int pageNumber, int pageSize) {
-        PageRequest pageRequest = PageRequest.of(pageNumber-1, pageSize);
-        Page<MachineInfo> machineInfos = machineInfoRepository.findAll(pageRequest);
-        List<MachineHostVO> list1 = machineInfos.stream().map(machineInfo -> {
-            MachineHost machineHost = new MachineHost(machineInfo);
+    public Page<MachineHostVO> getMachineHostByPage(String env, PageRequest pageRequest) {
+        Page<MachineHost> page = machineHostRepository.findByEnv(env, pageRequest);
+        List<MachineHostVO> list = page.stream().map(machineHost -> {
+            int used = deployConfigRepository.countByMachineHost(machineHost);
+            MachineInfo machineInfo = machineHost.getMachineInfo();
             long bootTime = machineInfo.getBootTime();
             String bootTimeStr = DateTimeConverter.format(bootTime*1000);
             String status = NodeStatus.Online.name();
@@ -49,30 +60,72 @@ public class MachineQueryImpl implements MachineQuery {
                 status = NodeStatus.Deprecated.name();
             }
 
-            return new MachineHostVO(machineHost, bootTimeStr, status);
+            return new MachineHostVO(machineHost, bootTimeStr, status, used);
         }).collect(Collectors.toList());
-        return PageList.pageList(pageNumber, pageSize, (int) machineInfos.getTotalElements(), list1);
+        return new PageImpl<>(list, pageRequest, page.getTotalElements());
     }
 
     @Override
-    public boolean isAgentOnline(String machineId) {
+    public MachineHost getMachineHost(String machineId) {
+        return machineHostRepository.findByMachineId(machineId);
+    }
+
+    @Override
+    public MachineSshAuth getMachineSshAuth(String machineId) {
+        SshAuth sshAuth = machineHostRepository.findByMachineId(machineId).getSshAuth();
         MachineInfo machineInfo = machineInfoRepository.findByMachineId(machineId);
-        if (machineInfo == null) {
-            return false;
-        }
+        List<String> ipv4List = machineInfo.getNetworkInfos().stream()
+                .map(NetworkInfo::getIpv4).collect(Collectors.toList());
+        List<String> ipv4List1 = machineInfo.getNetworkInfos().stream()
+                .map(NetworkInfo::getPublicIpv4).collect(Collectors.toList());
+        ipv4List.addAll(ipv4List1);
+        return new MachineSshAuth(sshAuth, ipv4List);
+    }
 
-        return machineInfo.getStat() == 1;
+    @Override
+    public MachineInfo getMachineInfo(String machineId) {
+        MachineInfo machineInfo = machineInfoRepository.findByMachineId(machineId);
+        return machineInfo;
     }
 
     @Override
-    public MachineHost getMachineHost(String machineId) {
-        return machineHostRepository.findByMachineId(machineId);
+    public List<MachineInfo> getMachineInfos(List<String> machineIds) {
+        Specification<MachineInfo> specification = new Specification<MachineInfo>() {
+            @Override
+            public Predicate toPredicate(Root<MachineInfo> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                List<Predicate> list = new ArrayList<>();
+                Expression<String> exp = root.<String>get("machineId");
+                // SQL IN 查询
+                list.add(exp.in(machineIds));
+                return cb.and(list.toArray(new Predicate[0]));
+            }
+        };
+
+        return machineInfoRepository.findAll(specification);
     }
 
     @Override
-    public List<KeyValue> onlineMachines(String env) {
-        return machineHostRepository.findByEnv(env).stream()
+    public List<MachineInfo> getMachineInfos(int stat) {
+        List<MachineInfo> list = machineInfoRepository.findByStat(NodeStatus.Online.getCode());
+        return list;
+    }
+
+    @Override
+    public List<KeyValue> getOnlineMachines(String env) {
+        PageRequest pageRequest = PageRequest.of(0, 100);
+        return machineHostRepository.findByEnv(env, pageRequest).stream()
+                .filter(machineHost -> machineHost.getMachineInfo().getStat().equals(NodeStatus.Online.getCode()))
                 .map(machineHost -> new KeyValue(machineHost.getMachineId(), machineHost.getMachineIpv4()))
                 .collect(Collectors.toList());
     }
+
+    @Override
+    public boolean isAgentOnline(String machineId) {
+        MachineInfo machineInfo = machineInfoRepository.findByMachineId(machineId);
+        if (machineInfo == null) {
+            return false;
+        }
+
+        return Objects.equals(machineInfo.getStat(), NodeStatus.Online.getCode());
+    }
 }

+ 0 - 2
web/src/main/java/cn/reghao/devops/web/mgr/machine/db/repository/MachineHostRepository.java

@@ -17,7 +17,5 @@ public interface MachineHostRepository
     void deleteByMachineId(String machineId);
 
     MachineHost findByMachineId(String machineId);
-    MachineHost findByMachineIpv4(String machineIpv4);
     Page<MachineHost> findByEnv(String env, Pageable pageable);
-    List<MachineHost> findByEnv(String env);
 }

+ 0 - 3
web/src/main/java/cn/reghao/devops/web/mgr/machine/db/repository/MachineInfoRepository.java

@@ -1,9 +1,6 @@
 package cn.reghao.devops.web.mgr.machine.db.repository;
 
-import cn.reghao.devops.web.mgr.machine.model.po.MachineHost;
 import cn.reghao.devops.web.mgr.machine.model.po.MachineInfo;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;

+ 3 - 1
web/src/main/java/cn/reghao/devops/web/mgr/machine/model/vo/MachineHostVO.java

@@ -19,8 +19,9 @@ public class MachineHostVO {
     private String status;
     @Deprecated
     private String lastCheck;
+    private int used;
 
-    public MachineHostVO(MachineHost machineHost, String bootTime, String status) {
+    public MachineHostVO(MachineHost machineHost, String bootTime, String status, int used) {
         this.machineId = machineHost.getMachineId();
         this.machineIpv4 = machineHost.getMachineIpv4();
         this.bootTime = bootTime;
@@ -29,5 +30,6 @@ public class MachineHostVO {
         this.osVersion = machineHost.getMachineInfo().getVersion();
         this.agentVersion = machineHost.getMachineInfo().getAgentVersion();
         this.status = status;
+        this.used = used;
     }
 }

+ 0 - 23
web/src/main/java/cn/reghao/devops/web/mgr/machine/service/MachineHostPage.java

@@ -1,23 +0,0 @@
-package cn.reghao.devops.web.mgr.machine.service;
-
-import cn.reghao.devops.web.mgr.machine.model.po.MachineHost;
-import cn.reghao.devops.web.mgr.machine.model.vo.MachineHostVO;
-import cn.reghao.devops.web.mgr.machine.model.vo.MachineInfoVO;
-import cn.reghao.devops.web.mgr.machine.model.vo.MachineSshAuth;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-
-/**
- * @author reghao
- * @date 2021-10-16 23:15:45
- */
-public interface MachineHostPage {
-    Page<MachineHostVO> indexPage(String env, PageRequest pageRequest);
-    Page<MachineHostVO> searchResultPage(String machineIpv4);
-    String setEnvPage(String machineId);
-    MachineSshAuth setSshAuthPage(String machineId);
-    MachineHost sshTerminalPage(String machineId);
-    MachineInfoVO hostDetailPage(String machineId);
-    @Deprecated
-    void setNotifyPage(String machineId);
-}

+ 8 - 4
web/src/main/java/cn/reghao/devops/web/mgr/machine/service/MachineService.java

@@ -1,5 +1,7 @@
 package cn.reghao.devops.web.mgr.machine.service;
 
+import cn.reghao.devops.common.msg.event.EvtAgentHeartbeat;
+import cn.reghao.devops.common.msg.event.EvtAgentStart;
 import cn.reghao.devops.web.mgr.machine.model.po.SshAuth;
 import cn.reghao.jutil.jdk.result.Result;
 
@@ -10,10 +12,12 @@ import java.util.List;
  * @date 2019-11-15 08:48:04
  */
 public interface MachineService {
-    void setEnv(String machineId, String env);
-    void setSshAuth(String machineId, SshAuth sshAuth);
-    Result delete(String machineId);
-    Result updateMachineStat(List<String> machineIds);
+    void addOrUpdateMachine(EvtAgentStart evtAgentStart);
+    void updateMachine(EvtAgentHeartbeat evtAgentHeartbeat);
+    void setMachineEnv(String machineId, String env);
+    void setMachineSshAuth(String machineId, SshAuth sshAuth);
+    Result setMachinesDeprecate(List<String> machineIds);
+    Result deleteMachine(String machineId);
     void agentShutdown(String machineId);
     void shutdown();
 }

+ 0 - 81
web/src/main/java/cn/reghao/devops/web/mgr/machine/service/impl/MachineHostPageImpl.java

@@ -1,81 +0,0 @@
-package cn.reghao.devops.web.mgr.machine.service.impl;
-
-import cn.reghao.devops.web.mgr.machine.db.repository.MachineHostRepository;
-import cn.reghao.devops.web.mgr.machine.db.repository.MachineInfoRepository;
-import cn.reghao.devops.web.mgr.machine.model.po.MachineHost;
-import cn.reghao.devops.web.mgr.machine.model.po.MachineInfo;
-import cn.reghao.devops.web.mgr.machine.model.po.NetworkInfo;
-import cn.reghao.devops.web.mgr.machine.model.po.SshAuth;
-import cn.reghao.devops.web.mgr.machine.model.vo.MachineHostVO;
-import cn.reghao.devops.web.mgr.machine.model.vo.MachineInfoVO;
-import cn.reghao.devops.web.mgr.machine.model.vo.MachineSshAuth;
-import cn.reghao.devops.web.mgr.machine.service.MachineHostPage;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageImpl;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.stereotype.Service;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * @author reghao
- * @date 2021-10-16 23:15:45
- */
-@Service
-public class MachineHostPageImpl implements MachineHostPage {
-    private final MachineHostRepository machineHostRepository;
-    private final MachineInfoRepository machineInfoRepository;
-
-    public MachineHostPageImpl(MachineHostRepository machineHostRepository, MachineInfoRepository machineInfoRepository) {
-        this.machineHostRepository = machineHostRepository;
-        this.machineInfoRepository = machineInfoRepository;
-    }
-
-    @Override
-    public Page<MachineHostVO> indexPage(String env, PageRequest pageRequest) {
-        return new PageImpl<>(Collections.emptyList());
-    }
-
-    @Override
-    public Page<MachineHostVO> searchResultPage(String machineIpv4) {
-        return new PageImpl<>(Collections.emptyList());
-    }
-
-    @Override
-    public String setEnvPage(String machineId) {
-        return machineHostRepository.findByMachineId(machineId).getEnv();
-    }
-
-    @Override
-    public MachineSshAuth setSshAuthPage(String machineId) {
-        SshAuth sshAuth = machineHostRepository.findByMachineId(machineId).getSshAuth();
-        MachineInfo machineInfo = machineInfoRepository.findByMachineId(machineId);
-        List<String> ipv4List = machineInfo.getNetworkInfos().stream()
-                .map(NetworkInfo::getIpv4).collect(Collectors.toList());
-        List<String> ipv4List1 = machineInfo.getNetworkInfos().stream()
-                .map(NetworkInfo::getPublicIpv4).collect(Collectors.toList());
-        ipv4List.addAll(ipv4List1);
-        return new MachineSshAuth(sshAuth, ipv4List);
-    }
-
-    @Override
-    public void setNotifyPage(String machineId) {
-    }
-
-    @Override
-    public MachineHost sshTerminalPage(String machineId) {
-        return machineHostRepository.findByMachineId(machineId);
-    }
-
-    @Override
-    public MachineInfoVO hostDetailPage(String machineId) {
-        MachineInfo machineInfo = machineInfoRepository.findByMachineId(machineId);
-        if (machineInfo != null) {
-            return new MachineInfoVO(machineInfo);
-        }
-
-        return null;
-    }
-}

+ 81 - 33
web/src/main/java/cn/reghao/devops/web/mgr/machine/service/impl/MachineServiceImpl.java

@@ -1,5 +1,8 @@
 package cn.reghao.devops.web.mgr.machine.service.impl;
 
+import cn.reghao.devops.common.msg.constant.NodeStatus;
+import cn.reghao.devops.common.msg.event.EvtAgentHeartbeat;
+import cn.reghao.devops.common.msg.event.EvtAgentStart;
 import cn.reghao.devops.web.mgr.app.service.AppDeployService;
 import cn.reghao.devops.web.mgr.machine.db.query.MachineQuery;
 import cn.reghao.devops.web.mgr.machine.db.repository.MachineHostRepository;
@@ -8,6 +11,8 @@ import cn.reghao.devops.web.mgr.machine.model.po.MachineHost;
 import cn.reghao.devops.web.mgr.machine.model.po.MachineInfo;
 import cn.reghao.devops.web.mgr.machine.model.po.SshAuth;
 import cn.reghao.devops.web.mgr.machine.service.MachineService;
+import cn.reghao.jutil.jdk.machine.data.detail.DiskDetail;
+import cn.reghao.jutil.jdk.machine.data.detail.MemoryDetail;
 import cn.reghao.jutil.jdk.result.Result;
 import cn.reghao.jutil.jdk.result.ResultStatus;
 import lombok.extern.slf4j.Slf4j;
@@ -15,6 +20,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * @author reghao
@@ -37,73 +44,114 @@ public class MachineServiceImpl implements MachineService {
         this.machineQuery = machineQuery;
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
-    public void setEnv(String machineId, String env) {
-        MachineHost machineHost = machineHostRepository.findByMachineId(machineId);
+    public void addOrUpdateMachine(EvtAgentStart evtAgentStart) {
+        String machineId = evtAgentStart.getMachineId();
+        long timestamp = evtAgentStart.getTimestamp();
+
+        MachineInfo machineInfo = new MachineInfo(evtAgentStart);
+        MachineInfo infoEntity = machineQuery.getMachineInfo(machineId);
+        if (infoEntity == null) {
+            infoEntity = machineInfoRepository.save(machineInfo);
+            machineHostRepository.save(new MachineHost(infoEntity));
+        } else {
+            machineInfo.setId(infoEntity.getId());
+            machineInfo.setCreateTime(infoEntity.getCreateTime());
+            machineInfoRepository.save(machineInfo);
+
+            MachineHost hostEntity = machineQuery.getMachineHost(machineId);
+            String machineIpv4 = infoEntity.getMachineIpv4();
+            if (!hostEntity.getMachineIpv4().equals(machineIpv4)) {
+                hostEntity.setMachineIpv4(machineIpv4);
+                machineHostRepository.save(hostEntity);
+            }
+        }
+    }
+
+    @Override
+    public void updateMachine(EvtAgentHeartbeat evtAgentHeartbeat) {
+        // TODO 根据 EvtAgentHeartbeat 中的信息检查系统负载,CPU,内存,磁盘等使用情况(暂未实现)
+        String machineId = evtAgentHeartbeat.getMachineId();
+        long timestamp = evtAgentHeartbeat.getTimestamp();
+
+        MemoryDetail memoryDetail = evtAgentHeartbeat.getMemoryDetail();
+        List<DiskDetail> diskDetails = evtAgentHeartbeat.getDiskDetails();
+        MachineInfo machineInfo = machineQuery.getMachineInfo(machineId);
+        if (machineInfo != null) {
+            String machineIpv4 = machineInfo.getMachineIpv4();
+            //log.info("heartbeat from {}", machineIpv4);
+        } else {
+            //log.info("heartbeat from {}", machineId);
+        }
+    }
+
+    @Override
+    public void setMachineEnv(String machineId, String env) {
+        MachineHost machineHost = machineQuery.getMachineHost(machineId);
         machineHost.setEnv(env);
         machineHostRepository.save(machineHost);
     }
 
     @Override
-    public void setSshAuth(String machineId, SshAuth sshAuth) {
+    public void setMachineSshAuth(String machineId, SshAuth sshAuth) {
         // TODO 检测主机可达, 端口可达, 协议正确
         String ipv4 = sshAuth.getIpv4();
         int port = sshAuth.getPort();
 
-        MachineHost machineHost = machineHostRepository.findByMachineId(machineId);
+        MachineHost machineHost = machineQuery.getMachineHost(machineId);
         machineHost.setSshAuth(sshAuth);
         machineHostRepository.save(machineHost);
     }
 
-    @Transactional
-    public Result delete(String machineId) {
-        if (machineQuery.isAgentOnline(machineId)) {
-            return Result.result(ResultStatus.FAIL, "机器当前在线, 不能删除");
+    @Override
+    public Result setMachinesDeprecate(List<String> machineIds) {
+        List<MachineInfo> list = machineQuery.getMachineInfos(machineIds);
+        // TODO 这里并没有调用 save, 但仍会持久化
+        List<MachineInfo> list1 = list.stream()
+                .filter(machineInfo -> !Objects.equals(machineInfo.getStat(), NodeStatus.Online.getCode()))
+                .peek(machineInfo -> machineInfo.setStat(NodeStatus.Deprecated.getCode()))
+                .collect(Collectors.toList());
+
+        if (!list1.isEmpty()) {
+            machineInfoRepository.saveAll(list1);
         }
 
-        machineHostRepository.deleteByMachineId(machineId);
-        machineInfoRepository.deleteByMachineId(machineId);
         return Result.result(ResultStatus.SUCCESS);
     }
 
-    private void deleteMachine(String machineId) {
-        MachineHost machineHost = machineHostRepository.findByMachineId(machineId);
+    @Transactional(rollbackFor = Exception.class)
+    public Result deleteMachine(String machineId) {
+        MachineHost machineHost = machineQuery.getMachineHost(machineId);
+        if (machineHost == null) {
+            return Result.result(ResultStatus.SUCCESS);
+        }
+
+        MachineInfo machineInfo = machineHost.getMachineInfo();
+        if (!machineInfo.getStat().equals(NodeStatus.Deprecated.getCode())) {
+            return Result.result(ResultStatus.FAIL, "只能删除 Deprecated 状态的机器");
+        }
 
-        // AppDeploying -> AppDeployConfig -> MachineInfo
-        // AppDeploying -> AppDeployConfig -> DeployLog
         appDeployService.deleteByMachineHost(machineHost);
         machineHostRepository.deleteByMachineId(machineId);
         machineInfoRepository.deleteByMachineId(machineId);
-    }
-
-    @Transactional
-    @Override
-    public Result updateMachineStat(List<String> machineIds) {
-        for (String machineId : machineIds) {
-            MachineInfo machineInfo = machineInfoRepository.findByMachineId(machineId);
-            if (machineInfo != null && machineInfo.getStat() != 1) {
-                machineInfoRepository.updateMachineInfoByMachineId(machineId, 4);
-            }
-        }
-
         return Result.result(ResultStatus.SUCCESS);
     }
 
     @Override
     public void agentShutdown(String machineId) {
-        MachineInfo machineInfo = machineInfoRepository.findByMachineId(machineId);
+        MachineInfo machineInfo = machineQuery.getMachineInfo(machineId);
         if (machineInfo != null) {
-            machineInfo.setStat(2);
+            machineInfo.setStat(NodeStatus.Offline.getCode());
             machineInfoRepository.save(machineInfo);
         }
     }
 
     @Override
     public void shutdown() {
-        List<MachineInfo> list = machineInfoRepository.findByStat(1);
-        list.forEach(machineInfo -> {
-            machineInfo.setStat(2);
-            machineInfoRepository.save(machineInfo);
-        });
+        List<MachineInfo> list = machineQuery.getMachineInfos(NodeStatus.Online.getCode()).stream()
+                .peek(machineInfo -> machineInfo.setStat(NodeStatus.Offline.getCode()))
+                .collect(Collectors.toList());
+        machineInfoRepository.saveAll(list);
     }
 }

+ 4 - 4
web/src/main/java/cn/reghao/devops/web/ws/EventDispatcherConfig.java

@@ -1,10 +1,10 @@
 package cn.reghao.devops.web.ws;
 
 import cn.reghao.devops.web.mgr.app.service.AppDeployService;
+import cn.reghao.devops.web.mgr.machine.service.MachineService;
 import cn.reghao.devops.web.ws.event.EvtAgentHeartbeatHandler;
 import cn.reghao.devops.web.ws.event.EvtAgentStartHandler;
 import cn.reghao.devops.web.ws.event.EvtAppStatResultHandler;
-import cn.reghao.devops.web.ws.event.MachineEventService;
 import cn.reghao.devops.common.msg.event.EvtAgentHeartbeat;
 import cn.reghao.devops.common.msg.event.EvtAgentStart;
 import cn.reghao.devops.common.msg.event.EvtAppStatResult;
@@ -19,10 +19,10 @@ import org.springframework.context.annotation.Configuration;
 @Configuration
 public class EventDispatcherConfig {
     @Bean
-    public EventDispatcher eventDispatcher(MachineEventService machineEventService, AppDeployService appDeployService) {
+    public EventDispatcher eventDispatcher(MachineService machineService, AppDeployService appDeployService) {
         EventDispatcher dispatcher = new EventDispatcher();
-        dispatcher.register(EvtAgentStart.class, new EvtAgentStartHandler(machineEventService));
-        dispatcher.register(EvtAgentHeartbeat.class, new EvtAgentHeartbeatHandler(machineEventService));
+        dispatcher.register(EvtAgentStart.class, new EvtAgentStartHandler(machineService));
+        dispatcher.register(EvtAgentHeartbeat.class, new EvtAgentHeartbeatHandler(machineService));
 
         dispatcher.register(EvtAppStatResult.class, new EvtAppStatResultHandler(appDeployService));
         return dispatcher;

+ 5 - 4
web/src/main/java/cn/reghao/devops/web/ws/event/EvtAgentHeartbeatHandler.java

@@ -1,5 +1,6 @@
 package cn.reghao.devops.web.ws.event;
 
+import cn.reghao.devops.web.mgr.machine.service.MachineService;
 import cn.reghao.jutil.jdk.event.message.Event;
 import cn.reghao.jutil.jdk.event.handler.Handler;
 import cn.reghao.devops.common.msg.event.EvtAgentHeartbeat;
@@ -11,15 +12,15 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class EvtAgentHeartbeatHandler extends Handler {
-    private final MachineEventService machineEventService;
+    private final MachineService machineService;
 
-    public EvtAgentHeartbeatHandler(MachineEventService machineEventService) {
-        this.machineEventService = machineEventService;
+    public EvtAgentHeartbeatHandler(MachineService machineService) {
+        this.machineService = machineService;
     }
 
     @Override
     public void handle(Event evt) {
         EvtAgentHeartbeat machineStat = (EvtAgentHeartbeat) evt;
-        machineEventService.heartbeat(machineStat);
+        machineService.updateMachine(machineStat);
     }
 }

+ 5 - 4
web/src/main/java/cn/reghao/devops/web/ws/event/EvtAgentStartHandler.java

@@ -1,5 +1,6 @@
 package cn.reghao.devops.web.ws.event;
 
+import cn.reghao.devops.web.mgr.machine.service.MachineService;
 import cn.reghao.jutil.jdk.event.message.Event;
 import cn.reghao.jutil.jdk.event.handler.Handler;
 import cn.reghao.devops.common.msg.event.EvtAgentStart;
@@ -11,15 +12,15 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class EvtAgentStartHandler extends Handler {
-    private final MachineEventService machineEventService;
+    private final MachineService machineService;
 
-    public EvtAgentStartHandler(MachineEventService machineEventService) {
-        this.machineEventService = machineEventService;
+    public EvtAgentStartHandler(MachineService machineService) {
+        this.machineService = machineService;
     }
 
     @Override
     public void handle(Event evt) {
         EvtAgentStart machineDetail = (EvtAgentStart) evt;
-        machineEventService.start(machineDetail);
+        machineService.addOrUpdateMachine(machineDetail);
     }
 }

+ 5 - 56
web/src/main/java/cn/reghao/devops/web/ws/event/MachineEventService.java

@@ -5,15 +5,13 @@ import cn.reghao.devops.web.mgr.app.service.AppRunService;
 import cn.reghao.devops.common.agent.app.dto.AppInfo;
 import cn.reghao.devops.common.msg.event.EvtAgentHeartbeat;
 import cn.reghao.devops.common.msg.event.EvtAgentStart;
-import cn.reghao.devops.web.mgr.machine.db.repository.MachineHostRepository;
-import cn.reghao.devops.web.mgr.machine.db.repository.MachineInfoRepository;
-import cn.reghao.devops.web.mgr.machine.model.po.MachineHost;
+import cn.reghao.devops.web.mgr.machine.db.query.MachineQuery;
 import cn.reghao.devops.web.mgr.machine.model.po.MachineInfo;
+import cn.reghao.devops.web.mgr.machine.service.MachineService;
 import cn.reghao.jutil.jdk.machine.data.detail.DiskDetail;
 import cn.reghao.jutil.jdk.machine.data.detail.MemoryDetail;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -21,65 +19,16 @@ import java.util.List;
  * @author reghao
  * @date 2021-10-15 16:39:48
  */
-@Slf4j
-@Service
 public class MachineEventService {
-    private final MachineInfoRepository machineInfoRepository;
-    private final MachineHostRepository machineHostRepository;
-    private final AppDeployQuery appDeployQuery;
-    private final AppRunService appRunService;
+    private AppDeployQuery appDeployQuery;
+    private AppRunService appRunService;
 
-    public MachineEventService(MachineInfoRepository machineInfoRepository, MachineHostRepository machineHostRepository,
-                               AppDeployQuery appDeployQuery, AppRunService appRunService) {
-        this.machineInfoRepository = machineInfoRepository;
-        this.machineHostRepository = machineHostRepository;
-        this.appDeployQuery = appDeployQuery;
-        this.appRunService = appRunService;
-    }
-
-    @Transactional(rollbackFor = Exception.class)
     public void start(EvtAgentStart evtAgentStart) {
-        String machineId = evtAgentStart.getMachineId();
-        long timestamp = evtAgentStart.getTimestamp();
-
-        MachineInfo machineInfo = new MachineInfo(evtAgentStart);
-        MachineInfo infoEntity = machineInfoRepository.findByMachineId(machineId);
-        if (infoEntity == null) {
-            infoEntity = machineInfoRepository.save(machineInfo);
-            machineHostRepository.save(new MachineHost(infoEntity));
-        } else {
-            machineInfo.setId(infoEntity.getId());
-            machineInfo.setCreateTime(infoEntity.getCreateTime());
-            machineInfoRepository.save(machineInfo);
-
-            MachineHost hostEntity = machineHostRepository.findByMachineId(machineId);
-            String machineIpv4 = infoEntity.getMachineIpv4();
-            if (!hostEntity.getMachineIpv4().equals(machineIpv4)) {
-                hostEntity.setMachineIpv4(machineIpv4);
-                machineHostRepository.save(hostEntity);
-            }
-        }
-
         // 向 agent 发送 EvtAppStat 事件, 获取应用的状态
+        String machineId = evtAgentStart.getMachineId();
         List<AppInfo> list = appDeployQuery.getAppsByMachineId(machineId);
         if (!list.isEmpty()) {
             appRunService.getStat(machineId, list);
         }
     }
-
-    // TODO 根据 EvtAgentHeartbeat 中的信息检查系统负载,CPU,内存,磁盘等使用情况(暂未实现)
-    public void heartbeat(EvtAgentHeartbeat evtAgentHeartbeat) {
-        String machineId = evtAgentHeartbeat.getMachineId();
-        long timestamp = evtAgentHeartbeat.getTimestamp();
-
-        MemoryDetail memoryDetail = evtAgentHeartbeat.getMemoryDetail();
-        List<DiskDetail> diskDetails = evtAgentHeartbeat.getDiskDetails();
-        MachineInfo machineInfo = machineInfoRepository.findByMachineId(machineId);
-        if (machineInfo != null) {
-            String machineIpv4 = machineInfo.getMachineIpv4();
-            //log.info("heartbeat from {}", machineIpv4);
-        } else {
-            //log.info("heartbeat from {}", machineId);
-        }
-    }
 }

+ 2 - 0
web/src/main/resources/templates/devops/machine/host/index.html

@@ -60,6 +60,7 @@
                     <th data-field="osName">系统名字</th>
                     <th data-field="osVersion">系统版本</th>
                     <th data-field="agentVersion">Agent 版本</th>
+                    <th data-field="used">使用量</th>
                     <th>所属环境</th>
                     <th>SSH 认证</th>
                     <th>操作</th>
@@ -76,6 +77,7 @@
                     <td th:text="${item.osName}">系统名字</td>
                     <td th:text="${item.osVersion}">系统版本</td>
                     <td th:text="${item.agentVersion}">Agent 版本</td>
+                    <td style="color: red" th:text="${item.used}">使用量</td>
                     <td>
                         <a class="open-popup" data-title="设置机器所属环境"
                            th:attr="data-url=@{'/machine/host/env/'+${item.machineId}}" href="#">设置</a>

+ 0 - 40
web/src/test/java/cn/reghao/devops/web/devops/DockerTest.java

@@ -1,17 +1,9 @@
 package cn.reghao.devops.web.devops;
 
-import cn.reghao.devops.common.docker.Docker;
 import cn.reghao.devops.common.docker.DockerImpl;
-import cn.reghao.devops.common.docker.po.ContainerInfo;
-import cn.reghao.devops.common.docker.po.ImageInfo;
-import cn.reghao.jutil.jdk.thread.ThreadPoolWrapper;
 import org.junit.Test;
 
-import java.util.*;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
 import java.util.regex.Pattern;
-import java.util.stream.Collectors;
 
 /**
  * @author reghao
@@ -38,37 +30,5 @@ public class DockerTest {
     @Test
     public void dockerTest() {
         DockerImpl docker = new DockerImpl();
-
-        Map<String, ImageInfo> map = docker.images().stream().collect(Collectors.toMap(ImageInfo::getImageId, info -> info));
-        List<ContainerInfo> containerInfos = docker.psAll();
-        for (ContainerInfo containerInfo : containerInfos) {
-            String imageId = containerInfo.getImageId();
-            ImageInfo imageInfo = map.remove(imageId);
-        }
-        //map.keySet().forEach(docker::imageRm);
-
-        ImageCleanTask cleanTask = new ImageCleanTask(docker);
-        ScheduledExecutorService threadPool = ThreadPoolWrapper.scheduledThreadPool("image-cleaner", 1);
-        threadPool.scheduleAtFixedRate(cleanTask, 1, 12, TimeUnit.HOURS);
-    }
-
-    class ImageCleanTask implements Runnable {
-        private Docker docker;
-
-        public ImageCleanTask(Docker docker) {
-            this.docker = docker;
-        }
-
-        @Override
-        public void run() {
-            Map<String, ImageInfo> map = docker.images().stream().collect(Collectors.toMap(ImageInfo::getImageId, info -> info));
-            List<ContainerInfo> containerInfos = docker.psAll();
-            for (ContainerInfo containerInfo : containerInfos) {
-                String imageId = containerInfo.getImageId();
-                ImageInfo imageInfo = map.remove(imageId);
-            }
-
-            //map.keySet().forEach(docker::imageRm);
-        }
     }
 }