Преглед на файлове

1.agent 模块添加 EvtTaskResult 事件, 更新 ImageCleanTask 任务
2.web 模块添加 EvtTaskResult 事件处理方法

reghao преди 3 месеца
родител
ревизия
d91dc9415a

+ 2 - 2
agent/src/main/java/cn/reghao/bnt/agent/AgentApp.java

@@ -106,8 +106,8 @@ public class AgentApp {
 			messageSender.connect();
 		}
 
-		ImageCleanTask cleanTask = new ImageCleanTask(docker);
-		scheduler.scheduleAtFixedRate(cleanTask, 1, 12, TimeUnit.HOURS);
+		ImageCleanTask cleanTask = new ImageCleanTask(messageSender, docker);
+		scheduler.scheduleAtFixedRate(cleanTask, 1, 8, TimeUnit.HOURS);
 		shutdownGracefully();
 		SingleInstance.onlyOne(60001);
 	}

+ 40 - 3
agent/src/main/java/cn/reghao/bnt/agent/task/ImageCleanTask.java

@@ -1,10 +1,15 @@
 package cn.reghao.bnt.agent.task;
 
 import cn.reghao.bnt.common.docker.Docker;
+import cn.reghao.bnt.common.machine.Machine;
+import cn.reghao.bnt.common.msg.MessageSender;
+import cn.reghao.bnt.common.msg.event.EvtTaskResult;
+import cn.reghao.jutil.jdk.event.message.EventMessage;
 import com.github.dockerjava.api.command.InspectContainerResponse;
 import com.github.dockerjava.api.model.Image;
 import lombok.extern.slf4j.Slf4j;
 
+import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -15,27 +20,59 @@ import java.util.stream.Collectors;
  */
 @Slf4j
 public class ImageCleanTask implements Runnable {
+    private final MessageSender messageSender;
     private final Docker docker;
 
-    public ImageCleanTask(Docker docker) {
+    public ImageCleanTask(MessageSender messageSender, Docker docker) {
+        this.messageSender = messageSender;
         this.docker = docker;
     }
 
     @Override
     public void run() {
+        String result = "exec docker image clean task";
+        log.info("{}", result);
+        EvtTaskResult evtTaskResult = new EvtTaskResult(Machine.ID, result);
+        try {
+            EventMessage evtMsg = EventMessage.evt(evtTaskResult);
+            messageSender.send("", evtMsg);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
         Map<String, Image> map = docker.images().stream()
                 .collect(Collectors.toMap(Image::getId, image -> image));
 
+        // imageId -> container
+        Map<String, InspectContainerResponse> containerMap = docker.psAll().stream()
+                .collect(Collectors.toMap(InspectContainerResponse::getImageId, response -> response));
+
         List<InspectContainerResponse> list = docker.psAll();
         for (InspectContainerResponse response : list) {
             String imageId = response.getImageId();
             Boolean running = response.getState().getRunning();
             if (running != null && running) {
                 Image image = map.remove(imageId);
+                try {
+                    rmImage(image);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
             }
         }
+    }
 
-        //map.keySet().forEach(docker::imageRm);
-        log.info("定时扫描 docker 镜像和容器");
+    private void rmImage(Image image) {
+        try {
+            String imageId = image.getId();
+            docker.imageRm(imageId);
+            String[] tags = image.getRepoTags();
+            String result = String.format("delete image %s", tags);
+            EvtTaskResult evtTaskResult = new EvtTaskResult(Machine.ID, result);
+            EventMessage evtMsg = EventMessage.evt(evtTaskResult);
+            messageSender.send("", evtMsg);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
     }
 }

+ 16 - 0
common/src/main/java/cn/reghao/bnt/common/msg/event/EvtTaskResult.java

@@ -0,0 +1,16 @@
+package cn.reghao.bnt.common.msg.event;
+
+import cn.reghao.jutil.jdk.event.message.Event;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author reghao
+ * @date 2025-12-16 10:45:44
+ */
+@AllArgsConstructor
+@Getter
+public class EvtTaskResult extends Event {
+    private String machineId;
+    private String result;
+}

+ 32 - 0
web/src/main/java/cn/reghao/bnt/web/devops/machine/service/MachineTaskService.java

@@ -0,0 +1,32 @@
+package cn.reghao.bnt.web.devops.machine.service;
+
+import cn.reghao.bnt.common.msg.event.EvtTaskResult;
+import cn.reghao.bnt.web.devops.machine.model.po.MachineHost;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author reghao
+ * @date 2025-12-16 10:55:55
+ */
+@Slf4j
+@Service
+public class MachineTaskService {
+    private final MachineQuery machineQuery;
+
+    public MachineTaskService(MachineQuery machineQuery) {
+        this.machineQuery = machineQuery;
+    }
+
+    public void handleTaskResult(EvtTaskResult evtTaskResult) {
+        String machineId = evtTaskResult.getMachineId();
+        String result = evtTaskResult.getResult();
+        MachineHost machineHost = machineQuery.getMachineHost(machineId);
+        if (machineHost != null) {
+            String machineIpv4 = machineHost.getMachineIpv4();
+            log.info("machine {} event result -> {}", machineIpv4, result);
+        } else {
+            log.info("machine {} event result -> {}", machineId, result);
+        }
+    }
+}

+ 6 - 1
web/src/main/java/cn/reghao/bnt/web/ws/EventDispatcherConfig.java

@@ -3,11 +3,14 @@ package cn.reghao.bnt.web.ws;
 import cn.reghao.bnt.common.msg.event.EvtAgentHeartbeat;
 import cn.reghao.bnt.common.msg.event.EvtAgentStart;
 import cn.reghao.bnt.common.msg.event.EvtAppStatResult;
+import cn.reghao.bnt.common.msg.event.EvtTaskResult;
 import cn.reghao.bnt.web.devops.app.service.AppDeployService;
 import cn.reghao.bnt.web.devops.machine.service.MachineService;
+import cn.reghao.bnt.web.devops.machine.service.MachineTaskService;
 import cn.reghao.bnt.web.ws.event.EvtAgentHeartbeatHandler;
 import cn.reghao.bnt.web.ws.event.EvtAgentStartHandler;
 import cn.reghao.bnt.web.ws.event.EvtAppStatResultHandler;
+import cn.reghao.bnt.web.ws.event.EvtTaskResultHandler;
 import cn.reghao.jutil.jdk.event.router.EventDispatcher;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -19,12 +22,14 @@ import org.springframework.context.annotation.Configuration;
 @Configuration
 public class EventDispatcherConfig {
     @Bean
-    public EventDispatcher eventDispatcher(MachineService machineService, AppDeployService appDeployService) {
+    public EventDispatcher eventDispatcher(MachineService machineService, AppDeployService appDeployService,
+                                           MachineTaskService machineTaskService) {
         EventDispatcher dispatcher = new EventDispatcher();
         dispatcher.register(EvtAgentStart.class, new EvtAgentStartHandler(machineService));
         dispatcher.register(EvtAgentHeartbeat.class, new EvtAgentHeartbeatHandler(machineService));
 
         dispatcher.register(EvtAppStatResult.class, new EvtAppStatResultHandler(appDeployService));
+        dispatcher.register(EvtTaskResult.class, new EvtTaskResultHandler(machineTaskService));
         return dispatcher;
     }
 }

+ 24 - 0
web/src/main/java/cn/reghao/bnt/web/ws/event/EvtTaskResultHandler.java

@@ -0,0 +1,24 @@
+package cn.reghao.bnt.web.ws.event;
+
+import cn.reghao.bnt.common.msg.event.EvtTaskResult;
+import cn.reghao.bnt.web.devops.machine.service.MachineTaskService;
+import cn.reghao.jutil.jdk.event.handler.Handler;
+import cn.reghao.jutil.jdk.event.message.Event;
+
+/**
+ * @author reghao
+ * @date 2025-12-16 10:53:25
+ */
+public class EvtTaskResultHandler extends Handler {
+    private final MachineTaskService machineTaskService;
+
+    public EvtTaskResultHandler(MachineTaskService machineTaskService) {
+        this.machineTaskService = machineTaskService;
+    }
+
+    @Override
+    public void handle(Event evt) {
+        EvtTaskResult evtTaskResult = (EvtTaskResult) evt;
+        machineTaskService.handleTaskResult(evtTaskResult);
+    }
+}