diff --git a/monitor-ui-common/src/main/java/com/ui/contants/HttpUriContants.java b/monitor-ui-common/src/main/java/com/ui/contants/HttpUriContants.java index 09383f4..f2102ff 100644 --- a/monitor-ui-common/src/main/java/com/ui/contants/HttpUriContants.java +++ b/monitor-ui-common/src/main/java/com/ui/contants/HttpUriContants.java @@ -96,6 +96,7 @@ public class HttpUriContants { * nginxswitch */ public static final String VIEW_NGINX_CONF= "/nginxswitch/viewNginxConf"; + public static final String VIEW_TOCHANGE_NGINX_CONF= "/nginxswitch/viewToChangeNginxConf"; public static final String SWITCH_NGINX= "/nginxswitch/switchNginxConf"; /** diff --git a/monitor-ui-ctrl/src/main/java/com/ui/ctrl/NginxSwitchCtrl.java b/monitor-ui-ctrl/src/main/java/com/ui/ctrl/NginxSwitchCtrl.java index c05357d..6a0fd65 100644 --- a/monitor-ui-ctrl/src/main/java/com/ui/ctrl/NginxSwitchCtrl.java +++ b/monitor-ui-ctrl/src/main/java/com/ui/ctrl/NginxSwitchCtrl.java @@ -35,9 +35,9 @@ public class NginxSwitchCtrl { */ @RequestMapping(value = "toNginxSwitch") public ModelAndView viewNginxConf() { - BaseResponse<Map<String,List<Map<String, Object>>>> response = httpRestClient.exchangeForget(HttpUriContants.VIEW_NGINX_CONF, new ParameterizedTypeReference<BaseResponse<Map<String,List<Map<String, Object>>>>>() { + BaseResponse<Map<String, List<Map<String, Object>>>> response = httpRestClient.exchangeForget(HttpUriContants.VIEW_NGINX_CONF, new ParameterizedTypeReference<BaseResponse<Map<String, List<Map<String, Object>>>>>() { }, null); - Map<String,List<Map<String, Object>>> map = response.getData(); + Map<String, List<Map<String, Object>>> map = response.getData(); ModelAndView mdv = new ModelAndView("switch/nginxSwitch"); mdv.addObject("awsList", map.get("awsList")); mdv.addObject("qcloudList", map.get("qcloudList")); @@ -51,11 +51,25 @@ public class NginxSwitchCtrl { */ @RequestMapping(value = "switchNginxConf") @ResponseBody - public BaseResponse switchNginxConf(String cloudName, String target) { - Map map = new HashMap<>(); - map.put("cloudName",cloudName); - map.put("target",target); + public BaseResponse switchNginxConf() { + Map<String, String> map = new HashMap<>(); return httpRestClient.defaultGet(HttpUriContants.SWITCH_NGINX, BaseResponse.class, map); } + /** + * 修改配置 + * + * @return 2016年5月12日下午1:49:48 + */ + @RequestMapping(value = "viewToChangeNginxConf") + @ResponseBody + public BaseResponse viewToChangeNginxConf(String cloudName, String target, String onlineOrGray, String noChangeIps) { + Map<String, String> map = new HashMap<>(); + map.put("cloudName", cloudName); + map.put("target", target); + map.put("onlineOrGray", onlineOrGray); + map.put("ips", noChangeIps); + return httpRestClient.defaultGet(HttpUriContants.VIEW_TOCHANGE_NGINX_CONF, BaseResponse.class, map); + } + } diff --git a/monitor-ui-web/src/main/webapp/jsp/switch/nginxSwitch.jsp b/monitor-ui-web/src/main/webapp/jsp/switch/nginxSwitch.jsp index 65f6552..34e79a8 100644 --- a/monitor-ui-web/src/main/webapp/jsp/switch/nginxSwitch.jsp +++ b/monitor-ui-web/src/main/webapp/jsp/switch/nginxSwitch.jsp @@ -124,27 +124,27 @@ <button class="btn btn-sm "> 线上切换 </button> - <button class="btn btn-sm btn-success" onclick="initSwitch('aws','qcloud')"> + <button class="btn btn-sm btn-success" onclick="initSwitch('aws','qcloud','online','${awsList}')"> <i class="icon-cogs bigger-110"></i> 切向qcloud </button> - <button class="btn btn-sm btn-success" onclick="initSwitch('aws','aws')"> + <button class="btn btn-sm btn-success" onclick="initSwitch('aws','aws','online','${awsList}')"> <i class="icon-cogs bigger-110"></i> 切向aws </button><br><br> <button class="btn btn-sm "> 灰度切换 </button> - <button class="btn btn-sm btn-success" onclick="initSwitch('gray','qcloud')"> + <button class="btn btn-sm btn-success" onclick="initSwitch('aws','qcloud','gray','${awsList}')"> <i class="icon-cogs bigger-110"></i> 切向qcloud </button> </button> - <button class="btn btn-sm btn-success" onclick="initSwitch('gray','aws')"> + <button class="btn btn-sm btn-success" onclick="initSwitch('aws','aws','gray','${awsList}')"> <i class="icon-cogs bigger-110"></i> 切向aws </button> - <button class="btn btn-sm btn-success" onclick="initSwitch('gray','gray')"> + <button class="btn btn-sm btn-success" onclick="initSwitch('aws','gray','gray','${awsList}')"> <i class="icon-cogs bigger-110"></i> 切向gray </button> @@ -180,11 +180,11 @@ <button class="btn btn-sm "> 线上切换 </button> - <button class="btn btn-sm btn-success" onclick="initSwitch('qcloud','qcloud')"> + <button class="btn btn-sm btn-success" onclick="initSwitch('qcloud','qcloud','online','${qcloudList}')"> <i class="icon-cogs bigger-110"></i> 切向qcloud </button> - <button class="btn btn-sm btn-success" onclick="initSwitch('qcloud','aws')"> + <button class="btn btn-sm btn-success" onclick="initSwitch('qcloud','aws','online','${qcloudList}')"> <i class="icon-cogs bigger-110"></i> 切向aws </button> @@ -192,15 +192,15 @@ <button class="btn btn-sm "> 灰度切换 </button> - <button class="btn btn-sm btn-success" onclick="initSwitch('gray','qcloud')"> + <button class="btn btn-sm btn-success" onclick="initSwitch('qcloud','qcloud','gray','${qcloudList}')"> <i class="icon-cogs bigger-110"></i> 切向qcloud </button> - <button class="btn btn-sm btn-success" onclick="initSwitch('gray','aws')"> + <button class="btn btn-sm btn-success" onclick="initSwitch('qcloud','aws','gray','${qcloudList}')"> <i class="icon-cogs bigger-110"></i> 切向aws </button> - <button class="btn btn-sm btn-success" onclick="initSwitch('gray','gray')"> + <button class="btn btn-sm btn-success" onclick="initSwitch('qcloud','gray','gray','${qcloudList}')"> <i class="icon-cogs bigger-110"></i> 切向gray </button> @@ -229,9 +229,5 @@ </div> <script src="<%=basePath %>script/common/genarate_left_panel.js"></script> -<script> - $("#li_switch").addClass("active open"); - $("#li_nginxswitch").addClass("active"); -</script> </body> </html> diff --git a/monitor-ui-web/src/main/webapp/script/nginx_switch.js b/monitor-ui-web/src/main/webapp/script/nginx_switch.js index 10db85e..a5da700 100644 --- a/monitor-ui-web/src/main/webapp/script/nginx_switch.js +++ b/monitor-ui-web/src/main/webapp/script/nginx_switch.js @@ -1,18 +1,29 @@ +var dialog1; +var dialog2; +var dialog3; + $(function () { - $("#validateTokenRltInfo").hide(); + dialog1 = $("<div>").appendTo($("body")); + dialog2 = $("<div>").appendTo($("body")); + dialog3 = $("<div>").appendTo($("body")); }); -function initSwitch(cloudName, target) { - var dialog = $("<div>").appendTo($("body")); - dialog.dialog({ +function initSwitch(cloudName, target, onlineOrGray, list) { + var arr = getNoChangeIpArr(onlineOrGray, list); + if (undefined === arr || null === arr || 0 === arr.length) { + prompt("提示", "无可切换的gateway!"); + return; + } + + dialog2.dialog({ title: "你确定切换吗", backdrop: "static", - content: "你确定要将" + cloudName + "上的流量切向" + target + "吗?", + content: "你确定要将" + cloudName + "上的" + onlineOrGray + "流量切向" + target + "吗?", buttons: [{ text: "否", className: "btn-danger", onclick: function () { - $(dialog).dialog("hide"); + $(dialog2).dialog("hide"); } }, { text: "是", @@ -20,38 +31,109 @@ function initSwitch(cloudName, target) { onclick: function () { var param = { cloudName: cloudName, - target: target - } - $.ajax({ - type: 'post', - url: 'switchNginxConf', - data: param, - dataType: 'text', - success: function (resp) { - $(dialog).dialog("hide"); - var data = JSON.parse(resp); - - var dialog2 = $("<div>").appendTo($("body")); - dialog2.dialog({ - title: "切换结果", - backdrop: "static", - content: data.data, - buttons: [{ - text: "确定", - className: "btn-danger", - onclick: function () { - window.location.href = getUrlBasePath() + "/nginxswitch/toNginxSwitch"; - } - }] - }); - - }, - error: function (data) { - layer.msg("Token异常", {icon: 2}); - } - }); + target: target, + onlineOrGray: onlineOrGray, + noChangeIps: JSON.stringify(arr) + }; + sendAjax("post", "viewToChangeNginxConf", param, "text", viewToChangeSuccess, errorFunc); } }] }); +} + +function viewToChangeSuccess(resp) { + $(dialog2).dialog("hide"); + + var data = JSON.parse(resp); + dialog3.dialog({ + title: "切换结果", + backdrop: "static", + content: data.data, + buttons: [{ + text: "否", + className: "btn-danger", + onclick: function () { + $(dialog3).dialog("hide"); + } + }, { + text: "确定", + className: "btn-danger", + onclick: function () { + sendAjax("post", "switchNginxConf", {}, "text", switchSuccess, errorFunc); + } + }] + }); +} + +function switchSuccess() { + window.location.href = getUrlBasePath() + "/nginxswitch/toNginxSwitch"; +} + +/** + * 获取不切换的服务器ip(由于线上和灰度同在nginx.conf配置中,模板须设计两个占位符,所以切换某一处时,须将不切换的ip提交到后台) + * @param onlineOrGray 切换线上/灰度 + * @param list 线上和灰度的upstream配置列表 + * @returns {Array} 不切换服务器的ip列表 + */ +function getNoChangeIpArr(onlineOrGray, list) { + if (undefined === list || null === list || 0 === list.length) { + return []; + } + var arr = []; + var p = ""; + if ("online" === onlineOrGray) { + p = "grayapigateway"; + } else { + p = "apigateway"; + } + for (var o in list) { + if (undefined === o || null === o || undefined === o.name || null === o.name || p !== o.name) { + continue; + } + if (undefined === o.server || null === o.server || 0 === o.server.length) { + continue; + } + for (var ob in o.server) { + if (undefined === ob || null === ob || '' === ob) { + continue; + } + arr.push(ob.split(":")[0].replace(" ", "").replace("server", "")); + } + } + return arr; +} + +/** + * 提示函数 + * @param title + * @param content + */ +function prompt(title, content) { + dialog1.dialog({ + title: title, + backdrop: "static", + content: content, + buttons: [{ + text: "确定", + className: "btn-success", + onclick: function () { + $(dialog1).dialog("hide"); + } + }] + }); +} + +function sendAjax(type, url, data, dataType, success, error) { + $.ajax({ + type: type, + url: url, + data: data, + dataType: dataType, + success: success, + error: error + }); +} +function errorFunc() { + layer.msg("Token异常", {icon: 2}); } \ No newline at end of file