reghao пре 6 месеци
родитељ
комит
51376ae6d4
17 измењених фајлова са 114 додато и 130 уклоњено
  1. 1 2
      common/src/main/java/cn/reghao/devops/common/msg/constant/NodeStatus.java
  2. 1 1
      mgr/src/main/java/cn/reghao/devops/mgr/admin/controller/HomeController.java
  3. 1 1
      mgr/src/main/java/cn/reghao/devops/mgr/app/controller/page/AppDeployConfigPageController.java
  4. 1 1
      mgr/src/main/java/cn/reghao/devops/mgr/app/db/query/impl/AppDeployQueryImpl.java
  5. 1 1
      mgr/src/main/java/cn/reghao/devops/mgr/app/service/bd/impl/DeployAppImpl.java
  6. 1 1
      mgr/src/main/java/cn/reghao/devops/mgr/app/service/impl/AppDeployServiceImpl.java
  7. 1 1
      mgr/src/main/java/cn/reghao/devops/mgr/app/service/impl/AppRunServiceImpl.java
  8. 1 1
      mgr/src/main/java/cn/reghao/devops/mgr/config/SpringLifecycle.java
  9. 9 9
      mgr/src/main/java/cn/reghao/devops/mgr/machine/controller/MachineController.java
  10. 1 2
      mgr/src/main/java/cn/reghao/devops/mgr/machine/db/repository/MachineHostRepository.java
  11. 4 2
      mgr/src/main/java/cn/reghao/devops/mgr/machine/db/repository/MachineInfoRepository.java
  12. 6 8
      mgr/src/main/java/cn/reghao/devops/mgr/machine/model/po/MachineInfo.java
  13. 15 3
      mgr/src/main/java/cn/reghao/devops/mgr/machine/service/MachineQuery.java
  14. 24 3
      mgr/src/main/java/cn/reghao/devops/mgr/machine/service/MachineService.java
  15. 13 20
      mgr/src/main/java/cn/reghao/devops/mgr/machine/service/impl/MachineQueryImpl.java
  16. 29 68
      mgr/src/main/java/cn/reghao/devops/mgr/machine/service/impl/MachineServiceImpl.java
  17. 5 6
      mgr/src/test/java/cn/reghao/devops/mgr/devops/MachineTest.java

+ 1 - 2
common/src/main/java/cn/reghao/devops/common/msg/constant/NodeStatus.java

@@ -7,8 +7,7 @@ package cn.reghao.devops.common.msg.constant;
 public enum NodeStatus {
     Online(1),
     Offline(2),
-    Timeout(3),
-    Deprecated(4);
+    Deprecated(3);
 
     private final Integer code;
 

+ 1 - 1
mgr/src/main/java/cn/reghao/devops/mgr/admin/controller/HomeController.java

@@ -8,7 +8,7 @@ import cn.reghao.devops.mgr.admin.model.po.User;
 import cn.reghao.devops.mgr.admin.service.HomeService;
 import cn.reghao.devops.mgr.admin.service.UserContext;
 import cn.reghao.devops.mgr.admin.service.SysMessageService;
-import cn.reghao.devops.mgr.machine.db.query.MachineQuery;
+import cn.reghao.devops.mgr.machine.service.MachineQuery;
 import cn.reghao.devops.mgr.machine.model.vo.MachineStat;
 import cn.reghao.jutil.jdk.jvm.JVM;
 import cn.reghao.jutil.jdk.jvm.model.JvmInfo;

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

@@ -6,7 +6,7 @@ import cn.reghao.devops.mgr.app.model.po.config.AppConfig;
 import cn.reghao.devops.mgr.app.model.po.config.AppDeployConfig;
 import cn.reghao.devops.mgr.app.model.vo.AppDeployConfigVO;
 import cn.reghao.devops.common.util.KeyValue;
-import cn.reghao.devops.mgr.machine.db.query.MachineQuery;
+import cn.reghao.devops.mgr.machine.service.MachineQuery;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;

+ 1 - 1
mgr/src/main/java/cn/reghao/devops/mgr/app/db/query/impl/AppDeployQueryImpl.java

@@ -15,7 +15,7 @@ import cn.reghao.devops.mgr.app.model.po.log.DeployLog;
 import cn.reghao.devops.mgr.app.model.vo.AppDeployingNodeVO;
 import cn.reghao.devops.mgr.app.model.vo.AppRunningNode;
 import cn.reghao.devops.mgr.app.model.vo.AppRunning;
-import cn.reghao.devops.mgr.machine.db.query.MachineQuery;
+import cn.reghao.devops.mgr.machine.service.MachineQuery;
 import cn.reghao.devops.mgr.machine.model.po.MachineHost;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;

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

@@ -13,7 +13,7 @@ import cn.reghao.devops.mgr.app.model.po.config.AppDeployConfig;
 import cn.reghao.devops.mgr.app.model.po.log.BuildLog;
 import cn.reghao.devops.mgr.app.service.bd.DeployApp;
 import cn.reghao.devops.mgr.app.service.AppDeployService;
-import cn.reghao.devops.mgr.machine.db.query.MachineQuery;
+import cn.reghao.devops.mgr.machine.service.MachineQuery;
 import cn.reghao.devops.common.msg.event.EvtAppDeploy;
 import cn.reghao.devops.common.msg.event.EvtAppStatResult;
 import cn.reghao.devops.mgr.ws.WsSender;

+ 1 - 1
mgr/src/main/java/cn/reghao/devops/mgr/app/service/impl/AppDeployServiceImpl.java

@@ -21,7 +21,7 @@ import cn.reghao.devops.mgr.app.model.po.log.DeployLog;
 import cn.reghao.devops.mgr.app.service.bd.BuildDeployNotify;
 import cn.reghao.devops.mgr.app.service.AppDeployService;
 import cn.reghao.devops.mgr.app.task.RereshCheckTask;
-import cn.reghao.devops.mgr.machine.db.query.MachineQuery;
+import cn.reghao.devops.mgr.machine.service.MachineQuery;
 import cn.reghao.devops.mgr.machine.model.po.MachineHost;
 import cn.reghao.devops.common.msg.event.EvtAppStatResult;
 import cn.reghao.jutil.jdk.converter.DateTimeConverter;

+ 1 - 1
mgr/src/main/java/cn/reghao/devops/mgr/app/service/impl/AppRunServiceImpl.java

@@ -7,7 +7,7 @@ import cn.reghao.devops.mgr.app.db.query.AppBuildQuery;
 import cn.reghao.devops.mgr.app.model.po.config.AppConfig;
 import cn.reghao.devops.mgr.app.service.PermissionCheck;
 import cn.reghao.devops.mgr.app.service.AppRunService;
-import cn.reghao.devops.mgr.machine.db.query.MachineQuery;
+import cn.reghao.devops.mgr.machine.service.MachineQuery;
 import cn.reghao.devops.mgr.ws.WsSender;
 import cn.reghao.jutil.jdk.event.message.EventMessage;
 import lombok.extern.slf4j.Slf4j;

+ 1 - 1
mgr/src/main/java/cn/reghao/devops/mgr/config/SpringLifecycle.java

@@ -51,7 +51,7 @@ public class SpringLifecycle implements ApplicationRunner, DisposableBean {
 
     @Override
     public void destroy() {
-        machineService.shutdown();
+        machineService.setMachineOffline();
         log.info("devops-mgr shutdown...");
     }
 

+ 9 - 9
mgr/src/main/java/cn/reghao/devops/mgr/machine/controller/MachineController.java

@@ -1,7 +1,7 @@
 package cn.reghao.devops.mgr.machine.controller;
 
 import cn.reghao.devops.common.util.KeyValue;
-import cn.reghao.devops.mgr.machine.db.query.MachineQuery;
+import cn.reghao.devops.mgr.machine.service.MachineQuery;
 import cn.reghao.devops.mgr.machine.service.MachineService;
 import cn.reghao.devops.mgr.util.DefaultSetting;
 import cn.reghao.devops.mgr.util.PageSort;
@@ -28,7 +28,7 @@ import java.util.*;
  * @date 2019-08-30 18:49:15
  */
 @Slf4j
-@Api(tags = "机器节点页面")
+@Api(tags = "机器节点页面和接口")
 @Controller
 @RequestMapping("/machine/host")
 public class MachineController {
@@ -43,7 +43,7 @@ public class MachineController {
     @ApiOperation(value = "机器节点页面", notes = "N")
     @PreAuthorize("hasRole('ROLE_ADMIN')")
     @GetMapping
-    public String indexPage(@RequestParam(value = "env", required = false) String env, Model model) {
+    public String machineListPage(@RequestParam(value = "env", required = false) String env, Model model) {
         if (env == null) {
             env = DefaultSetting.getDefaultEnv();
         }
@@ -60,16 +60,16 @@ public class MachineController {
     @PreAuthorize("hasRole('ROLE_ADMIN')")
     @PostMapping(value = "/deprecate/{machineId}", produces = MediaType.APPLICATION_JSON_VALUE)
     @ResponseBody
-    public String deleteAll(@PathVariable("machineId") String machineId) {
-        Result result = machineService.setMachinesDeprecate(List.of(machineId));
-        return WebResult.result(result);
+    public String setMachineDeprecate(@PathVariable("machineId") String machineId) {
+        machineService.setMachineDeprecate(machineId);
+        return WebResult.success();
     }
 
     @ApiOperation(value = "删除机器", notes = "N")
     @PreAuthorize("hasRole('ROLE_ADMIN')")
     @DeleteMapping(value = "/{machineId}", produces = MediaType.APPLICATION_JSON_VALUE)
     @ResponseBody
-    public String machine(@PathVariable("machineId") String machineId) {
+    public String deleteMachine(@PathVariable("machineId") String machineId) {
         if (machineQuery.isAgentOnline(machineId)) {
             return WebResult.failWithMsg("机器处于在线状态, 不能删除");
         }
@@ -90,7 +90,7 @@ public class MachineController {
     @ApiOperation(value = "机器所属环境设置页面", notes = "N")
     @PreAuthorize("hasRole('ROLE_ADMIN')")
     @GetMapping("/env/{machineId}")
-    public String hostEditPage(@PathVariable("machineId") String machineId, Model model) {
+    public String machineEnvPage(@PathVariable("machineId") String machineId, Model model) {
         List<KeyValue> envs = new ArrayList<>();
         for (EnvType envType : EnvType.values()) {
             envs.add(new KeyValue(envType.name(), envType.name()));
@@ -108,7 +108,7 @@ public class MachineController {
     @PreAuthorize("hasRole('ROLE_ADMIN')")
     @PostMapping(value = "/env/{machineId}", produces = MediaType.APPLICATION_JSON_VALUE)
     @ResponseBody
-    public String editExtraMachineInfo(@PathVariable("machineId") String machineId, @RequestParam("env") String env) {
+    public String setMachineEnv(@PathVariable("machineId") String machineId, @RequestParam("env") String env) {
         machineService.setMachineEnv(machineId, env);
         return WebResult.success();
     }

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

@@ -10,8 +10,7 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
  * @author reghao
  * @date 2020-01-21 14:53:03
  */
-public interface MachineHostRepository
-        extends JpaRepository<MachineHost, Integer>, JpaSpecificationExecutor<MachineHost> {
+public interface MachineHostRepository extends JpaRepository<MachineHost, Integer>, JpaSpecificationExecutor<MachineHost> {
     void deleteByMachineId(String machineId);
 
     MachineHost findByMachineId(String machineId);

+ 4 - 2
mgr/src/main/java/cn/reghao/devops/mgr/machine/db/repository/MachineInfoRepository.java

@@ -15,9 +15,11 @@ import java.util.List;
  */
 public interface MachineInfoRepository extends JpaRepository<MachineInfo, Integer>, JpaSpecificationExecutor<MachineInfo> {
     void deleteByMachineId(String machineId);
-    @Query("update MachineInfo u set u.stat=:stat where u.machineId=:machineId")
+    @Query("update MachineInfo u " +
+            "set u.stat=:stat " +
+            "where u.machineId=:machineId")
     @Modifying
-    void updateMachineInfoByMachineId(@Param("machineId") String machineId, @Param("stat") int stat);
+    void updateMachineStat(@Param("machineId") String machineId, @Param("stat") int stat);
 
     MachineInfo findByMachineId(String machineId);
     List<MachineInfo> findByStat(int stat);

+ 6 - 8
mgr/src/main/java/cn/reghao/devops/mgr/machine/model/po/MachineInfo.java

@@ -3,7 +3,6 @@ package cn.reghao.devops.mgr.machine.model.po;
 import cn.reghao.devops.common.msg.constant.NodeStatus;
 import cn.reghao.devops.mgr.util.BaseEntity;
 import cn.reghao.devops.common.msg.event.EvtAgentStart;
-import cn.reghao.devops.mgr.util.DefaultSetting;
 import cn.reghao.jutil.jdk.machine.data.detail.*;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
@@ -40,21 +39,20 @@ public class MachineInfo extends BaseEntity {
     private Long bootTime;
     @NotNull
     private String agentVersion;
+    @NotNull
     private Integer stat;
-    private String env;
 
-    public MachineInfo(EvtAgentStart machineDetail) {
-        this.machineId = machineDetail.getMachineId();
-        OsDetail osDetail = machineDetail.getOsDetail();
+    public MachineInfo(EvtAgentStart evtAgentStart) {
+        this.machineId = evtAgentStart.getMachineId();
+        OsDetail osDetail = evtAgentStart.getOsDetail();
         this.arch = osDetail.getArch();
         this.name = osDetail.getName();
         this.version = osDetail.getVersion();
         this.byteOrder = osDetail.getByteOrder();
         this.bootTime = osDetail.getBootTime();
-        this.agentVersion = machineDetail.getAppVersion().getCommitId();
+        this.agentVersion = evtAgentStart.getAppVersion().getCommitId();
         this.stat = NodeStatus.Online.getCode();
-        setNetworkInfos(machineDetail.getNetworkDetails());
-        this.env = DefaultSetting.getDefaultEnv();
+        setNetworkInfos(evtAgentStart.getNetworkDetails());
     }
 
     private void setNetworkInfos(List<NetworkDetail> networkDetails) {

+ 15 - 3
mgr/src/main/java/cn/reghao/devops/mgr/machine/db/query/MachineQuery.java → mgr/src/main/java/cn/reghao/devops/mgr/machine/service/MachineQuery.java

@@ -1,4 +1,4 @@
-package cn.reghao.devops.mgr.machine.db.query;
+package cn.reghao.devops.mgr.machine.service;
 
 import cn.reghao.devops.common.util.KeyValue;
 import cn.reghao.devops.mgr.machine.model.po.MachineHost;
@@ -16,12 +16,24 @@ import java.util.List;
  */
 public interface MachineQuery {
     Page<MachineDetail> getMachineHostByPage(String env, Pageable pageable);
+    /**
+     * 获取节点上部署的应用列表
+     *
+     * @param
+     * @return
+     * @date 2025-09-19 14:52:49
+     */
     List<KeyValue> getMachineApps(String machineId);
+    /**
+     * 获取机器节点的状态列表
+     *
+     * @param
+     * @return
+     * @date 2025-09-19 15:37:17
+     */
     List<MachineStat> getMachineStats();
     MachineHost getMachineHost(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);
 }

+ 24 - 3
mgr/src/main/java/cn/reghao/devops/mgr/machine/service/MachineService.java

@@ -15,8 +15,29 @@ public interface MachineService {
     void addOrUpdateMachine(EvtAgentStart evtAgentStart);
     void updateMachine(EvtAgentHeartbeat evtAgentHeartbeat);
     void setMachineEnv(String machineId, String env);
-    Result setMachinesDeprecate(List<String> machineIds);
-    Result deleteMachine(String machineId);
+    /**
+     * 将 Offline 状态的节点设置为 Deprecated
+     *
+     * @param
+     * @return
+     * @date 2025-09-19 15:17:30
+     */
+    void setMachineDeprecate(String machineId);
+    /**
+     * 根据 websocket 的连接状态设置 devops-agent 的状态
+     *
+     * @param
+     * @return
+     * @date 2025-09-19 14:53:56
+     */
     void setAgentStatus(String machineId, NodeStatus nodeStatus);
-    void shutdown();
+    /**
+     * mgr 进程结束时将所有 Online 状态的 agent 节点设置为 Offline
+     *
+     * @param
+     * @return
+     * @date 2025-06-05 11:34:21
+     */
+    void setMachineOffline();
+    Result deleteMachine(String machineId);
 }

+ 13 - 20
mgr/src/main/java/cn/reghao/devops/mgr/machine/db/query/impl/MachineQueryImpl.java → mgr/src/main/java/cn/reghao/devops/mgr/machine/service/impl/MachineQueryImpl.java

@@ -1,9 +1,9 @@
-package cn.reghao.devops.mgr.machine.db.query.impl;
+package cn.reghao.devops.mgr.machine.service.impl;
 
 import cn.reghao.devops.common.msg.constant.NodeStatus;
 import cn.reghao.devops.mgr.app.db.repository.config.AppDeployConfigRepository;
 import cn.reghao.devops.common.util.KeyValue;
-import cn.reghao.devops.mgr.machine.db.query.MachineQuery;
+import cn.reghao.devops.mgr.machine.service.MachineQuery;
 import cn.reghao.devops.mgr.machine.db.repository.MachineHostRepository;
 import cn.reghao.devops.mgr.machine.db.repository.MachineInfoRepository;
 import cn.reghao.devops.mgr.machine.model.po.MachineHost;
@@ -95,8 +95,6 @@ public class MachineQueryImpl implements MachineQuery {
         int stat = machineInfo.getStat();
         if (stat == NodeStatus.Offline.getCode()) {
             status = NodeStatus.Offline.name();
-        } else if (stat == NodeStatus.Timeout.getCode()) {
-            status = NodeStatus.Timeout.name();
         } else if (stat == NodeStatus.Deprecated.getCode()) {
             status = NodeStatus.Deprecated.name();
         }
@@ -109,29 +107,24 @@ public class MachineQueryImpl implements MachineQuery {
         return machineHostRepository.findByMachineId(machineId);
     }
 
-    @Override
-    public MachineInfo getMachineInfo(String machineId) {
-        MachineInfo machineInfo = machineInfoRepository.findByMachineId(machineId);
-        return machineInfo;
-    }
-
     @Override
     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]));
-            }
+        if (machineIds.isEmpty()) {
+            return Collections.emptyList();
+        }
+
+        Specification<MachineInfo> specification = (root, query, cb) -> {
+            List<Predicate> list = new ArrayList<>();
+            Expression<String> exp = root.get("machineId");
+            // SQL IN 查询
+            list.add(exp.in(machineIds));
+            return cb.and(list.toArray(new Predicate[0]));
         };
 
         return machineInfoRepository.findAll(specification);
     }
 
-    @Override
+    //@Override
     public List<MachineInfo> getMachineInfos(int stat) {
         List<MachineInfo> list = machineInfoRepository.findByStat(NodeStatus.Online.getCode());
         return list;

+ 29 - 68
mgr/src/main/java/cn/reghao/devops/mgr/machine/service/impl/MachineServiceImpl.java

@@ -3,14 +3,12 @@ package cn.reghao.devops.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.mgr.machine.db.query.MachineQuery;
+import cn.reghao.devops.mgr.machine.service.MachineQuery;
 import cn.reghao.devops.mgr.machine.db.repository.MachineHostRepository;
 import cn.reghao.devops.mgr.machine.db.repository.MachineInfoRepository;
 import cn.reghao.devops.mgr.machine.model.po.MachineHost;
 import cn.reghao.devops.mgr.machine.model.po.MachineInfo;
 import cn.reghao.devops.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;
@@ -44,41 +42,19 @@ public class MachineServiceImpl implements MachineService {
     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));
+        List<MachineInfo> machineInfoList = machineQuery.getMachineInfos(List.of(machineId));
+        if (machineInfoList.isEmpty()) {
+            MachineInfo machineInfo = new MachineInfo(evtAgentStart);
+            machineInfo = machineInfoRepository.save(machineInfo);
+            machineHostRepository.save(new MachineHost(machineInfo));
         } 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);
-            }
+            machineInfoRepository.updateMachineStat(machineId, NodeStatus.Online.getCode());
         }
     }
 
     @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
@@ -89,59 +65,44 @@ public class MachineServiceImpl implements MachineService {
     }
 
     @Override
-    public Result setMachinesDeprecate(List<String> machineIds) {
-        List<MachineInfo> list = machineQuery.getMachineInfos(machineIds);
-        /*List<MachineInfo> list1 = list.stream()
-                .filter(machineInfo -> !Objects.equals(machineInfo.getStat(), NodeStatus.Online.getCode()))
-                .peek(machineInfo -> machineInfo.setStat(NodeStatus.Deprecated.getCode()))
-                .collect(Collectors.toList());
+    public void setMachineDeprecate(String machineId) {
+        List<MachineInfo> list = machineQuery.getMachineInfos(List.of(machineId));
+        if (!list.isEmpty() && Objects.equals(list.get(0).getStat(), NodeStatus.Offline.getCode())) {
+            machineInfoRepository.updateMachineStat(machineId, NodeStatus.Deprecated.getCode());
+        }
+    }
 
-        if (!list1.isEmpty()) {
-            machineInfoRepository.saveAll(list1);
-        }*/
+    @Override
+    public void setAgentStatus(String machineId, NodeStatus nodeStatus) {
+        machineInfoRepository.updateMachineStat(machineId, nodeStatus.getCode());
+    }
 
-        return Result.result(ResultStatus.SUCCESS);
+    @Override
+    public void setMachineOffline() {
+        List<MachineInfo> list = machineInfoRepository.findByStat(NodeStatus.Online.getCode()).stream()
+                .filter(machineInfo -> !machineInfo.getMachineId().startsWith("oss"))
+                .collect(Collectors.toList());
+
+        list.forEach(machineInfo -> {
+            String machineId = machineInfo.getMachineId();
+            machineInfoRepository.updateMachineStat(machineId, NodeStatus.Offline.getCode());
+        });
     }
 
     @Transactional(rollbackFor = Exception.class)
     public Result deleteMachine(String machineId) {
         MachineHost machineHost = machineQuery.getMachineHost(machineId);
         if (machineHost == null) {
-            return Result.result(ResultStatus.SUCCESS);
+            return Result.result(ResultStatus.FAIL, "节点不存在");
         }
 
         MachineInfo machineInfo = machineHost.getMachineInfo();
         if (!machineInfo.getStat().equals(NodeStatus.Deprecated.getCode())) {
-            return Result.result(ResultStatus.FAIL, "只能删除 Deprecated 状态的机器");
+            return Result.result(ResultStatus.FAIL, "只能删除 Deprecated 状态的节点");
         }
 
         machineHostRepository.deleteByMachineId(machineId);
         machineInfoRepository.deleteByMachineId(machineId);
         return Result.result(ResultStatus.SUCCESS);
     }
-
-    @Override
-    public void setAgentStatus(String machineId, NodeStatus nodeStatus) {
-        MachineInfo machineInfo = machineQuery.getMachineInfo(machineId);
-        if (machineInfo != null) {
-            machineInfo.setStat(nodeStatus.getCode());
-            machineInfoRepository.save(machineInfo);
-        }
-    }
-
-    /**
-     * mgr 进程结束时将所有 Online 状态的 agent 节点设置为 Offline
-     *
-     * @param
-     * @return
-     * @date 2025-06-05 11:34:21
-     */
-    @Override
-    public void shutdown() {
-        List<MachineInfo> list = machineQuery.getMachineInfos(NodeStatus.Online.getCode()).stream()
-                .filter(machineInfo -> !machineInfo.getMachineId().startsWith("oss"))
-                .peek(machineInfo -> machineInfo.setStat(NodeStatus.Offline.getCode()))
-                .collect(Collectors.toList());
-        machineInfoRepository.saveAll(list);
-    }
 }

+ 5 - 6
mgr/src/test/java/cn/reghao/devops/mgr/devops/MachineTest.java

@@ -4,7 +4,7 @@ import cn.reghao.devops.common.machine.Machine;
 import cn.reghao.devops.common.msg.constant.NodeStatus;
 import cn.reghao.devops.common.msg.event.EvtAgentStart;
 import cn.reghao.devops.mgr.MgrApplication;
-import cn.reghao.devops.mgr.machine.db.query.MachineQuery;
+import cn.reghao.devops.mgr.machine.service.MachineQuery;
 import cn.reghao.devops.mgr.machine.db.repository.MachineInfoRepository;
 import cn.reghao.devops.mgr.machine.model.po.MachineInfo;
 import cn.reghao.devops.mgr.machine.service.MachineService;
@@ -17,7 +17,6 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -51,10 +50,10 @@ public class MachineTest {
             NetworkDetail networkDetail = evtAgentStart.getNetworkDetails().get(0);
             networkDetail.setPubicIpv4(ipv4);
             networkDetail.setIpv4(ipv4);
+
             evtAgentStart.setMachineId(machineId);
             evtAgentStart.setNetworkDetails(List.of(networkDetail));
-            evtAgentStart.setDiskDetails(new ArrayList<>());
-            machineService.addOrUpdateMachine(evtAgentStart);
+            //machineService.addOrUpdateMachine(evtAgentStart);
         });
     }
 
@@ -64,10 +63,10 @@ public class MachineTest {
     MachineInfoRepository machineInfoRepository;
     @Test
     public void shutdownOssMachineTest() {
-        List<MachineInfo> list = machineQuery.getMachineInfos(NodeStatus.Online.getCode()).stream()
+        List<MachineInfo> list = machineInfoRepository.findByStat(NodeStatus.Online.getCode()).stream()
                 .filter(machineInfo -> machineInfo.getMachineId().startsWith("oss"))
                 .peek(machineInfo -> machineInfo.setStat(NodeStatus.Offline.getCode()))
                 .collect(Collectors.toList());
-        machineInfoRepository.saveAll(list);
+        //machineInfoRepository.saveAll(list);
     }
 }