|
|
@@ -2,17 +2,26 @@ package seecoder.devcloud.web.service.impl.pipeline;
|
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import seecoder.devcloud.api.ApplicationProperties;
|
|
|
+import seecoder.devcloud.api.k8s.model.DeploymentStatus;
|
|
|
+import seecoder.devcloud.common.exceptions.AccessDeniedException;
|
|
|
import seecoder.devcloud.core.pipeline.Pipeline;
|
|
|
import seecoder.devcloud.core.pipeline.PipelineException;
|
|
|
import seecoder.devcloud.core.pipeline.PipelineFactory;
|
|
|
+import seecoder.devcloud.core.pipeline.inspector.PipelineInspector;
|
|
|
+import seecoder.devcloud.core.pipeline.inspector.PipelineInspectorFactory;
|
|
|
+import seecoder.devcloud.web.dao.pipeline.PipelineHistoryMapper;
|
|
|
import seecoder.devcloud.web.dao.pipeline.PipelineMapper;
|
|
|
import seecoder.devcloud.web.dao.project.ProjectMapper;
|
|
|
+import seecoder.devcloud.web.model.po.pipeline.PipelineHistoryPO;
|
|
|
import seecoder.devcloud.web.model.po.pipeline.PipelinePO;
|
|
|
import seecoder.devcloud.web.model.po.project.ProjectPO;
|
|
|
import seecoder.devcloud.web.model.vo.pipeline.DeploymentInfoVO;
|
|
|
import seecoder.devcloud.web.service.pipeline.DeploymentService;
|
|
|
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @author PuHong Weng
|
|
|
@@ -24,24 +33,57 @@ public class DeploymentServiceImpl implements DeploymentService {
|
|
|
|
|
|
private final PipelineMapper pipelineMapper;
|
|
|
|
|
|
+ private final PipelineHistoryMapper pipelineHistoryMapper;
|
|
|
+
|
|
|
private final ProjectMapper projectMapper;
|
|
|
|
|
|
+ private final ApplicationProperties properties;
|
|
|
+
|
|
|
|
|
|
@Autowired
|
|
|
- public DeploymentServiceImpl(PipelineMapper pipelineMapper, ProjectMapper projectMapper) {
|
|
|
+ public DeploymentServiceImpl(PipelineMapper pipelineMapper, PipelineHistoryMapper pipelineHistoryMapper, ProjectMapper projectMapper, ApplicationProperties properties) {
|
|
|
this.pipelineMapper = pipelineMapper;
|
|
|
+ this.pipelineHistoryMapper = pipelineHistoryMapper;
|
|
|
this.projectMapper = projectMapper;
|
|
|
+ this.properties = properties;
|
|
|
}
|
|
|
|
|
|
|
|
|
@Override
|
|
|
- public List<DeploymentInfoVO> retrieveDeploymentInfos(Integer projectId) {
|
|
|
- //todo 需要远端查看k8s实例的status
|
|
|
- return null;
|
|
|
+ public List<DeploymentInfoVO> retrieveDeploymentInfos(Integer projectId) throws AccessDeniedException {
|
|
|
+ //projectAuthentication(projectId);
|
|
|
+ ProjectPO project = projectMapper.getProjectById(projectId);
|
|
|
+ List<PipelinePO> pipelines = pipelineMapper.selectByProjectId(projectId);
|
|
|
+ // 获取项目所关联的所有流水线
|
|
|
+ List<Integer> pipelineIds = pipelines.stream().map(PipelinePO::getId).collect(Collectors.toList());
|
|
|
+ // 获取流水线历史
|
|
|
+ List<PipelineHistoryPO> histories = pipelineHistoryMapper.selectRecentlyHistoryBy(pipelineIds);
|
|
|
+ Map<Integer, PipelineHistoryPO> historyMap = histories.stream().collect(Collectors.toMap(PipelineHistoryPO::getPipelineId, x->x));
|
|
|
+ return pipelines.stream().map(x->{
|
|
|
+ String accessUrl = x.getName()+"."+project.getName()+ properties.getK8s().getIngressHostSuffix();
|
|
|
+ PipelineHistoryPO history = historyMap.get(x.getId());
|
|
|
+ PipelineInspector inspector = PipelineInspectorFactory.init(project.getName(),x.getName(),x.getId(),x.getTemplateName());
|
|
|
+ //获取状态
|
|
|
+ String status = null;
|
|
|
+ DeploymentStatus deploymentStatus = inspector.inspectStatus();
|
|
|
+ if(deploymentStatus.isAvailable()){
|
|
|
+ status = "正常运行";
|
|
|
+ } else{
|
|
|
+ status = "不可用: " + deploymentStatus.getProgressingMessage();
|
|
|
+ }
|
|
|
+ return DeploymentInfoVO.builder()
|
|
|
+ .pipelineId(x.getId())
|
|
|
+ .name(x.getName())
|
|
|
+ .deployedTime(history.getStartTime())
|
|
|
+ .accessUrl(accessUrl)
|
|
|
+ .status(status)
|
|
|
+ .build();
|
|
|
+ }).collect(Collectors.toList());
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void deploy(Integer projectId, Integer pipelineId) {
|
|
|
+ public void deploy(Integer projectId, Integer pipelineId) throws AccessDeniedException {
|
|
|
+ //projectAuthentication(projectId);
|
|
|
PipelinePO pipelinePO = pipelineMapper.selectById(pipelineId);
|
|
|
ProjectPO projectPO = projectMapper.getProjectById(projectId);
|
|
|
try {
|
|
|
@@ -55,7 +97,11 @@ public class DeploymentServiceImpl implements DeploymentService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void delete(Integer projectId, Integer pipelineId) {
|
|
|
-
|
|
|
+ public void delete(Integer projectId, Integer pipelineId) throws AccessDeniedException {
|
|
|
+ //projectAuthentication(projectId);
|
|
|
+ ProjectPO project = projectMapper.getProjectById(projectId);
|
|
|
+ PipelinePO pipelinePO = pipelineMapper.selectById(pipelineId);
|
|
|
+ PipelineInspector inspector = PipelineInspectorFactory.init(project.getName(),pipelinePO.getName(),pipelineId,pipelinePO.getTemplateName());
|
|
|
+ inspector.delete();
|
|
|
}
|
|
|
}
|