|
|
@@ -0,0 +1,103 @@
|
|
|
+package cn.reghao.bnt.agent.ws.event.handler;
|
|
|
+
|
|
|
+import cn.reghao.bnt.common.docker.Docker;
|
|
|
+import cn.reghao.bnt.common.docker.DockerService;
|
|
|
+import cn.reghao.bnt.common.docker.model.ContainerOps;
|
|
|
+import cn.reghao.bnt.common.docker.model.ImageDelete;
|
|
|
+import cn.reghao.bnt.common.docker.model.ImageQuery;
|
|
|
+import cn.reghao.bnt.common.machine.Machine;
|
|
|
+import cn.reghao.bnt.common.msg.MessageSender;
|
|
|
+import cn.reghao.bnt.common.msg.constant.DockerOps;
|
|
|
+import cn.reghao.bnt.common.msg.event.EvtDockerOps;
|
|
|
+import cn.reghao.bnt.common.msg.event.EvtDockerOpsResult;
|
|
|
+import cn.reghao.jutil.jdk.event.handler.Handler;
|
|
|
+import cn.reghao.jutil.jdk.event.message.Event;
|
|
|
+import cn.reghao.jutil.jdk.event.message.EventMessage;
|
|
|
+
|
|
|
+import java.io.IOException;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author reghao
|
|
|
+ * @date 2025-12-16 20:03:03
|
|
|
+ */
|
|
|
+public class EvtDockerHandler extends Handler {
|
|
|
+ private final MessageSender messageSender;
|
|
|
+ private final DockerService dockerService;
|
|
|
+
|
|
|
+ public EvtDockerHandler(MessageSender messageSender, Docker docker) {
|
|
|
+ this.messageSender = messageSender;
|
|
|
+ this.dockerService = new DockerService(docker);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void handle(Event evt) {
|
|
|
+ EvtDockerOps evtDockerOps = (EvtDockerOps) evt;
|
|
|
+
|
|
|
+ String ops = evtDockerOps.getOps();
|
|
|
+ List<String> payload = evtDockerOps.getPayload();
|
|
|
+ EvtDockerOpsResult evtDockerOpsResult = new EvtDockerOpsResult(ops, Machine.ID);
|
|
|
+ List<Object> list = new ArrayList<>();
|
|
|
+ try {
|
|
|
+ switch (DockerOps.valueOf(ops)) {
|
|
|
+ case imageList -> {
|
|
|
+ ImageQuery imageQuery = new ImageQuery();
|
|
|
+ list.addAll(dockerService.getDockerImages(imageQuery));
|
|
|
+ }
|
|
|
+ case imageRm -> {
|
|
|
+ List<String> imageIds = payload.stream().map(obj -> (String) obj).collect(Collectors.toList());
|
|
|
+ ImageDelete imageDelete = new ImageDelete();
|
|
|
+ imageDelete.setImageIds(imageIds);
|
|
|
+ dockerService.rmDockerImages(imageDelete);
|
|
|
+ }
|
|
|
+ case containerList -> list.addAll(dockerService.getDockerContainers());
|
|
|
+ case containerRm -> {
|
|
|
+ payload.forEach(obj -> {
|
|
|
+ String containerId = (String) obj;
|
|
|
+ ContainerOps containerOps = new ContainerOps(3, containerId);
|
|
|
+ dockerService.handleDockerContainer(containerOps);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ case containerStart -> {
|
|
|
+ payload.forEach(obj -> {
|
|
|
+ String containerId = (String) obj;
|
|
|
+ ContainerOps containerOps = new ContainerOps(1, containerId);
|
|
|
+ dockerService.handleDockerContainer(containerOps);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ case containerStop -> {
|
|
|
+ payload.forEach(obj -> {
|
|
|
+ String containerId = (String) obj;
|
|
|
+ ContainerOps containerOps = new ContainerOps(2, containerId);
|
|
|
+ dockerService.handleDockerContainer(containerOps);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ default -> {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ int maxSize = 10;
|
|
|
+ List<Object> list0 = new ArrayList<>();
|
|
|
+ if (list.size() > maxSize) {
|
|
|
+ list0.addAll(list.subList(0, maxSize));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (list0.isEmpty()) {
|
|
|
+ evtDockerOpsResult.setResultList(list);
|
|
|
+ } else {
|
|
|
+ evtDockerOpsResult.setResultList(list0);
|
|
|
+ }
|
|
|
+
|
|
|
+ EventMessage evtMsg = EventMessage.evt(evtDockerOpsResult);
|
|
|
+ try {
|
|
|
+ messageSender.send(Machine.ID, evtMsg);
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|