Authored by qinchao

pch5 az2 自动切换环境准备

package com.ui.ctrl;
import com.ui.contants.HttpUriContants;
import com.ui.ctrl.util.ReleaseCheck;
import com.ui.http.HttpRestClient;
import com.ui.model.BaseResponse;
import com.ui.model.domain.BuildMessage;
... ... @@ -32,6 +33,9 @@ public class NodeBuildCtrl {
@Autowired
private HttpRestClient httpRestClient;
@Autowired
private ReleaseCheck releaseCheck;
private String URL = "http://172.31.16.167:8883/node/";
@RequestMapping("/toProject")
... ... @@ -107,20 +111,53 @@ public class NodeBuildCtrl {
*/
@RequestMapping(value = "check")
@ResponseBody
public String check(String workid,HttpSession httpSession) {
User user = (User) httpSession.getAttribute("user");
Map<String,String> map = new HashMap<>();
if (!StringUtils.equals("release0", workid)){//查询用户是否有工单处理权限
map.put("id",workid);
map.put("user",user.getName());
BaseResponse baseResponse = httpRestClient.defaultGet(HttpUriContants.CHECK_JOB_BY_OPERATOR,BaseResponse.class,map);
if (baseResponse.getCode() != 200){
return baseResponse.getMessage();
}
public BaseResponse check(String project,String branch, String environment,String workid,HttpSession httpSession) {
BaseResponse rtnResponse=releaseCheck.check(workid,httpSession);
if(200!=rtnResponse.getCode()){
return rtnResponse;
}
//获取az2灰度情况
BaseResponse<Boolean> checkGrayResponse = httpRestClient.defaultGet("/pch5Switch/queryAz2InGray",BaseResponse.class);
if (checkGrayResponse==null||checkGrayResponse.getCode() != 200){
rtnResponse.setCode(201);
rtnResponse.setMessage("检查az2灰度失败");
return rtnResponse;
}
boolean az2InGray=checkGrayResponse.getData();
//检查分支和可用区的冲突
if(environment.contains("az1")){
if(!"master".equals(branch)){
rtnResponse.setCode(201);
rtnResponse.setMessage("az1区域只能发布master分支");
return rtnResponse;
}
return "1";
//az1-az2
if(environment.contains("az2")){
if(az2InGray){
if(checkGrayResponse.getData()){
rtnResponse.setCode(201);
rtnResponse.setMessage("az2灰度已经启用了, 不允许发布 az1+az2");
return rtnResponse;
}
}
}
}else{
//单独发布az2,环境可能还有aws等(其它不需要校验的项目)
if(environment.contains("az2")){
if("master".equals(branch)){
//z2区如果发master分支,需要检查所有项目(现在是3个:YOHOBUY-WAP-NODE , YOHOBUY-PC-NODE ,YOHOBLK-WAP)
//如果所有项目最近一次发送成功都是master分支,则自动关闭灰度环境
}else{
//az2区如果发非master分支,发布之前自动切换到灰度环境
}
}
}
return rtnResponse;
}
... ...
... ... @@ -64,7 +64,17 @@ public class Pch5SwitchCtrl {
@RequestMapping(value = "/getAz2NodeHosts")
@ResponseBody
public BaseResponse getAz2NodeHosts() {
return httpRestClient.defaultGet( "/pch5Switch/getAz2NodeHosts", BaseResponse.class, null);
return httpRestClient.defaultGet( "/pch5Switch/getAz2NodeHosts", BaseResponse.class);
}
/**
* 最近发布记录(success)
*
*/
@RequestMapping(value = "/getAzProjectLatestReleaseHistory")
@ResponseBody
public BaseResponse getAzProjectLatestReleaseHistory() {
return httpRestClient.defaultGet( "/pch5Switch/getAzProjectLatestReleaseHistory", BaseResponse.class);
}
}
... ...
package com.ui.ctrl;
import com.ui.contants.HttpUriContants;
import com.ui.ctrl.util.ReleaseCheck;
import com.ui.http.HttpRestClient;
import com.ui.model.BaseResponse;
import com.ui.model.domain.BuildMessage;
... ... @@ -31,6 +32,8 @@ public class PhpBuildCtrl {
@Autowired
private HttpRestClient httpRestClient;
@Autowired
private ReleaseCheck releaseCheck;
private String URL = "http://172.31.16.167:8883/php/";
//private String URL = "http://127.0.0.1:8883/php/";
... ... @@ -77,20 +80,13 @@ public class PhpBuildCtrl {
*/
@RequestMapping(value = "check")
@ResponseBody
public String check(String workid,HttpSession httpSession) {
User user = (User) httpSession.getAttribute("user");
Map<String,String> map = new HashMap<>();
if (!StringUtils.equals("release0", workid)){//查询用户是否有工单处理权限
map.put("id",workid);
map.put("user",user.getName());
BaseResponse baseResponse = httpRestClient.defaultGet(HttpUriContants.CHECK_JOB_BY_OPERATOR,BaseResponse.class,map);
if (baseResponse.getCode() != 200){
return baseResponse.getMessage();
}
}
public BaseResponse check(String workid,HttpSession httpSession) {
BaseResponse rtnResponse=releaseCheck.check(workid,httpSession);
/*if(200!=rtnResponse.getCode()){
return rtnResponse;
}*/
return "1";
return rtnResponse;
}
... ...
... ... @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ui.contants.AlarmGroupContants;
import com.ui.contants.HttpUriContants;
import com.ui.ctrl.util.ReleaseCheck;
import com.ui.http.HttpRestClient;
import com.ui.model.BaseResponse;
import com.ui.model.domain.BuildMessage;
... ... @@ -42,6 +43,9 @@ public class ProjectBuildCtrl {
@Autowired
private HttpRestClient httpRestClient;
@Autowired
private ReleaseCheck releaseCheck;
@RequestMapping("/toOm")
public ModelAndView toOm() {
return new ModelAndView("project/om");
... ... @@ -171,34 +175,33 @@ public class ProjectBuildCtrl {
*/
@RequestMapping(value = "check")
@ResponseBody
public String check(String projects, String branch, String environment,String workid,HttpSession httpSession) {
public BaseResponse check(String projects, String branch, String environment,String workid,HttpSession httpSession) {
BaseResponse rtnResponse=releaseCheck.check(workid,httpSession);
if(200!=rtnResponse.getCode()){
return rtnResponse;
}
//项目冲突的校验
List<Object> checkRtn= ProjectMutex.checkMutex(projects);
boolean mutex=(Boolean)checkRtn.get(0);
if(mutex){
return (String)checkRtn.get(1);
rtnResponse.setCode(201);
rtnResponse.setMessage((String)checkRtn.get(1));
return rtnResponse;
}
User user = (User) httpSession.getAttribute("user");
Map<String,String> map = new HashMap<>();
if (!StringUtils.equals("release0",workid)){//查询用户是否有工单处理权限
map.put("id",workid);
map.put("user",user.getName());
BaseResponse baseResponse = httpRestClient.defaultGet(HttpUriContants.CHECK_JOB_BY_OPERATOR,BaseResponse.class,map);
if (baseResponse.getCode() != 200){
return baseResponse.getMessage();
}
}
log.info("check environment {} projects {} branch {}",environment,projects,branch);
if (!("master".equals(branch) || "test".equals(branch) || "dev".equals(branch) )) {
map.clear();
map.put("projects", projects);
map.put("branch", branch);
return httpRestClient.get(ProjectEnvironment.getUrl(environment) + "checkBranch", String.class, map);
String checkBranchResult= httpRestClient.get(ProjectEnvironment.getUrl(environment) + "checkBranch", String.class, map);
if(!"1".equals(checkBranchResult)){
rtnResponse.setCode(201);
rtnResponse.setMessage("分支不存在"+branch+",result :"+checkBranchResult);
return rtnResponse;
}
}
return "1";
return rtnResponse;
}
... ...
package com.ui.ctrl.util;
import com.ui.contants.HttpUriContants;
import com.ui.http.HttpRestClient;
import com.ui.model.BaseResponse;
import com.ui.model.req.User;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;
@Component
public class ReleaseCheck {
@Autowired
private HttpRestClient httpRestClient;
/**
* 发布前校验
*
* @return
*/
public BaseResponse check(String workid,HttpSession httpSession) {
BaseResponse rtnResponse=new BaseResponse();
rtnResponse.setCode(201);
rtnResponse.setMessage("用户无工单处理权限");
User user = (User) httpSession.getAttribute("user");
Map<String,String> map = new HashMap<>();
if (!StringUtils.equals("release0",workid)){//查询用户是否有工单处理权限
map.put("id",workid);
map.put("user",user.getName());
BaseResponse baseResponse = httpRestClient.defaultGet(HttpUriContants.CHECK_JOB_BY_OPERATOR,BaseResponse.class,map);
if (baseResponse!=null&&baseResponse.getCode() == 200){
rtnResponse.setCode(200);
rtnResponse.setMessage("");
}
}
return rtnResponse;
}
}
... ...
... ... @@ -75,10 +75,12 @@
<canvas width="600" height="450" id="canvas"></canvas>
</div>
<div class="widget-content nopadding" style="margin-left: 600px;border-left: 1px solid #E5E5E5;">
<div id="operateDiv" class="widget-content nopadding">
<div class="widget-content nopadding">
<div class="tree_container" style="height: 540px;color: black;overflow:auto;">
<div class="panel panel-default">
<div class="panel panel-default">
<div id="operateDiv">
<div class="widget-title" style="height: 50px;">
<h5 style="display: inline">pch5可用区切换</h5>
</div>
... ... @@ -105,7 +107,7 @@
<h3 class="header smaller red"></h3>
<div class="widget-title" style="height: 50px;">
<h5 style="display: inline">pch5-az2 灰度环境切换</h5>
<h5 style="display: inline">pch5-az2 灰度环境切换&nbsp;&nbsp;&nbsp;<small>当前环境 <span id="az2Env" style="margin-left:5px;"></span></small></h5>
</div>
<div class="panel-body">
<div class="btn-group">
... ... @@ -122,9 +124,24 @@
</div>
</div>
</div>
<h3 class="header smaller red"></h3>
<div class="widget-title" style="height: 50px;">
<h5 style="display: inline">az2最近发布记录[success]</h5>
</div>
<div class="panel-body">
<div id="historyTable">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
... ... @@ -151,12 +168,15 @@
$("#az2_service_switch_online").removeAttr("disabled");
$("#az2_service_switch_gray").removeAttr("disabled");
if(resp.data.az2InGray){
$("#az2Env").html("灰度");
changeSwitchBtnStatus("disabled");
}else{
$("#az2Env").html("online");
changeSwitchBtnStatus("enable");
}
drawData(resp.data);
}else{
$("#az2Env").html("");
//layer.msg("绘图异常:"+resp.message, {icon: 2});
$("#operateDiv").html('<div style="height:450px;color:red;padding-top:50px;">配置错误<br>'+resp.message+'</div>');
}
... ... @@ -165,6 +185,41 @@
$("#operateDiv").html('<div style="height:450px;color:red;padding-top:50px;">错误error<br>获取pch5-elb配置信息异常</div>');
}
});
//加载表格
$("#historyTable").table({
columnAutoWidth: false,
url: contextPath+"/pch5Switch/getAzProjectLatestReleaseHistory",
striped: true,
title: "",
dataType: "json",
pagination: false,
pageSize: 10,
loadFilter: function (data) {
return defaultLoadFilter(data);
},
columns: [ {
title: "环境",
field: "environment",
width: "8%"
}, {
title: "操作",
field: "operate",
width: "8%"
}, {
title: "项目",
field: "currentProject",
width: "10%"
},{
title: "分支",
field: "branch",
width: "8%"
},{
title: "时间",
field: "createTime",
width: "12%"
}]
});
});
function changeSwitchBtnStatus(status){
... ...
... ... @@ -184,7 +184,7 @@
<script src="<%=basePath%>js/bootstrap.min.js"></script>
<script src="<%=basePath%>js/select2.min.js"></script>
<script src="<%=basePath%>js/custom.js"></script>
<script src="<%=basePath%>script/build/node_project.js?v=20180312-2"></script>
<script src="<%=basePath%>script/build/node_project.js?v=20180323"></script>
<script src="<%=basePath %>/js/unicorn.js"></script>
<script src="<%=basePath %>script/common/genarate_left_panel.js?v=<%=ProjectConstant.MENU_VERSION %>"></script>
... ...
... ... @@ -176,7 +176,7 @@
<script src="<%=basePath%>js/bootstrap.min.js"></script>
<script src="<%=basePath%>js/select2.min.js"></script>
<script src="<%=basePath%>js/custom.js"></script>
<script src="<%=basePath%>script/build/php_project.js"></script>
<script src="<%=basePath%>script/build/php_project.js?v=20180323"></script>
<script src="<%=basePath %>/js/unicorn.js"></script>
<script src="<%=basePath %>script/common/genarate_left_panel.js?v=<%=ProjectConstant.MENU_VERSION %>"></script>
<script type="text/javascript">
... ...
... ... @@ -218,7 +218,7 @@
<script src="<%=basePath %>/js/unicorn.js"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.dialog.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>script/common/genarate_left_panel.js?v=<%=ProjectConstant.MENU_VERSION %>"></script>
<script src="<%=basePath%>script/build/project.js?v=20180315-2"></script>
<script src="<%=basePath%>script/build/project.js?v=20180323"></script>
<script type="text/javascript">
$("#li_project").addClass("active open");
$("#li_projectRelease").addClass("active");
... ...
... ... @@ -127,11 +127,17 @@ function comfirmSubmit() {
}
$.ajax({
url: 'check?workid=' + workid,
url: 'check' ,
type: 'POST',
success: function (data) {
if (data != "1") {
alert(data);
data: {
project:project,
branch:branch,
environment:environment,
workid:workid
},
success: function (dataResp) {
if (dataResp==null||dataResp.code != 200) {
alert(dataResp.message);
return;
} else {
$("input[name='branch_name']").val(branch);
... ...
... ... @@ -114,9 +114,9 @@ function comfirmSubmit() {
$.ajax({
url: 'check?workid=' + workid,
type: 'POST',
success: function (data) {
if (data != "1") {
alert(data);
success: function (dataResp) {
if (dataResp==null||dataResp.code != 200) {
alert(dataResp.message);
return;
} else {
$("input[name='branch_name']").val(branch);
... ...
... ... @@ -270,9 +270,9 @@ function comfirmSubmit() {
$.ajax({
url: 'check?projects=' + projects + '&branch=' + branch+ '&environment=' + environment+ '&workid=' + workid,
type: 'POST',
success: function (data) {
if (data != "1") {
localAlert("校验不通过",data);
success: function (dataResp) {
if (dataResp==null||dataResp.code != 200) {
localAlert("校验不通过",dataResp.message);
return;
} else {
$("input[name='operate_name']").val(operate);
... ...