DockerBuildCtrl.java 8.1 KB
package com.ui.ctrl;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.ui.contants.HttpUriContants;
import com.ui.http.HttpRestClient;
import com.ui.model.BaseResponse;
import com.ui.model.domain.BuildMessage;
import com.ui.model.domain.DockerProjectModel;
import com.ui.model.req.BuildRequest;
import com.ui.model.req.DockerJenkinsReq;
import com.ui.model.req.User;
import com.ui.model.req.*;
import com.ui.project.ProjectEnvironment;
import com.ui.project.ProjectOnline;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpSession;
import java.util.*;


@RestController
@RequestMapping("/dockerBuild")
public class DockerBuildCtrl {
    Logger log = LoggerFactory.getLogger(DockerBuildCtrl.class);

    @Autowired
    private HttpRestClient httpRestClient;

    @RequestMapping("/toProject")
    public ModelAndView toProject(Model model,String workJobId) {
        if(StringUtils.isNotBlank(workJobId)){
          //如果来源工单发布界面

        }
        model.addAttribute("environments", ProjectEnvironment.getDockerEnvironments());
        model.addAttribute("projectTypes", ProjectEnvironment.getDockerProjectTypes());
        return new ModelAndView("project/docker_project");
    }

    @RequestMapping("/toBuildView")
    public ModelAndView toBuildView(Model model,String project_id, String project_name, String environment_name, String operate_name, String branch_name, String rollbackfile_name,String workid_name, String buildIds,String failMsg, HttpSession session) {
        Map mapIds = new HashMap<>();
        mapIds.put("ids",project_id);
        BaseResponse response=httpRestClient.defaultGet("/dockerProject/getDockerProjectMapByIds", BaseResponse.class, mapIds);
        Map projectMap=JSON.parseObject((String)response.getData(),Map.class);

        List<Map<String,String>> buildInfoList=new ArrayList<>();
        for(String buildIdWithProjectId:buildIds.split(",")){
            int index = buildIdWithProjectId.indexOf("-");
            String projectId=buildIdWithProjectId.substring(0,index);
            String buildId=buildIdWithProjectId.substring(index+1);
            Map map=new HashMap();
            map.put("projectId",projectId);
            map.put("buildId",buildId);
            map.put("projectName",buildId.substring(0,buildId.lastIndexOf("-")));
            map.put("projectInfo",projectMap.get(Integer.parseInt(projectId)));
            buildInfoList.add(map);
        }
        model.addAttribute("environment_name", environment_name);
        model.addAttribute("operate_name", operate_name);
        model.addAttribute("branch_name", branch_name);
        model.addAttribute("workid_name", workid_name);
        model.addAttribute("buildIds", buildIds);
        model.addAttribute("failMsg", failMsg);
        model.addAttribute("buildInfoList",JSONArray.toJSON(buildInfoList));

        return new ModelAndView("project/docker_build");
    }

    /**
     * 获取所有项目
     *
     * @return
     */
    @RequestMapping(value = "/getProjects")
    @ResponseBody
    public String getProjects(String projectType) {
        try {
            Map map = new HashMap<>();
            map.put("projectType",projectType);
            BaseResponse response=httpRestClient.defaultGet("/dockerProject/getDockerProjectByProjectType", BaseResponse.class, map);
            return JSONArray.toJSON(response.getData()).toString();
        } catch (Exception ex) {
            return "failed";
        }
    }

    /**
     * deploy项目
     *
     * @return
     */
    @RequestMapping(value = "/mirrorAndDeploy")
    @ResponseBody
    public BaseResponse mirrorAndDeploy(String project_id, String project_name, String environment_name, String operate_name, String branch_name, String rollbackfile_name,String workid_name, Model model, HttpSession session) {
        DockerJenkinsReq dockerJenkinsReq=new DockerJenkinsReq();
        User user = (User) session.getAttribute("user");
        dockerJenkinsReq.setUserName(user.getName());
        dockerJenkinsReq.setUserMail(user.getEmail());
        dockerJenkinsReq.setProjectIds(project_id);
        dockerJenkinsReq.setNodeEnv(environment_name);
        dockerJenkinsReq.setBranch(branch_name);
        dockerJenkinsReq.setReleaseWorkId(workid_name);
        if("deploy".equalsIgnoreCase(operate_name)){
            return httpRestClient.defaultPost("/dockerProject/mirrorAndDeploy",dockerJenkinsReq,BaseResponse.class);
        }
        BaseResponse rtnBaseResponse=new BaseResponse(201);
        rtnBaseResponse.setMessage("暂不支持的操作:"+operate_name);
        return rtnBaseResponse;
    }

    /**
     * 镜像制作
     */
    @RequestMapping(value = "/createMirror")
    @ResponseBody
    public BaseResponse createMirror(DockerJenkinsReq dockerJenkinsReq,HttpSession session) {
        User user = (User) session.getAttribute("user");
        dockerJenkinsReq.setUserName(user.getName());
        dockerJenkinsReq.setUserMail(user.getEmail());
        return httpRestClient.defaultPost("/dockerProject/createMirror",dockerJenkinsReq,BaseResponse.class);
    }

    /**
     * 镜像制作
     */
    @RequestMapping(value = "/queryJenkinsStatus")
    @ResponseBody
    public BaseResponse queryJenkinsStatus(String buildId) {
        Map map = new HashMap<>();
        map.put("id",buildId);
        BaseResponse response=httpRestClient.defaultGet("/dockerProject/queryJenkinsStatus", BaseResponse.class, map);
        return response;
    }

    /**
     * qq发布
     */
    @RequestMapping(value = "/deployMirror")
    @ResponseBody
    public BaseResponse deployMirror(DockerJenkinsReq dockerJenkinsReq) {
        return httpRestClient.defaultPost("/dockerProject/deployMirror",dockerJenkinsReq,BaseResponse.class);
    }

    /**
     * qq发布
     */
    @RequestMapping(value = "/queryDockerServerStatus")
    @ResponseBody
    public BaseResponse queryDockerServerStatus(DockerJenkinsReq dockerJenkinsReq) {
        return httpRestClient.defaultPost("/dockerProject/queryDockerServerStatus",dockerJenkinsReq,BaseResponse.class);
    }



    @RequestMapping(value = "/toDockerInfoList")
    public ModelAndView toDockerInfoList(Model model,DockerJenkinsReq dockerJenkinsReq) {
        model.addAttribute("projectTypes", ProjectEnvironment.getDockerProjectTypes());
        model.addAttribute("projectJobTypes", httpRestClient.defaultGet("/dockerProject/getDockerProjectJobType",BaseResponse.class).getData());
        return new ModelAndView("project/docker_info");
    }

    /**
     * docker信息列表
     * @param req
     * @return
     * @throws Exception
     */
    @RequestMapping("/getDockerInfoList")
    @ResponseBody
    public BaseResponse getHostInfos(DockerInfoReq req) throws Exception {
        BaseResponse response = httpRestClient.defaultPost(HttpUriContants.DOCKER_INFO_LIST, req, BaseResponse.class);
        return response;
    }


    @RequestMapping("/toEditDockerInfo")
    public ModelAndView toEditDockerInfos(Map model) {
        return new ModelAndView("project/editDockerInfo",model);
    }


    @RequestMapping("/saveDockerInfo")
    @ResponseBody
    public BaseResponse saveDockerInfo(@RequestBody  DockerProjectModel req) throws Exception {
        BaseResponse response = httpRestClient.defaultPost(HttpUriContants.ADDORUPDATE_DOCKER_INFO, req, BaseResponse.class);
        return response;
    }


    @RequestMapping("/getDockerInfoById")
    @ResponseBody
    public BaseResponse getDockerInfoById(int id) throws Exception {
        BaseResponse response = httpRestClient.defaultGet(HttpUriContants.GET_DOCERK_INFO_BY_ID + "?id=" + id, BaseResponse.class);
        return response;
    }

    @RequestMapping("/delDockerInfoById")
    @ResponseBody
    public BaseResponse<Integer> delDockerInfoById(int id) throws Exception {
        BaseResponse response = httpRestClient.defaultGet(HttpUriContants.DEL_DOCKER_INFO_BYID + "?id=" + id, BaseResponse.class);
        return response;
    }
}