diff --git a/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/resp/context/RunContextResp.java b/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/resp/context/RunContextResp.java deleted file mode 100644 index b127dbdf..00000000 --- a/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/resp/context/RunContextResp.java +++ /dev/null @@ -1,10 +0,0 @@ -package cd.casic.ci.common.pipeline.resp.context; - -import lombok.Data; - -import java.util.List; -@Data -public class RunContextResp { - private String id; - private Integer state; -} diff --git a/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/resp/context/SingletonRunContextResp.java b/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/resp/context/SingletonRunContextResp.java new file mode 100644 index 00000000..5d020a33 --- /dev/null +++ b/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/resp/context/SingletonRunContextResp.java @@ -0,0 +1,17 @@ +package cd.casic.ci.common.pipeline.resp.context; + +import lombok.Data; +/** + * 单节点上下文状态返回对象 + * */ +@Data +public class SingletonRunContextResp { + /** + * 流水线元素的id(pipeline、stage、task) + * */ + private String id; + /** + * 状态 详见 ContextStateEnum + * */ + private Integer state; +} diff --git a/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/resp/context/TreeRunContextResp.java b/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/resp/context/TreeRunContextResp.java new file mode 100644 index 00000000..c33a41af --- /dev/null +++ b/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/resp/context/TreeRunContextResp.java @@ -0,0 +1,12 @@ +package cd.casic.ci.common.pipeline.resp.context; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Map; + +@EqualsAndHashCode(callSuper = true) +@Data +public class TreeRunContextResp extends SingletonRunContextResp{ + private Map child; +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/PipelineService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/PipelineService.java index 1d33788a..e5cda4c5 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/PipelineService.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/PipelineService.java @@ -4,6 +4,7 @@ import cd.casic.ci.common.pipeline.req.pipeline.PipelineCreateReq; import cd.casic.ci.common.pipeline.req.pipeline.PipelineQueryReq; import cd.casic.ci.common.pipeline.req.pipeline.PipelineReq; import cd.casic.ci.common.pipeline.req.pipeline.PipelineUpdateReq; +import cd.casic.ci.common.pipeline.resp.context.SingletonRunContextResp; import cd.casic.ci.common.pipeline.resp.pipeline.PipelineFindResp; import cd.casic.ci.common.pipeline.utils.PageResult; import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline; @@ -11,6 +12,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import jakarta.validation.Valid; import java.util.List; +import java.util.Map; /** * @author HopeLi @@ -33,4 +35,6 @@ public interface PipelineService extends IService { void pipelineClone(@Valid PipelineReq req); PipelineFindResp findPipelineById(@Valid PipelineQueryReq pipelineQueryReq); + + Map getPipelineRunState(String pipelineId); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/impl/PipelineServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/impl/PipelineServiceImpl.java index 9c4d3bc8..6bf82e93 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/impl/PipelineServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/impl/PipelineServiceImpl.java @@ -4,9 +4,14 @@ import cd.casic.ci.common.pipeline.req.pipeline.PipelineCreateReq; import cd.casic.ci.common.pipeline.req.pipeline.PipelineQueryReq; import cd.casic.ci.common.pipeline.req.pipeline.PipelineReq; import cd.casic.ci.common.pipeline.req.pipeline.PipelineUpdateReq; +import cd.casic.ci.common.pipeline.resp.context.SingletonRunContextResp; +import cd.casic.ci.common.pipeline.resp.context.TreeRunContextResp; import cd.casic.ci.common.pipeline.resp.pipeline.PipelineFindResp; import cd.casic.ci.common.pipeline.resp.stage.StageResp; import cd.casic.ci.common.pipeline.utils.PageResult; +import cd.casic.ci.process.engine.manager.RunContextManager; +import cd.casic.ci.process.engine.runContext.BaseRunContext; +import cd.casic.ci.process.engine.runContext.PipelineRunContext; import cd.casic.ci.process.process.converter.PipelineConverter; import cd.casic.ci.process.process.dal.pipeline.PipResourceDao; import cd.casic.ci.process.process.dal.pipeline.PipStageDao; @@ -38,9 +43,7 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @author HopeLi @@ -75,6 +78,8 @@ public class PipelineServiceImpl extends ServiceImpl i @Resource private AdminUserServiceImpl adminUserService; + @Resource + private RunContextManager contextManager; @Override @Transactional(rollbackFor = Exception.class) @@ -519,4 +524,38 @@ public class PipelineServiceImpl extends ServiceImpl i return resp; } + + @Override + public Map getPipelineRunState(String pipelineId) { + BaseRunContext context = contextManager.getContext(pipelineId); + if (context instanceof PipelineRunContext pipelineRunContext) { + TreeRunContextResp pipeline = new TreeRunContextResp(); + pipeline.setId(pipelineRunContext.getContextDef().getId()); + pipeline.setState(pipelineRunContext.getState().get()); + Map secondStageStateMap = new HashMap<>(pipelineRunContext.getChildContext().size()); + Map childContext = pipelineRunContext.getChildContext(); + pipeline.setChild(secondStageStateMap); + for (Map.Entry secondEntry : childContext.entrySet()) { + BaseRunContext value = secondEntry.getValue(); + String key = secondEntry.getKey(); + TreeRunContextResp secondStage = new TreeRunContextResp(); + secondStageStateMap.put(key,secondStage); + secondStage.setId(key); + secondStage.setState(value.getState().get()); + Map taskIdContextMap = value.getChildContext(); + Map taskStateMap = new HashMap<>(taskIdContextMap.size()); + secondStage.setChild(taskStateMap); + for (Map.Entry taskEntry : taskIdContextMap.entrySet()) { + BaseRunContext taskContext = taskEntry.getValue(); + String taskId = taskEntry.getKey(); + TreeRunContextResp taskState = new TreeRunContextResp(); + taskState.setId(taskId); + taskState.setState(taskContext.getState().get()); + taskStateMap.put(taskId,taskState); + } + } + } + + return new HashMap<>(); + } } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/stage/StageService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/stage/StageService.java index a23f4743..9df80aee 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/stage/StageService.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/stage/StageService.java @@ -2,7 +2,7 @@ package cd.casic.ci.process.process.service.stage; import cd.casic.ci.common.pipeline.req.stage.StageCreateReq; import cd.casic.ci.common.pipeline.req.stage.StageUpdateReq; -import cd.casic.ci.common.pipeline.resp.context.RunContextResp; +import cd.casic.ci.common.pipeline.resp.context.SingletonRunContextResp; import cd.casic.ci.common.pipeline.resp.stage.StageResp; import cd.casic.ci.process.process.dataObject.stage.PipStage; import com.baomidou.mybatisplus.extension.service.IService; @@ -85,5 +85,5 @@ public interface StageService extends IService { void copyStage(@NotEmpty String stageId); void deleteFirstStage(String stageId); - Map getStageRunState(@PathVariable String stageId); + Map getStageRunState(@PathVariable String stageId); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/stage/impl/StageServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/stage/impl/StageServiceImpl.java index 76e1d51a..0ab6d080 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/stage/impl/StageServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/stage/impl/StageServiceImpl.java @@ -4,7 +4,7 @@ package cd.casic.ci.process.process.service.stage.impl; import cd.casic.ci.common.pipeline.req.stage.StageCreateReq; import cd.casic.ci.common.pipeline.req.stage.StageUpdateReq; import cd.casic.ci.common.pipeline.req.task.TaskCreateReq; -import cd.casic.ci.common.pipeline.resp.context.RunContextResp; +import cd.casic.ci.common.pipeline.resp.context.SingletonRunContextResp; import cd.casic.ci.common.pipeline.resp.stage.StageResp; import cd.casic.ci.process.engine.manager.RunContextManager; import cd.casic.ci.process.engine.runContext.BaseRunContext; @@ -18,7 +18,6 @@ import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; import cd.casic.framework.commons.util.object.BeanUtils; import cd.casic.framework.commons.util.util.WebFrameworkUtils; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.annotation.Resource; @@ -409,9 +408,9 @@ public class StageServiceImpl extends ServiceImpl impleme } @Override - public Map getStageRunState(String stageId) { + public Map getStageRunState(String stageId) { PipStage byId = getById(stageId); - Map result = new HashMap<>(); + Map result = new HashMap<>(); if (byId==null||"-1".equals(byId.getParentId())) { log.error("传入stageId非阶段id"); return result; @@ -428,7 +427,7 @@ public class StageServiceImpl extends ServiceImpl impleme } String taskId = taskValue.getId(); int state = context.getState().get(); - RunContextResp runContextResp = new RunContextResp(); + SingletonRunContextResp runContextResp = new SingletonRunContextResp(); runContextResp.setState(state); runContextResp.setId(taskId); result.put(taskId,runContextResp); diff --git a/ops-server/src/main/java/cd/casic/server/controller/PipelineController.java b/ops-server/src/main/java/cd/casic/server/controller/PipelineController.java index 3980a76d..814f9f88 100644 --- a/ops-server/src/main/java/cd/casic/server/controller/PipelineController.java +++ b/ops-server/src/main/java/cd/casic/server/controller/PipelineController.java @@ -4,6 +4,7 @@ import cd.casic.ci.common.pipeline.req.pipeline.PipelineCreateReq; import cd.casic.ci.common.pipeline.req.pipeline.PipelineQueryReq; import cd.casic.ci.common.pipeline.req.pipeline.PipelineReq; import cd.casic.ci.common.pipeline.req.pipeline.PipelineUpdateReq; +import cd.casic.ci.common.pipeline.resp.context.SingletonRunContextResp; import cd.casic.ci.common.pipeline.resp.pipeline.PipelineFindResp; import cd.casic.ci.common.pipeline.utils.PageResult; import cd.casic.ci.process.engine.executor.PipelineExecutor; @@ -14,12 +15,10 @@ import jakarta.annotation.Resource; import jakarta.annotation.security.PermitAll; import jakarta.validation.Valid; import org.jetbrains.annotations.NotNull; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Map; /** * @ClassName PipelineController @@ -105,4 +104,8 @@ public class PipelineController { PipelineRunContext execute = pipelineExecutor.execute(pipelineId); return CommonResult.success(execute); } + @PostMapping("/getStageRunState/{pipelineId}") + public CommonResult> getPipelineRunState(@PathVariable String pipelineId){ + return CommonResult.success(pipelineService.getPipelineRunState(pipelineId)); + } } diff --git a/ops-server/src/main/java/cd/casic/server/controller/StageController.java b/ops-server/src/main/java/cd/casic/server/controller/StageController.java index 7b239d01..313016a9 100644 --- a/ops-server/src/main/java/cd/casic/server/controller/StageController.java +++ b/ops-server/src/main/java/cd/casic/server/controller/StageController.java @@ -1,9 +1,8 @@ package cd.casic.server.controller; -import cd.casic.ci.common.pipeline.container.Stage; import cd.casic.ci.common.pipeline.req.stage.StageCreateReq; import cd.casic.ci.common.pipeline.req.stage.StageUpdateReq; -import cd.casic.ci.common.pipeline.resp.context.RunContextResp; +import cd.casic.ci.common.pipeline.resp.context.SingletonRunContextResp; import cd.casic.ci.common.pipeline.resp.stage.StageResp; import cd.casic.ci.process.process.service.stage.StageService; import cd.casic.framework.commons.pojo.CommonResult; @@ -97,7 +96,7 @@ public class StageController { return CommonResult.success(); } @PostMapping("/getStageRunState/{stageId}") - public CommonResult > getStageRunState(@PathVariable String stageId){ + public CommonResult > getStageRunState(@PathVariable String stageId){ return CommonResult.success(stageService.getStageRunState(stageId)); } }