1
0

2 Commits d438021ef7 ... ac6c19e11e

Autor SHA1 Mensagem Data
  reghao ac6c19e11e MachineInfo 的状态在 WebSocketSession 中获取, 尽量达到状态的实时 há 1 dia atrás
  reghao 10dc7c6852 DockerImpl 中的 dockerClient.buildImageCmd() 启用 withPull(true), 在 dockerfile 中的镜像不存在时则拉取 há 1 dia atrás

+ 2 - 0
common/src/main/java/cn/reghao/devops/common/docker/DockerImpl.java

@@ -88,6 +88,7 @@ public class DockerImpl implements Docker {
             textFile.write(dockerfile, dockerfileContent);
             String imageId = dockerClient.buildImageCmd()
                     .withDockerfile(dockerfile)
+                    .withPull(true) // 镜像不存在则拉取
                     // repoTag 格式为 docker.reghao.cn/devops:12345678
                     .withTags(Set.of(repoTag))
                     .start()
@@ -101,6 +102,7 @@ public class DockerImpl implements Docker {
         String dockerfilePath = compileHome + "/Dockerfile";
         dockerClient.buildImageCmd()
                 .withDockerfile(new File(dockerfilePath))
+                .withPull(true) // 镜像不存在则拉取
                 .withTags(Set.of(repoTag))
                 .start()
                 .awaitImageId(300, TimeUnit.SECONDS);

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

@@ -6,9 +6,7 @@ import ch.qos.logback.classic.spi.ILoggingEvent;
 import ch.qos.logback.core.Appender;
 import cn.reghao.devops.common.util.Machine;
 import cn.reghao.devops.mgr.admin.service.LogService;
-import cn.reghao.devops.mgr.config.AppProperties;
 import cn.reghao.devops.mgr.config.log.MyLogbackAppender;
-import cn.reghao.devops.mgr.ops.machine.service.MachineService;
 import cn.reghao.devops.mgr.ops.util.BuilderInit;
 import lombok.extern.slf4j.Slf4j;
 import org.slf4j.LoggerFactory;
@@ -31,14 +29,11 @@ import java.io.IOException;
 @Order(2)
 @Component
 public class SpringLifecycle implements ApplicationRunner, DisposableBean {
-    private final MachineService machineService;
     private final LogService logService;
     private final Environment environment;
     private final BuilderInit builderInit;
 
-    public SpringLifecycle(MachineService machineService, AppProperties appProperties,
-                           LogService logService, Environment environment, BuilderInit builderInit) {
-        this.machineService = machineService;
+    public SpringLifecycle(LogService logService, Environment environment, BuilderInit builderInit) {
         this.logService = logService;
         this.environment = environment;
         this.builderInit = builderInit;
@@ -52,7 +47,6 @@ public class SpringLifecycle implements ApplicationRunner, DisposableBean {
 
     @Override
     public void destroy() {
-        machineService.setMachineOffline();
         log.info("devopsmgr shutdown...");
     }
 

+ 0 - 16
mgr/src/main/java/cn/reghao/devops/mgr/ops/machine/service/MachineService.java

@@ -20,21 +20,5 @@ public interface MachineService {
      * @date 2025-09-19 15:17:30
      */
     Result setMachineDeprecate(String machineId);
-    /**
-     * 根据 websocket 的连接状态设置 devops-agent 的状态
-     *
-     * @param
-     * @return
-     * @date 2025-09-19 14:53:56
-     */
-    void setAgentStatus(String machineId, NodeStatus nodeStatus);
-    /**
-     * mgr 进程结束时将所有 Online 状态的 agent 节点设置为 Offline
-     *
-     * @param
-     * @return
-     * @date 2025-06-05 11:34:21
-     */
-    void setMachineOffline();
     Result deleteMachine(String machineId);
 }

+ 13 - 12
mgr/src/main/java/cn/reghao/devops/mgr/ops/machine/service/impl/MachineQueryImpl.java

@@ -8,6 +8,7 @@ import cn.reghao.devops.mgr.ops.machine.model.po.MachineInfo;
 import cn.reghao.devops.mgr.ops.machine.model.vo.MachineDetail;
 import cn.reghao.devops.mgr.ops.machine.model.vo.MachineStat;
 import cn.reghao.devops.mgr.ops.machine.service.MachineQuery;
+import cn.reghao.devops.mgr.ws.WebSocketSessionManager;
 import cn.reghao.jutil.jdk.converter.DateTimeConverter;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
@@ -27,12 +28,14 @@ import java.util.stream.Collectors;
 @Service
 public class MachineQueryImpl implements MachineQuery {
     private final MachineInfoRepository machineInfoRepository;
-    // TODO MachineQuery 和 AppDeployQuery 存在循环依赖
     private final AppDeployConfigRepository deployConfigRepository;
+    private final WebSocketSessionManager wsSessionManager;
 
-    public MachineQueryImpl(MachineInfoRepository machineInfoRepository, AppDeployConfigRepository deployConfigRepository) {
+    public MachineQueryImpl(MachineInfoRepository machineInfoRepository, AppDeployConfigRepository deployConfigRepository,
+                            WebSocketSessionManager wsSessionManager) {
         this.machineInfoRepository = machineInfoRepository;
         this.deployConfigRepository = deployConfigRepository;
+        this.wsSessionManager = wsSessionManager;
     }
 
     @Override
@@ -50,7 +53,8 @@ public class MachineQueryImpl implements MachineQuery {
             int used = deployConfigRepository.countByMachineInfo(machineInfo);
             long bootTime = machineInfo.getBootTime();
             String bootTimeStr = DateTimeConverter.format(bootTime*1000);
-            String status = getMachineStat(machineInfo);
+            String machineId = machineInfo.getMachineId();
+            String status = getMachineStat(machineId);
             return new MachineDetail(machineInfo, bootTimeStr, status, used);
         });
     }
@@ -70,7 +74,8 @@ public class MachineQueryImpl implements MachineQuery {
             int used = deployConfigRepository.countByMachineInfo(machineInfo);
             long bootTime = machineInfo.getBootTime();
             String bootTimeStr = DateTimeConverter.format(bootTime*1000);
-            String status = getMachineStat(machineInfo);
+            String machineId = machineInfo.getMachineId();
+            String status = getMachineStat(machineId);
             return new MachineDetail(machineInfo, bootTimeStr, status, used);
         }).getContent();
     }
@@ -113,15 +118,11 @@ public class MachineQueryImpl implements MachineQuery {
         return stats;
     }
 
-    private String getMachineStat(MachineInfo machineInfo) {
-        String status = NodeStatus.Online.name();
-        int stat = machineInfo.getStat();
-        if (stat == NodeStatus.Offline.getCode()) {
-            status = NodeStatus.Offline.name();
-        } else if (stat == NodeStatus.Deprecated.getCode()) {
-            status = NodeStatus.Deprecated.name();
+    private String getMachineStat(String machineId) {
+        String status = NodeStatus.Offline.name();
+        if (wsSessionManager.getAgentSession(machineId) != null) {
+            status = NodeStatus.Online.name();
         }
-
         return status;
     }
 

+ 0 - 19
mgr/src/main/java/cn/reghao/devops/mgr/ops/machine/service/impl/MachineServiceImpl.java

@@ -93,25 +93,6 @@ public class MachineServiceImpl implements MachineService {
         return Result.success();
     }
 
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void setAgentStatus(String machineId, NodeStatus nodeStatus) {
-        machineInfoRepository.updateMachineStat(machineId, nodeStatus.getCode());
-    }
-
-    @Transactional(rollbackFor = Exception.class)
-    @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) {
         MachineInfo machineInfo = machineQuery.getMachineInfo(machineId);

+ 5 - 0
mgr/src/main/java/cn/reghao/devops/mgr/ws/WebSocketSessionManager.java

@@ -41,6 +41,11 @@ public class WebSocketSessionManager {
         return sessions.get(type);
     }
 
+    public WebSocketSession getAgentSession(String agentId) {
+        WebSocketSession webSocketSession = sessions.get(WsClientType.AGENT).get(agentId);
+        return webSocketSession;
+    }
+
     // 给特定 Agent 下发任务
     public void sendToAgent(String agentId, Object message) throws IOException {
         WebSocketSession session = sessions.get(WsClientType.AGENT).get(agentId);