From 8b24fe7c6c1ba7e9601f737c9bea0911373579e1 Mon Sep 17 00:00:00 2001 From: HopeLi <1278288511@qq.com> Date: Mon, 7 Jul 2025 15:38:40 +0800 Subject: [PATCH] =?UTF-8?q?0707=20ljc=20=20=20afl=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=93=8D=E4=BD=9C=E4=BB=A5=E5=8F=8A=E5=85=A5?= =?UTF-8?q?=E5=BA=93=E6=93=8D=E4=BD=9C=E4=BB=A5=E5=8F=8A=E6=97=B6=E5=BA=8F?= =?UTF-8?q?=E8=A1=A8=E6=93=8D=E4=BD=9C=E7=AD=89=E6=8E=A5=E5=8F=A3=E5=BC=80?= =?UTF-8?q?=E5=8F=91=EF=BC=8C=E5=8C=85=E5=90=AB=E5=88=86=E7=89=87=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E4=BB=A5=E5=8F=8A=E6=96=87=E4=BB=B6=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E7=B1=BB=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cd/casic/ci/api/AflManagerController.java | 14 +++- .../dto/resp/aflManager/AflBaseInfoResp.java | 28 +++++++ .../service/aflManager/AflInfoService.java | 3 + .../aflManager/impl/AflInfoServiceImpl.java | 84 +++++++++++++++---- 4 files changed, 110 insertions(+), 19 deletions(-) create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/aflManager/AflBaseInfoResp.java diff --git a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/AflManagerController.java b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/AflManagerController.java index dbe04fe0..8df52304 100644 --- a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/AflManagerController.java +++ b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/AflManagerController.java @@ -1,10 +1,7 @@ package cd.casic.ci.api; import cd.casic.ci.process.dto.req.aflManager.AflManagerReq; -import cd.casic.ci.process.dto.resp.aflManager.AflCrashesInfoResp; -import cd.casic.ci.process.dto.resp.aflManager.AflInfoResp; -import cd.casic.ci.process.dto.resp.aflManager.AflPlotInfoResp; -import cd.casic.ci.process.dto.resp.aflManager.SeedsCountResp; +import cd.casic.ci.process.dto.resp.aflManager.*; import cd.casic.ci.process.process.service.aflManager.AflCrashesInfoService; import cd.casic.ci.process.process.service.aflManager.AflInfoService; import cd.casic.ci.process.process.service.aflManager.AflPlotInfoService; @@ -132,4 +129,13 @@ public class AflManagerController { return CommonResult.success(respList); } + + + @PostMapping(path="/findAflBaseInfoList") + public CommonResult findAflBaseInfoList(@RequestBody @Valid AflManagerReq req) throws SftpUploadUtil.SftpUploadException { + + AflBaseInfoResp resp = aflInfoService.findAflBaseInfoList(req); + + return CommonResult.success(resp); + } } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/aflManager/AflBaseInfoResp.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/aflManager/AflBaseInfoResp.java new file mode 100644 index 00000000..b00875de --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/aflManager/AflBaseInfoResp.java @@ -0,0 +1,28 @@ +package cd.casic.ci.process.dto.resp.aflManager; + +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @ClassName ReportResp + * @Author hopeli + * @Date 2025/5/10 10:53 + * @Version 1.0 + */ +@Data +public class AflBaseInfoResp { + + private LocalDateTime createTime; + + private Integer durationTime; + + private Integer testCaseCount; + + private String dockerName; + + private String status; + + private String applicationName; + +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/AflInfoService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/AflInfoService.java index 1caf1666..1e79da53 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/AflInfoService.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/AflInfoService.java @@ -1,6 +1,7 @@ package cd.casic.ci.process.process.service.aflManager; import cd.casic.ci.process.dto.req.aflManager.AflManagerReq; +import cd.casic.ci.process.dto.resp.aflManager.AflBaseInfoResp; import cd.casic.ci.process.dto.resp.aflManager.AflInfoResp; import cd.casic.ci.process.process.dataObject.aflManager.AflInfo; import cd.casic.ci.process.util.SftpUploadUtil; @@ -25,4 +26,6 @@ public interface AflInfoService extends IService { AflInfoResp findAflInfo(@Valid AflManagerReq req) throws SftpUploadUtil.SftpUploadException; List findPipelineList(@Valid AflManagerReq req); + + AflBaseInfoResp findAflBaseInfoList(@Valid AflManagerReq req) throws SftpUploadUtil.SftpUploadException; } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflInfoServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflInfoServiceImpl.java index 67d222bd..9fd432bc 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflInfoServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflInfoServiceImpl.java @@ -1,9 +1,12 @@ package cd.casic.ci.process.process.service.aflManager.impl; import cd.casic.ci.process.dto.req.aflManager.AflManagerReq; +import cd.casic.ci.process.dto.resp.aflManager.AflBaseInfoResp; import cd.casic.ci.process.dto.resp.aflManager.AflInfoResp; import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; +import cd.casic.ci.process.engine.constant.PipelineVariableConstant; import cd.casic.ci.process.engine.manager.RunContextManager; +import cd.casic.ci.process.engine.runContext.BaseRunContext; import cd.casic.ci.process.process.converter.AflManagerConverter; import cd.casic.ci.process.process.dao.aflManager.AflInfoDao; import cd.casic.ci.process.process.dataObject.aflManager.AflInfo; @@ -21,8 +24,11 @@ import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; +import java.time.Duration; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.UUID; @@ -162,21 +168,69 @@ public class AflInfoServiceImpl extends ServiceImpl impleme return AflManagerConverter.INSTANCE.toAflInfoRespList(aflInfos); } - - /** - * 获取远程文件的输入流并设值给aflInfo - * - * @param machineInfo 机器信息 - * @param remoteFilePath 远程文件路径 - * @return 文件输入流 - */ - private AflInfo getFileStreamAndSetAflInfo(PipResourceMachine machineInfo, String remoteFilePath) { - - try { - return SftpUploadUtil.downloadFileSftpForInputStreamAndSetAflInfo(machineInfo.getMachineHost(), Integer.parseInt(machineInfo.getSshPort()), machineInfo.getUsername(), machineInfo.getPassword(),null, remoteFilePath); - } catch (Exception e) { - log.error("获取远程文件流失败: {}", e.getMessage()); - return null; + @Override + public AflBaseInfoResp findAflBaseInfoList(AflManagerReq req) throws SftpUploadUtil.SftpUploadException { + AflBaseInfoResp resp = new AflBaseInfoResp(); + BaseRunContext taskRunContext = runContextManager.getContext(req.getTaskId()); + if (ObjectUtils.isEmpty(taskRunContext)){ + throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到task运行上下文"); } + LocalDateTime startTime = taskRunContext.getStartTime(); + LocalDateTime endTime = taskRunContext.getEndTime(); + + if (ObjectUtils.isEmpty(startTime) && ObjectUtils.isEmpty(endTime)){ + resp.setStatus("1"); + }else if (!ObjectUtils.isEmpty(startTime) && ObjectUtils.isEmpty(endTime)){ + resp.setStatus("2"); + resp.setCreateTime(startTime); + // 计算时间差(分钟) + Duration duration = Duration.between(startTime, LocalDateTime.now()); + int minutesDifference = Math.toIntExact(Math.abs(duration.toMinutes())); + resp.setDurationTime(minutesDifference); + }else if (!ObjectUtils.isEmpty(startTime) && !ObjectUtils.isEmpty(endTime)){ + resp.setStatus("3"); + resp.setCreateTime(startTime); + // 计算时间差(分钟) + Duration duration = Duration.between(startTime, endTime); + int minutesDifference = Math.toIntExact(Math.abs(duration.toMinutes())); + resp.setDurationTime(minutesDifference); + } + + String dockerName = taskRunContext.getGlobalVariables().get(PipelineVariableConstant.IMAGE_NAME) instanceof String ? ((String) taskRunContext.getGlobalVariables().get(PipelineVariableConstant.IMAGE_NAME)) : null; + String applicationName = taskRunContext.getGlobalVariables().get(PipelineVariableConstant.EXECUTABLE_NAME_KEY) instanceof String ? ((String) taskRunContext.getGlobalVariables().get(PipelineVariableConstant.EXECUTABLE_NAME_KEY)) : null; + resp.setDockerName(dockerName); + resp.setApplicationName(applicationName); + + BaseRunContext pipelineCunContext = runContextManager.getContext(req.getPipelineId()); + if (ObjectUtils.isEmpty(pipelineCunContext)){ + throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到运行上下文"); + } + String resourceId = pipelineCunContext.getGlobalVariables().get(PipelineVariableConstant.AFL_RESOURCE_MANAGER_ID_KEY) instanceof String ? ((String) pipelineCunContext.getGlobalVariables().get(PipelineVariableConstant.AFL_RESOURCE_MANAGER_ID_KEY)) : null; +// String resourceId = "2"; + if (StringUtils.isEmpty(resourceId)){ + throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源"); + } + + ResourceFindResp resourceById = resourceManagerService.findResourceById(resourceId); + if (resourceById == null || resourceById.getResourceMachine() == null) { + throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误"); + } + + PipResourceMachine resourceMachine = resourceById.getResourceMachine(); + String password = CryptogramUtil.doDecrypt(resourceMachine.getPassword()); + resourceMachine.setPassword(password); + + //找出seed文件夹下的所有测试样例文件,计算数量 + List files = SftpUploadUtil.listFilesInRemoteDirectory( + resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + "/SEED/"); + + if (!CollectionUtils.isEmpty(files)){ + resp.setTestCaseCount(files.size()); + }else { + resp.setTestCaseCount(0); + } + + return resp; } + }