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 e6fdc49c..c5ece23d 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 @@ -85,6 +85,15 @@ public class AflManagerController { } + @PostMapping(path="/findCrashesNow") + public CommonResult> findCrashesNow(@RequestBody @Valid AflManagerReq req) throws SftpUploadUtil.SftpUploadException { + + List respList = aflCrashesInfoService.findCrashesNow(req); + + return CommonResult.success(respList); + } + + @PostMapping(path="/findAflCrashesInfoListByHistory") public CommonResult> findAflCrashesInfoListByHistory(@RequestBody @Valid AflManagerReq req){ diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/AflCrashesInfoService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/AflCrashesInfoService.java index 3bba92d0..5a6f720c 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/AflCrashesInfoService.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/AflCrashesInfoService.java @@ -26,4 +26,6 @@ public interface AflCrashesInfoService extends IService { AflCrashesResp findCrashesCount(@Valid AflManagerReq req); + + List findCrashesNow(@Valid AflManagerReq req); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflCrashesInfoServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflCrashesInfoServiceImpl.java index ac1e5ada..889457ed 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflCrashesInfoServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflCrashesInfoServiceImpl.java @@ -271,4 +271,94 @@ public class AflCrashesInfoServiceImpl extends ServiceImpl findCrashesNow(AflManagerReq req) { + List respList = new ArrayList<>(0); + if (StringUtils.isEmpty(req.getPipelineId()) || StringUtils.isEmpty(req.getTaskId())){ + throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"pipelineId或者taskId不能为空"); + } + + BaseRunContext runContext = runContextManager.getContext(req.getPipelineId()); + if (ObjectUtils.isEmpty(runContext)){ + throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到运行上下文"); + } + String resourceId = runContext.getGlobalVariables().get(PipelineVariableConstant.AFL_RESOURCE_MANAGER_ID_KEY) instanceof String ? ((String) runContext.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); + + try { + // 步骤1:使用自定义sql获取崩溃文件的创建时间 + //查询创建时间 + List resultList = SftpUploadUtil.findCreateTimeByCommand( + resourceMachine.getMachineHost(), + Integer.parseInt(resourceMachine.getSshPort()), + resourceMachine.getUsername(), + resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath); + + if (CollectionUtils.isEmpty(resultList)){ + return respList; + } + + //解析文件名和创建时间 + for (String o : resultList) { + String[] lineParts = o.split("\\s+创建时间:\\s+"); + if (lineParts.length < 2) { + System.err.println("无效格式: " + o); + break; + } + AflCrashesInfoResp aflCrashesInfoResp = new AflCrashesInfoResp(); + + String fileName = lineParts[0].substring(2).trim(); // 文件信息部分 + String createTime = lineParts[1].trim(); // 创建时间 + aflCrashesInfoResp.setCrashesName(fileName); + aflCrashesInfoResp.setCrashesCreateTime(createTime); + aflCrashesInfoResp.setFilePath(remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath + fileName); + + respList.add(aflCrashesInfoResp); + } + + // 步驟2.查询文件大小 + List fileResultList = SftpUploadUtil.findFileByteByCommand( + resourceMachine.getMachineHost(), + Integer.parseInt(resourceMachine.getSshPort()), + resourceMachine.getUsername(), + resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath); + + if (CollectionUtils.isEmpty(fileResultList)){ + return null; + } + + //解析文件名和文件大小 + for (String o : fileResultList) { + // 按空白字符分割 + String[] parts = o.trim().split("\\s+"); + + String fileName = parts[0]; // 文件名称 + Integer fileLength = Integer.parseInt(parts[1]); // 文件大小 + if (!CollectionUtils.isEmpty(respList)){ + for (AflCrashesInfoResp aflCrashesInfoResp : respList) { + if (aflCrashesInfoResp.getCrashesName().equals(fileName)) { + aflCrashesInfoResp.setCrashesLength(fileLength); + } + } + } + } + return respList; + } catch (Exception e) { + e.printStackTrace(); + throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"crashes入库失败"); + } + } }