流水线状态查询方法添加

This commit is contained in:
even 2025-05-22 15:02:58 +08:00
parent aa9f19350e
commit 8bca5d8713
9 changed files with 90 additions and 27 deletions

View File

@ -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;
}

View File

@ -0,0 +1,17 @@
package cd.casic.ci.common.pipeline.resp.context;
import lombok.Data;
/**
* 单节点上下文状态返回对象
* */
@Data
public class SingletonRunContextResp {
/**
* 流水线元素的idpipelinestagetask
* */
private String id;
/**
* 状态 详见 ContextStateEnum
* */
private Integer state;
}

View File

@ -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<String,TreeRunContextResp> child;
}

View File

@ -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.PipelineQueryReq;
import cd.casic.ci.common.pipeline.req.pipeline.PipelineReq; import cd.casic.ci.common.pipeline.req.pipeline.PipelineReq;
import cd.casic.ci.common.pipeline.req.pipeline.PipelineUpdateReq; 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.resp.pipeline.PipelineFindResp;
import cd.casic.ci.common.pipeline.utils.PageResult; import cd.casic.ci.common.pipeline.utils.PageResult;
import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline; 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 jakarta.validation.Valid;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @author HopeLi * @author HopeLi
@ -33,4 +35,6 @@ public interface PipelineService extends IService<PipPipeline> {
void pipelineClone(@Valid PipelineReq req); void pipelineClone(@Valid PipelineReq req);
PipelineFindResp findPipelineById(@Valid PipelineQueryReq pipelineQueryReq); PipelineFindResp findPipelineById(@Valid PipelineQueryReq pipelineQueryReq);
Map<String, SingletonRunContextResp> getPipelineRunState(String pipelineId);
} }

View File

@ -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.PipelineQueryReq;
import cd.casic.ci.common.pipeline.req.pipeline.PipelineReq; import cd.casic.ci.common.pipeline.req.pipeline.PipelineReq;
import cd.casic.ci.common.pipeline.req.pipeline.PipelineUpdateReq; 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.pipeline.PipelineFindResp;
import cd.casic.ci.common.pipeline.resp.stage.StageResp; import cd.casic.ci.common.pipeline.resp.stage.StageResp;
import cd.casic.ci.common.pipeline.utils.PageResult; 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.converter.PipelineConverter;
import cd.casic.ci.process.process.dal.pipeline.PipResourceDao; import cd.casic.ci.process.process.dal.pipeline.PipResourceDao;
import cd.casic.ci.process.process.dal.pipeline.PipStageDao; import cd.casic.ci.process.process.dal.pipeline.PipStageDao;
@ -38,9 +43,7 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Objects;
/** /**
* @author HopeLi * @author HopeLi
@ -75,6 +78,8 @@ public class PipelineServiceImpl extends ServiceImpl<PipelineDao, PipPipeline> i
@Resource @Resource
private AdminUserServiceImpl adminUserService; private AdminUserServiceImpl adminUserService;
@Resource
private RunContextManager contextManager;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@ -519,4 +524,38 @@ public class PipelineServiceImpl extends ServiceImpl<PipelineDao, PipPipeline> i
return resp; return resp;
} }
@Override
public Map<String, SingletonRunContextResp> 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<String,TreeRunContextResp> secondStageStateMap = new HashMap<>(pipelineRunContext.getChildContext().size());
Map<String, BaseRunContext> childContext = pipelineRunContext.getChildContext();
pipeline.setChild(secondStageStateMap);
for (Map.Entry<String, BaseRunContext> 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<String, BaseRunContext> taskIdContextMap = value.getChildContext();
Map<String,TreeRunContextResp> taskStateMap = new HashMap<>(taskIdContextMap.size());
secondStage.setChild(taskStateMap);
for (Map.Entry<String, BaseRunContext> 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<>();
}
} }

View File

@ -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.StageCreateReq;
import cd.casic.ci.common.pipeline.req.stage.StageUpdateReq; 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.common.pipeline.resp.stage.StageResp;
import cd.casic.ci.process.process.dataObject.stage.PipStage; import cd.casic.ci.process.process.dataObject.stage.PipStage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
@ -85,5 +85,5 @@ public interface StageService extends IService<PipStage> {
void copyStage(@NotEmpty String stageId); void copyStage(@NotEmpty String stageId);
void deleteFirstStage(String stageId); void deleteFirstStage(String stageId);
Map<String, RunContextResp> getStageRunState(@PathVariable String stageId); Map<String, SingletonRunContextResp> getStageRunState(@PathVariable String stageId);
} }

View File

@ -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.StageCreateReq;
import cd.casic.ci.common.pipeline.req.stage.StageUpdateReq; import cd.casic.ci.common.pipeline.req.stage.StageUpdateReq;
import cd.casic.ci.common.pipeline.req.task.TaskCreateReq; 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.common.pipeline.resp.stage.StageResp;
import cd.casic.ci.process.engine.manager.RunContextManager; import cd.casic.ci.process.engine.manager.RunContextManager;
import cd.casic.ci.process.engine.runContext.BaseRunContext; 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.object.BeanUtils;
import cd.casic.framework.commons.util.util.WebFrameworkUtils; import cd.casic.framework.commons.util.util.WebFrameworkUtils;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@ -409,9 +408,9 @@ public class StageServiceImpl extends ServiceImpl<PipStageDao, PipStage> impleme
} }
@Override @Override
public Map<String, RunContextResp> getStageRunState(String stageId) { public Map<String, SingletonRunContextResp> getStageRunState(String stageId) {
PipStage byId = getById(stageId); PipStage byId = getById(stageId);
Map<String, RunContextResp> result = new HashMap<>(); Map<String, SingletonRunContextResp> result = new HashMap<>();
if (byId==null||"-1".equals(byId.getParentId())) { if (byId==null||"-1".equals(byId.getParentId())) {
log.error("传入stageId非阶段id"); log.error("传入stageId非阶段id");
return result; return result;
@ -428,7 +427,7 @@ public class StageServiceImpl extends ServiceImpl<PipStageDao, PipStage> impleme
} }
String taskId = taskValue.getId(); String taskId = taskValue.getId();
int state = context.getState().get(); int state = context.getState().get();
RunContextResp runContextResp = new RunContextResp(); SingletonRunContextResp runContextResp = new SingletonRunContextResp();
runContextResp.setState(state); runContextResp.setState(state);
runContextResp.setId(taskId); runContextResp.setId(taskId);
result.put(taskId,runContextResp); result.put(taskId,runContextResp);

View File

@ -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.PipelineQueryReq;
import cd.casic.ci.common.pipeline.req.pipeline.PipelineReq; import cd.casic.ci.common.pipeline.req.pipeline.PipelineReq;
import cd.casic.ci.common.pipeline.req.pipeline.PipelineUpdateReq; 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.resp.pipeline.PipelineFindResp;
import cd.casic.ci.common.pipeline.utils.PageResult; import cd.casic.ci.common.pipeline.utils.PageResult;
import cd.casic.ci.process.engine.executor.PipelineExecutor; import cd.casic.ci.process.engine.executor.PipelineExecutor;
@ -14,12 +15,10 @@ import jakarta.annotation.Resource;
import jakarta.annotation.security.PermitAll; import jakarta.annotation.security.PermitAll;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @ClassName PipelineController * @ClassName PipelineController
@ -105,4 +104,8 @@ public class PipelineController {
PipelineRunContext execute = pipelineExecutor.execute(pipelineId); PipelineRunContext execute = pipelineExecutor.execute(pipelineId);
return CommonResult.success(execute); return CommonResult.success(execute);
} }
@PostMapping("/getStageRunState/{pipelineId}")
public CommonResult<Map<String, SingletonRunContextResp>> getPipelineRunState(@PathVariable String pipelineId){
return CommonResult.success(pipelineService.getPipelineRunState(pipelineId));
}
} }

View File

@ -1,9 +1,8 @@
package cd.casic.server.controller; 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.StageCreateReq;
import cd.casic.ci.common.pipeline.req.stage.StageUpdateReq; 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.common.pipeline.resp.stage.StageResp;
import cd.casic.ci.process.process.service.stage.StageService; import cd.casic.ci.process.process.service.stage.StageService;
import cd.casic.framework.commons.pojo.CommonResult; import cd.casic.framework.commons.pojo.CommonResult;
@ -97,7 +96,7 @@ public class StageController {
return CommonResult.success(); return CommonResult.success();
} }
@PostMapping("/getStageRunState/{stageId}") @PostMapping("/getStageRunState/{stageId}")
public CommonResult<Map<String, RunContextResp> > getStageRunState(@PathVariable String stageId){ public CommonResult<Map<String, SingletonRunContextResp> > getStageRunState(@PathVariable String stageId){
return CommonResult.success(stageService.getStageRunState(stageId)); return CommonResult.success(stageService.getStageRunState(stageId));
} }
} }