From 17da55937e8d700b9d0b52f3e74efb54ca7d1d1d Mon Sep 17 00:00:00 2001 From: even <827656971@qq.com> Date: Tue, 8 Jul 2025 10:29:52 +0800 Subject: [PATCH] =?UTF-8?q?AFL=E8=8A=82=E7=82=B9=E5=90=8E=E7=BD=AE?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../process/engine/constant/AFLConstant.java | 2 + .../engine/manager/PostHandlerManager.java | 4 +- .../impl/MemoryPostHandlerManager.java | 13 +-- ...ndler.java => ExecuteTaskPostHandler.java} | 2 +- .../process/engine/worker/afl/AFLWorker.java | 79 +++++++++++++++---- 5 files changed, 75 insertions(+), 25 deletions(-) rename modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/postHandler/{PipExecutePostHandler.java => ExecuteTaskPostHandler.java} (90%) diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/constant/AFLConstant.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/constant/AFLConstant.java index 91894e83..9ba939d2 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/constant/AFLConstant.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/constant/AFLConstant.java @@ -5,4 +5,6 @@ public class AFLConstant { public static final String COMMAND_END="commandEnd"; public static final String EXECUTABLE_NAME ="executableName"; public static final String RUNNING_TIME ="runningTime"; + + public static final String GROUP_ID= "groupId"; } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/PostHandlerManager.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/PostHandlerManager.java index 7dbeb93d..cf987075 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/PostHandlerManager.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/PostHandlerManager.java @@ -1,9 +1,9 @@ package cd.casic.ci.process.engine.manager; -import cd.casic.ci.process.engine.postHandler.PipExecutePostHandler; +import cd.casic.ci.process.engine.postHandler.ExecuteTaskPostHandler; import cd.casic.ci.process.process.dataObject.history.PipPipelineHisInstance; public interface PostHandlerManager { - public void registerPostHandler(PipExecutePostHandler handler); + public void registerPostHandler(ExecuteTaskPostHandler handler); public void executePostHandler(PipPipelineHisInstance hisInstance); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/impl/MemoryPostHandlerManager.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/impl/MemoryPostHandlerManager.java index d12d4505..bc63083a 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/impl/MemoryPostHandlerManager.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/impl/MemoryPostHandlerManager.java @@ -1,7 +1,7 @@ package cd.casic.ci.process.engine.manager.impl; import cd.casic.ci.process.engine.manager.PostHandlerManager; -import cd.casic.ci.process.engine.postHandler.PipExecutePostHandler; +import cd.casic.ci.process.engine.postHandler.ExecuteTaskPostHandler; import cd.casic.ci.process.process.dataObject.history.PipPipelineHisInstance; import cd.casic.framework.commons.exception.ServiceException; import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; @@ -15,24 +15,25 @@ import java.util.concurrent.CopyOnWriteArrayList; @Component public class MemoryPostHandlerManager implements PostHandlerManager { - private ConcurrentHashMap> handlerMap = new ConcurrentHashMap<>(); + private final ConcurrentHashMap> handlerMap = new ConcurrentHashMap<>(); @Override - public void registerPostHandler(PipExecutePostHandler handler) { + public void registerPostHandler(ExecuteTaskPostHandler handler) { if (handler==null|| StringUtils.isNotEmpty(handler.getPipelineId())) { throw new ServiceException(GlobalErrorCodeConstants.PIPELINE_ERROR.getCode(),"注册后置处理器失败"); } - List orDefault = handlerMap.getOrDefault(handler.getPipelineId(), new CopyOnWriteArrayList<>()); + List orDefault = handlerMap.getOrDefault(handler.getPipelineId(), new CopyOnWriteArrayList<>()); orDefault.add(handler); + handlerMap.put(handler.getPipelineId(),orDefault); } @Override public void executePostHandler(PipPipelineHisInstance hisInstance) { String pipelineId = hisInstance.getPipelineId(); - List pipExecutePostHandlers = handlerMap.get(pipelineId); + List pipExecutePostHandlers = handlerMap.get(pipelineId); if (CollectionUtils.isEmpty(pipExecutePostHandlers)) { return; } - for (PipExecutePostHandler postHandler : pipExecutePostHandlers) { + for (ExecuteTaskPostHandler postHandler : pipExecutePostHandlers) { postHandler.executeAfterDone(hisInstance); } } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/postHandler/PipExecutePostHandler.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/postHandler/ExecuteTaskPostHandler.java similarity index 90% rename from modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/postHandler/PipExecutePostHandler.java rename to modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/postHandler/ExecuteTaskPostHandler.java index df26e110..007cbd32 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/postHandler/PipExecutePostHandler.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/postHandler/ExecuteTaskPostHandler.java @@ -6,7 +6,7 @@ import lombok.Data; @Data @AllArgsConstructor -public abstract class PipExecutePostHandler { +public abstract class ExecuteTaskPostHandler { private String taskId; private String pipelineId; diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/AFLWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/AFLWorker.java index 61d4afca..b847f502 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/AFLWorker.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/AFLWorker.java @@ -6,11 +6,12 @@ import cd.casic.ci.process.dto.req.resource.ResourceQueryReq; import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp; import cd.casic.ci.process.engine.constant.AFLConstant; -import cd.casic.ci.process.engine.constant.AFLSlotCompileConstant; import cd.casic.ci.process.engine.constant.DIYImageExecuteCommandConstant; -import cd.casic.ci.process.engine.constant.PipelineVariableConstant; +import cd.casic.ci.process.engine.manager.PostHandlerManager; +import cd.casic.ci.process.engine.postHandler.ExecuteTaskPostHandler; import cd.casic.ci.process.engine.runContext.TaskRunContext; import cd.casic.ci.process.engine.worker.base.DockerWorker; +import cd.casic.ci.process.process.dataObject.history.PipPipelineHisInstance; import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline; import cd.casic.ci.process.process.dataObject.target.TargetVersion; import cd.casic.ci.process.process.dataObject.task.PipTask; @@ -18,13 +19,17 @@ import cd.casic.ci.process.process.service.aflManager.AflInfoService; import cd.casic.ci.process.process.service.aflManager.AflPlotInfoService; import cd.casic.ci.process.process.service.aflManager.AflSeedInfoService; import cd.casic.ci.process.process.service.target.TargetVersionService; +import cd.casic.ci.process.util.SftpUploadUtil; +import com.alibaba.fastjson.JSON; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.scheduling.annotation.Async; import org.springframework.util.CollectionUtils; import java.io.File; import java.util.Map; +import java.util.UUID; import static cd.casic.ci.process.engine.constant.AFLConstant.*; import static cd.casic.ci.process.engine.constant.PipelineVariableConstant.*; @@ -34,6 +39,14 @@ import static cd.casic.ci.process.engine.constant.PipelineVariableConstant.*; public class AFLWorker extends DockerWorker { @Resource private TargetVersionService targetVersionService; + @Resource + private AflInfoService aflInfoService; + @Resource + private AflSeedInfoService aflSeedInfoService; + @Resource + private AflPlotInfoService aflPlotInfoService; + @Resource + private PostHandlerManager postHandlerManager; @Override public void execute(TaskRunContext context) { int statusCode = -1; @@ -107,7 +120,8 @@ public class AFLWorker extends DockerWorker { toBadEnding(); } localVariables.put(DIYImageExecuteCommandConstant.STATUS_CODE, statusCode); - + afterTaskExecute(context); + afterPipelineExecute(context); } } private String cdSourceName(String fileName){ @@ -123,17 +137,50 @@ public class AFLWorker extends DockerWorker { } return null; } - @Resource - private AflInfoService aflInfoService; - @Resource - private AflSeedInfoService aflSeedInfoService; - @Resource - private AflPlotInfoService aflPlotInfoService; -// private void afterTaskExecute(){ -// AflManagerReq aflManagerReq = new AflManagerReq(); -// aflInfoService.saveAflInfo(); -// } -// private void afterPipelineExecute(){ -// -// } + @Async + public void afterTaskExecute(TaskRunContext context){ + append(context,"开始拉取afl输出信息"); + PipTask contextDef = (PipTask)context.getContextDef(); + Map localVariables = context.getLocalVariables(); + String pipelineId =contextDef.getPipelineId(); + String taskId = contextDef.getId(); + String groupId = UUID.randomUUID().toString().replace("-",""); + localVariables.put(GROUP_ID,groupId); + AflManagerReq req = new AflManagerReq(); + req.setGroupIdentifier(groupId); + req.setTaskId(taskId); + req.setPipelineId(pipelineId); + try { + aflInfoService.saveAflInfo(req); + } catch (SftpUploadUtil.SftpUploadException e) { + log.error("保存afl信息失败,入参{}", JSON.toJSONString(req),e); + } + aflSeedInfoService.saveAflSeedInfo(req); + try { + aflPlotInfoService.saveAflPlotInfo(req); + } catch (SftpUploadUtil.SftpUploadException e) { + log.error("保存afl信息失败,入参{}", JSON.toJSONString(req),e); + } + } + private void afterPipelineExecute(TaskRunContext context){ + append(context,"开始拉取afl输出信息"); + PipTask contextDef = (PipTask)context.getContextDef(); + String pipelineId =contextDef.getPipelineId(); + String taskId = contextDef.getId(); + AflManagerReq req = new AflManagerReq(); + req.setTaskId(taskId); + req.setPipelineId(pipelineId); + postHandlerManager.registerPostHandler(new ExecuteTaskPostHandler(taskId,pipelineId) { + @Override + public void executeAfterDone(PipPipelineHisInstance pipPipelineHisInstance) { + Map localVariables = context.getLocalVariables(); + String groupId = localVariables.get(GROUP_ID) instanceof String ? ((String) localVariables.get(GROUP_ID)) : null; + req.setGroupIdentifier(groupId); + req.setPipelineHistoryId(pipPipelineHisInstance.getId()); + aflInfoService.updateHistoryPipelineIdByAflInfo(req); + aflSeedInfoService.updateHistoryPipelineIdByAflSeedInfo(req); + aflPlotInfoService.updateHistoryPipelineIdByAflPlotInfo(req); + } + }); + } }