Authored by bblu

限流调整前台开发

... ... @@ -114,6 +114,13 @@ public class HttpUriContants {
public static final String SWITCH_LB = "/lbswitch/switchConf";
/**
* lbswitch
*/
public static final String VIEW_LIMIT_CONF = "/limitswitch/viewConf";
public static final String VIEW_TOCHANGE_LIMIT_CONF = "/limitswitch/viewToChangeLimitConf";
public static final String SWITCH_LIMIT = "/limitswitch/switchConf";
/**
* dnspod
*/
public static final String VIEW_DNSPOD = "/dnspod/getDnsList";
... ...
//package com.ui.ctrl;
//
//import com.ui.contants.HttpUriContants;
//import com.ui.http.HttpRestClient;
//import com.ui.model.BaseResponse;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Controller;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.ResponseBody;
//import org.springframework.web.servlet.ModelAndView;
//
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * @author zhengyouwei 2016年5月12日 下午1:49:55
// */
//@Controller
//@RequestMapping("luaswitch")
//public class LimitSwitchCtrl {
//
// private Logger logger = LoggerFactory.getLogger(getClass());
//
// @Autowired
// HttpRestClient httpRestClient;
//
// /**
// * 查看nginx配置
// *
// * @return 2016年5月12日下午1:49:48
// */
// @RequestMapping(value = "toLuaSwitch")
// public ModelAndView viewNginxConf() {
// String response = httpRestClient.defaultGet(HttpUriContants.VIEW_LUA_CONF, String.class,null );
// ModelAndView mdv = new ModelAndView("switch/luaSwitch");
// mdv.addObject("conf", response);
// return mdv;
// }
//
// /**
// * 修改配置
// *
// * @return 2016年5月12日下午1:49:48
// */
// @RequestMapping(value = "viewToChangeLuaConf")
// @ResponseBody
// public BaseResponse viewToChangeLuaConf(String cloudName) {
// Map map = new HashMap<>();
// map.put("cloudName",cloudName);
// return httpRestClient.defaultGet(HttpUriContants.VIEW_TOCHANGE_LUA_CONF, BaseResponse.class, map);
// }
//
// /**
// * 修改配置
// *
// * @return 2016年5月12日下午1:49:48
// */
// @RequestMapping(value = "switchConf")
// @ResponseBody
// public BaseResponse switchConf() {
// Map map = new HashMap<>();
// return httpRestClient.defaultGet(HttpUriContants.SWITCH_LUA, BaseResponse.class, map);
// }
//
//}
package com.ui.ctrl;
import com.ui.contants.HttpUriContants;
import com.ui.http.HttpRestClient;
import com.ui.model.BaseResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 限流调整
*
* @author bblu 2016-10-26
*/
@Controller
@RequestMapping("limitSwitch")
public class LimitSwitchCtrl {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
HttpRestClient httpRestClient;
/**
* 查看nginx配置
*
* @return 2016年5月12日下午1:49:48
*/
@RequestMapping(value = "toLimitSwitch")
public ModelAndView viewNginxConf() {
// BaseResponse<Map<String, Object>> response = httpRestClient.exchangeForget(HttpUriContants.VIEW_LIMIT_CONF, new ParameterizedTypeReference<BaseResponse<Map<String, Object>>>() {
// }, null);
// Map<String, Object> data = response.getData();
List<String> limitConfigList = new ArrayList<>();
limitConfigList.add("[\"app.promotion.getCoupon\"]={2000,9999992}");
limitConfigList.add("[\"h5.product.data\"]={2000,9999992}");
limitConfigList.add("[\"app.product.data\"]={2000,9999992}");
List<String> limitServiceConfigList = new ArrayList<>();
limitServiceConfigList.add("[\"/operations/api/v5/resource/get\"]={2000,9999992}");
Map<String, Object> data = new HashMap<>();
data.put("open_limit_flow", true);
data.put("limit_config", limitConfigList);
data.put("limit_service_config", limitServiceConfigList);
ModelAndView mdv = new ModelAndView("switch/limitSwitch");
mdv.addObject("open_limit_flow", data.get("open_limit_flow"));
mdv.addObject("limit_config", data.get("limit_config"));
mdv.addObject("limit_service_config", data.get("limit_service_config"));
return mdv;
}
/**
* 修改配置
*
* @return 2016年5月12日下午1:49:48
*/
@RequestMapping(value = "viewToChangeLimitConf")
@ResponseBody
public BaseResponse viewToChangeLimitConf(String openLimitFlow, String limitConfig, String limitServiceConfig) {
Map map = new HashMap<>();
map.put("openLimitFlow", openLimitFlow);
map.put("limitConfig", limitConfig);
map.put("limitServiceConfig", limitServiceConfig);
return httpRestClient.defaultGet(HttpUriContants.VIEW_TOCHANGE_LIMIT_CONF, BaseResponse.class, map);
}
/**
* 修改配置
*
* @return 2016年5月12日下午1:49:48
*/
@RequestMapping(value = "switchConf")
@ResponseBody
public BaseResponse switchConf() {
Map map = new HashMap<>();
return httpRestClient.defaultGet(HttpUriContants.SWITCH_LIMIT, BaseResponse.class, map);
}
}
... ...
... ... @@ -168,7 +168,7 @@
}
}]
}).find(".modal-body").css({
height: "550px"
height: "650px"
});
}
... ...
<%@page language="java" contentType="text/html;charset=utf-8" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="<%=basePath %>css/bootstrap.min.css"/>
<link rel="stylesheet" href="<%=basePath %>css/unicorn.main.css"/>
<link rel="stylesheet" href="<%=basePath %>css/unicorn.grey.css"/>
<link rel="stylesheet" href="<%=basePath %>css/jquery-ui.css"/>
<link rel="stylesheet" href="<%=basePath %>css/bootstrap-responsive.min.css"/>
<link rel="stylesheet" href="<%=basePath %>css/uniform.css"/>
<link rel="stylesheet" href="<%=basePath %>css/select2.css"/>
<link rel="stylesheet" href="<%=basePath %>css/font-awesome.min.css"/>
<link rel="stylesheet" href="<%=basePath %>css/dnspod_switch.css"/>
<link rel="stylesheet" href="<%=basePath %>css/ace.min.css"/>
<link rel="stylesheet" href="<%=basePath %>css/ace-rtl.min.css"/>
<link rel="stylesheet" href="<%=basePath %>css/ace-skins.min.css"/>
<script src="<%=basePath %>js/jquery-2.1.4.min.js" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap.min.js" type="text/javascript"></script>
<script src="<%=basePath %>js/typeahead-bs2.min.js" type="text/javascript"></script>
<script src="<%=basePath %>js/ace-elements.min.js" type="text/javascript"></script>
<script src="<%=basePath %>js/ace.min.js" type="text/javascript"></script>
<script src="<%=basePath %>js/layer/layer.js" type="text/javascript"></script>
<script src="<%=basePath %>/js/unicorn.js" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/datetimepicker/moment-with-locales.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/datetimepicker/bootstrap-datetimepicker.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/global.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.pagination.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.table.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.dialog.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.form.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.panel.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.alerts.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.accordion.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.breadcrumb.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.validate.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.form.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.select.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery.toaster.js" type="text/javascript"></script>
<script type="text/javascript">
var contextPath = '<%=basePath %>';
</script>
<title>YOHO!运维</title>
</head>
<body style="background-color: #444444;font-size: 14px">
<!-- 头部 -->
<div id="head">
</div>
<!-- 右侧具体内容 -->
<div id="content">
<div id="breadcrumb">
<a href="#" title="Go to Home" class="tip-bottom"><em class="icon-home"></em> Home</a> <a href="#"
class="current">限流调整</a>
</div>
<div class="row">
<div class="col-xs-12">
<!-- PAGE CONTENT BEGINS -->
<div class="row">
<div class="col-xs-12 col-sm-12 widget-container-span">
<div class="tabbable">
<div class="tab-content">
<div id="home">
<dl id="dt-list-1" class="dl-horizontal">
<dt>open_limit_flow</dt>
<dd id="open_limit_flow">${open_limit_flow}</dd>
<br/>
<dt>limit_config</dt>
<dd id="limit_config">
<c:forEach items="${limit_config}" var="map">
<ul>
<li>${map}</li>
</ul>
</c:forEach>
</dd>
<br/>
<dt>limit_service_config</dt>
<dd id="limit_service_config">
<c:forEach items="${limit_service_config}" var="map">
<ul>
<li>${map}</li>
</ul>
</c:forEach>
</dd>
</dl>
<h3 class="header smaller red"></h3>
<div class="btn-group">
<button class="btn btn-sm btn-success" onclick="initSwitch()">
<em class="icon-cogs bigger-110"></em>调整
</button>
</div>
</div>
</div>
</div>
</div><!-- /span -->
<div class="vspace-xs-6"></div>
</div><!-- /row -->
<script type="text/javascript">
var $path_assets = "assets";//this will be used in gritter alerts containing images
</script>
<!-- PAGE CONTENT ENDS -->
</div><!-- /.col -->
</div><!-- /.row -->
</div>
<script src="<%=basePath %>script/common/genarate_left_panel.js" type="text/javascript"></script>
<script type="text/javascript">
var dialog1, dialog2, dialog3, dialog4;
function initSwitch() {
var html = "<div><dl class='dl-horizontal'>";
html += "<dt>open_limit_flow</dt>";
html += "<dd id='open_limit_flow_a'><input type='text' class='form-control' value='" + $("#open_limit_flow").text() + "'></dd>";
html += "<br />";
html += "<dt>limit_config</dt>";
html += "<dd id='limit_config_a'><ul>";
html += "<li style='padding: 5px;'><button class='btn btn-sm btn-success' onclick='addLi(this)'><em class='icon-cogs bigger-110'></em>新增</button></li>"
$("#limit_config").find("li").each(function () {
html += "<li style='padding: 5px;'><input type='text' class='form-control' style='width: 80%;' value='" + $(this).text() + "'>&nbsp;&nbsp;";
html += "<button class='btn btn-sm btn-success' onclick='delLi(this)'><em class='icon-cogs bigger-110'></em>删除</button>";
html += "</li>";
});
html += "</ul></dd>";
html += "<br />";
html += "<dt>limit_service_config</dt>";
html += "<dd id='limit_service_config_a'><ul>";
html += "<li style='padding: 5px;'><button class='btn btn-sm btn-success' onclick='addLi(this)'><em class='icon-cogs bigger-110'></em>新增</button></li>"
$("#limit_service_config").find("li").each(function () {
html += "<li style='padding: 5px;'><input type='text' class='form-control' style='width: 80%;' value='" + $(this).text() + "'>&nbsp;&nbsp;";
html += "<button class='btn btn-sm btn-success' onclick='delLi(this)'><em class='icon-cogs bigger-110'></em>删除</button>";
html += "</li>";
});
html += "</ul></dd>";
html += "</dl></div>";
dialog1 = $("<div>").appendTo($("body"));
dialog1.dialog({
title: "限流调整",
backdrop: "static",
content: html,
buttons: [{
text: "取消",
className: "btn-danger",
onclick: function () {
$(dialog1).dialog("hide");
}
}, {
text: "提交",
className: "btn-success",
onclick: function () {
var toSendAjaxFlag = false;
var openLimitFlow = $("#open_limit_flow_a").find("input").val();
var limitConfig = [];
$("#limit_config_a").find("input").each(function () {
var config = $(this).val();
if (undefined !== config && null !== config && "" !== config) {
limitConfig.push(config);
}
});
var limitServiceConfig = [];
$("#limit_service_config_a").find("input").each(function () {
var config = $(this).val();
if (undefined !== config && null !== config && "" !== config) {
limitServiceConfig.push(config);
}
});
if (undefined === openLimitFlow || null === openLimitFlow || "" === openLimitFlow) {
prompt("提示", "限流开关不能为空!")
} else {
toSendAjaxFlag = true;
}
if (toSendAjaxFlag) {
var param = {
openLimitFlow: openLimitFlow,
limitConfig: JSON.stringify(limitConfig),
limitServiceConfig: JSON.stringify(limitServiceConfig)
};
sendAjax("post", "viewToChangeLimitConf", param, "text", viewToChangeSuccess, errorFunc);
}
}
}]
}).find(".modal-body").css({
height: "650px"
});
}
function viewToChangeSuccess(resp) {
$(dialog1).dialog("hide");
var data = JSON.parse(resp);
dialog2 = $("<div>").appendTo($("body"));
dialog2.dialog({
title: "切换结果",
backdrop: "static",
content: "<pre>" + data.data + "</pre>",
buttons: [{
text: "否",
className: "btn-danger",
onclick: function () {
$(dialog2).dialog("hide");
}
}, {
text: "确定",
className: "btn-success",
onclick: function () {
sendAjax("post", "switchConf", {}, "text", switchSuccess, errorFunc);
$(dialog2).dialog("hide");
toWait();
}
}]
}).find(".modal-body").css({
height: "650px"
});
}
function switchSuccess() {
window.location.href = getUrlBasePath() + "/limitSwitch/toLimitSwitch";
}
function addLi(btn) {
var html = "<li style='padding: 5px;'><input type='text' class='form-control' style='width: 80%;'>&nbsp;&nbsp;";
html += "<button class='btn btn-sm btn-success' onclick='delLi(this)'><em class='icon-cogs bigger-110'></em>删除</button>";
html += "</li>";
$(btn).parent().parent().append(html);
}
function delLi(btn) {
$(btn).parent().remove();
}
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});
}
function toWait() {
dialog4 = $("<div>").appendTo($("body"));
dialog4.dialog({
title: "提示",
backdrop: "static",
content: "正在切换,请稍后..."
});
}
/**
* 提示函数
* @param title
* @param content
*/
function prompt(title, content) {
dialog3 = $("<div>").appendTo($("body"));
dialog3.dialog({
title: title,
backdrop: "static",
content: content,
buttons: [{
text: "确定",
className: "btn-success",
onclick: function () {
$(dialog3).dialog("hide");
}
}]
});
}
</script>
</body>
</html>
... ...
... ... @@ -168,7 +168,7 @@
}
}]
}).find(".modal-body").css({
height: "550px"
height: "650px"
});
}
... ...
... ... @@ -64,7 +64,7 @@ function viewToChangeSuccess(resp) {
}
}]
}).find(".modal-body").css({
height: "550px"
height: "650px"
});
}
... ...