Authored by lingmin

Merge branch 'master' of http://git.yoho.cn/ops/monitor-ui

Showing 36 changed files with 2921 additions and 406 deletions
... ... @@ -62,7 +62,7 @@ public class HttpUriContants {
public static final String GET_ZK_DETAIL = "/zkMonitor/getZkMonitorDetail";
public static final String EDIT_ZK_DETAIL = "/zkMonitor/editZkMonitorDetail";
public static final String EDIT_ZK_ROOT = "/zkMonitor/editZkMonitorRoot";
/***
* redis监控信息查询
****/
... ... @@ -85,39 +85,54 @@ public class HttpUriContants {
/**
* module
*/
public static final String GET_All_MODULE= "/module/getAll";
public static final String MODULE_INSERT= "/module/insert";
public static final String MODULE_UPDATE= "/module/updateLevel";
public static final String MODULE_GET_BYNAME= "/module/getAuthModuleByName";
public static final String GET_MODULES= "/module/getAuthModules";
public static final String GET_All_MODULE = "/module/getAll";
public static final String MODULE_INSERT = "/module/insert";
public static final String MODULE_UPDATE = "/module/updateLevel";
public static final String MODULE_GET_BYNAME = "/module/getAuthModuleByName";
public static final String GET_MODULES = "/module/getAuthModules";
public static final String MODULE_DELETE_NAME = "/module/deleteByName";
/**
* nginxswitch
*/
public static final String VIEW_NGINX_CONF= "/nginxswitch/viewNginxConf";
public static final String SWITCH_NGINX= "/nginxswitch/switchNginxConf";
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";
/**
* luaswitch
*/
public static final String VIEW_LUA_CONF= "/luaswitch/viewConf";
public static final String SWITCH_LUA= "/luaswitch/switchConf";
public static final String VIEW_LUA_CONF = "/luaswitch/viewConf";
public static final String VIEW_TOCHANGE_LUA_CONF = "/luaswitch/viewToChangeLuaConf";
public static final String SWITCH_LUA = "/luaswitch/switchConf";
/**
* lbswitch
*/
public static final String VIEW_LB_CONF = "/lbswitch/viewConf";
public static final String VIEW_TOCHANGE_LB_CONF = "/lbswitch/viewToChangeLbConf";
public static final String SWITCH_LB = "/lbswitch/switchConf";
/**
* limitswitch
*/
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";
public static final String DNS_SWITCH_BEFORE= "/dnspod/initSwitch";
public static final String SWITCH_DNS= "/dnspod/doSwitch";
public static final String VALIDE_TOKEN= "/dnspod/validateAPIToken";
public static final String VIEW_DNSPOD = "/dnspod/getDnsList";
public static final String DNS_SWITCH_BEFORE = "/dnspod/initSwitch";
public static final String SWITCH_DNS = "/dnspod/doSwitch";
public static final String VALIDE_TOKEN = "/dnspod/validateAPIToken";
/**
* dns monitor
*/
public static final String DNS_MONITOR_CURRENT = "/other/dns_monitor/current";
public static final String DNS_MONITOR_HISTORY = "/other/dns_monitor/history";
public static final String DNS_MONITOR_CURRENT = "/other/dns_monitor/current";
public static final String DNS_MONITOR_HISTORY = "/other/dns_monitor/history";
/***
... ... @@ -150,6 +165,12 @@ public class HttpUriContants {
//java服务重启
public static final String JAVA_RESTART_GET = "/javaRestart/query";
public static final String JAVA_RESTART_STATAUS = "/javaRestart/getProjectStatus";
public static final String JAVA_STOP_RESTART = "/javaRestart/stopOrRestart";
public static final String JAVA_GET_MESSAGE = "/javaRestart/getMessage";
//双中心切换
public static final String CENTERSWITCH_GET = "/centerSwitch/getSwitchList";
public static final String CENTERSWITCH_SWITCH = "/centerSwitch/doExe";
//java监控信息
public static final String JAVA_MONITOR_GET = "/newJavaApiInfo/queryByServiceType";
... ...
package com.ui.model.domain;
/**
* Created by zhengyouwei on 2016/6/29.
*/
public class BuildMessage {
private String id;
private String projectOrder;
private String message;
private String currentProject;
public BuildMessage(){
}
public BuildMessage(String id, String projectOrder){
this.id = id;
this.projectOrder = projectOrder;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getProjectOrder() {
return projectOrder;
}
public void setProjectOrder(String projectOrder) {
this.projectOrder = projectOrder;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getCurrentProject() {
return currentProject;
}
public void setCurrentProject(String currentProject) {
this.currentProject = currentProject;
}
}
... ...
package com.ui.model.domain;
import lombok.Data;
/**
* Created by zhengyouwei on 2016/10/24.
*/
@Data
public class CenterSwitchModel {
private String name;
private String cName;
private String exe;
}
... ...
package com.ui.model.domain;
import lombok.Data;
/**
* Created by zhengyouwei on 2016/10/19.
*/
@Data
public class RestartModel {
//restart,stop
private String exe;
//aws qcloud mix,single
private String cloud;
private String project;
private String ip;
private Integer id;
}
... ...
package com.ui.model.req;
import lombok.Data;
/**
* Created by yoho on 2016/10/27.
*/
@Data
public class ActionRequest {
private String hostId;
private String service;
private String action;
}
... ...
package com.ui.model.req;
import lombok.Data;
/**
* Created by yoho on 2016/10/21.
*/
@Data
public class CompareReq {
String service;
String net;
}
... ...
... ... @@ -12,4 +12,6 @@ public class ProjectBuildReq extends PageRequest {
private String environment;
private int currentStatus;
}
... ...
... ... @@ -22,7 +22,7 @@
class="org.springframework.http.client.HttpComponentsClientHttpRequestFactory">
<constructor-arg ref="httpClient" />
<property name="connectTimeout" value="30000" />
<property name="readTimeout" value="30000" />
<property name="readTimeout" value="300000" />
</bean>
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
... ...
package com.ui.ctrl;
import com.ui.contants.HttpUriContants;
import com.ui.http.HttpRestClient;
import com.ui.model.BaseResponse;
import com.ui.model.domain.CenterSwitchModel;
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.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
/**
* Created by zhengyouwei on 2016/10/24.
*/
@RestController
@RequestMapping(value = "/centerSwitch")
public class CenterSwitchCtrl {
Logger log = LoggerFactory.getLogger(JavaRestartCtrl.class);
@Autowired
private HttpRestClient httpClient;
@RequestMapping("/toCenterSwitch")
public ModelAndView toCenterSwitch(){
return new ModelAndView("switch/center_switch");
}
@RequestMapping("/getSwitchList")
@ResponseBody
public BaseResponse getSwitchList(){
return httpClient.defaultPost(HttpUriContants.CENTERSWITCH_GET, null, BaseResponse.class);
}
@RequestMapping("/todoExe")
public ModelAndView todoExe(String name,String toCloud,Model model){
model.addAttribute("name",name);
model.addAttribute("toCloud",toCloud);
return new ModelAndView("switch/center_switch_exe");
}
@RequestMapping("/doExe")
public BaseResponse doExe(CenterSwitchModel centerSwitchModel){
BaseResponse baseResponse = httpClient.defaultPost(HttpUriContants.CENTERSWITCH_SWITCH, centerSwitchModel, BaseResponse.class);
return baseResponse;
}
}
... ...
package com.ui.ctrl;
import com.ui.http.HttpRestClient;
import com.ui.model.BaseResponse;
import com.ui.model.req.CompareReq;
import com.ui.model.req.NginxSyncTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
/**
* Created by yoho on 2016/8/23.
*/
@RestController
@RequestMapping(value = "/compareIps")
public class CompareIpsCtrl {
@Autowired
HttpRestClient httpRestClient;
@RequestMapping("/toCompareIps")
public ModelAndView toCompareIpsView() {
return new ModelAndView("compare/compareIps");
}
@RequestMapping("/compare")
public BaseResponse pushTask(CompareReq req)
{
BaseResponse response = httpRestClient.defaultPost("/compareIps/compare", req, BaseResponse.class);
return response;
}
}
... ...
... ... @@ -3,11 +3,14 @@ package com.ui.ctrl;
import com.ui.contants.HttpUriContants;
import com.ui.http.HttpRestClient;
import com.ui.model.BaseResponse;
import com.ui.model.domain.RestartModel;
import com.ui.model.req.PageRequest;
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.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
... ... @@ -29,6 +32,15 @@ public class JavaRestartCtrl {
return new ModelAndView("/switch/java_restart");
}
@RequestMapping("/toStopOrRestart")
public ModelAndView toStopOrRestart(String project,String cloud, String exe,String ip,Model model) {
model.addAttribute("project",project);
model.addAttribute("cloud",cloud);
model.addAttribute("exe",exe);
model.addAttribute("ip",ip);
return new ModelAndView("/switch/java_restart_process");
}
@RequestMapping("/query")
@ResponseBody
public BaseResponse query(PageRequest req) {
... ... @@ -38,9 +50,25 @@ public class JavaRestartCtrl {
@RequestMapping("/getProjectStatus")
@ResponseBody
public BaseResponse getStatusInfos(String project) {
public BaseResponse getProjectStatus(String project) {
BaseResponse rep = httpClient.defaultPost(HttpUriContants.JAVA_RESTART_STATAUS + "?project=" + project, null, BaseResponse.class);
return rep;
}
@RequestMapping("/stopOrRestart")
@ResponseBody
public BaseResponse stopOrRestart( RestartModel restartModel) {
if(StringUtils.isBlank(restartModel.getExe()) || StringUtils.isBlank(restartModel.getCloud()) || StringUtils.isBlank(restartModel.getProject())){
return null;
}
BaseResponse rep = httpClient.defaultPost(HttpUriContants.JAVA_STOP_RESTART, restartModel, BaseResponse.class);
return rep;
}
@RequestMapping("/getMessage")
@ResponseBody
public BaseResponse getMessage(Integer id) {
BaseResponse rep = httpClient.defaultPost(HttpUriContants.JAVA_GET_MESSAGE+ "?id=" + id, null, BaseResponse.class);
return rep;
}
}
... ...
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.HashMap;
import java.util.Map;
/**
* 直连开关切换
*
* @author bblu 2016-10-25
*/
@Controller
@RequestMapping("lbSwitch")
public class LbSwitchCtrl {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
HttpRestClient httpRestClient;
/**
* 展示当前配置
*
* @return ModelAndView
*/
@RequestMapping(value = "toLbSwitch")
public ModelAndView viewNginxConf() {
BaseResponse<Map<String, Object>> response = httpRestClient.exchangeForget(HttpUriContants.VIEW_LB_CONF, new ParameterizedTypeReference<BaseResponse<Map<String, Object>>>() {
}, null);
Map<String, Object> data = response.getData();
ModelAndView mdv = new ModelAndView("switch/lbSwitch");
mdv.addObject("conf", data.get("conf"));
mdv.addObject("status", data.get("status"));
return mdv;
}
/**
* 展示修改后的配置文件内容
*
* @param status 状态:1-开启;2-关闭
* @return BaseResponse
*/
@RequestMapping(value = "viewToChangeLbConf")
@ResponseBody
public BaseResponse viewToChangeLbConf(String status) {
Map<String, Object> map = new HashMap<>();
map.put("status", status);
return httpRestClient.defaultGet(HttpUriContants.VIEW_TOCHANGE_LB_CONF, BaseResponse.class, map);
}
/**
* 修改配置,并重启nginx
*
* @return BaseResponse
*/
@RequestMapping(value = "switchConf")
@ResponseBody
public BaseResponse switchConf() {
Map<String, Object> map = new HashMap<>();
return httpRestClient.defaultGet(HttpUriContants.SWITCH_LB, 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.HashMap;
import java.util.Map;
/**
* 限流调整
*
* @author bblu 2016-10-26
*/
@Controller
@RequestMapping("limitSwitch")
public class LimitSwitchCtrl {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
HttpRestClient httpRestClient;
/**
* 展示当前配置
*
* @return ModelAndView
*/
@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();
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;
}
/**
* 展示修改后配置文件内容
*
* @param openLimitFlow 限流开关true/false
* @param limitConfig api接口限流配置
* @param limitServiceConfig service接口限流配置
* @return BaseResponse
*/
@RequestMapping(value = "viewToChangeLimitConf")
@ResponseBody
public BaseResponse viewToChangeLimitConf(String openLimitFlow, String limitConfig, String limitServiceConfig) {
Map<String, Object> map = new HashMap<>();
map.put("limitFlow", openLimitFlow);
map.put("apiConfs", limitConfig);
map.put("serviceConfs", limitServiceConfig);
return httpRestClient.defaultPost(HttpUriContants.VIEW_TOCHANGE_LIMIT_CONF, map, BaseResponse.class);
}
/**
* 修改配置,并重启nginx
*
* @return BaseResponse
*/
@RequestMapping(value = "switchConf")
@ResponseBody
public BaseResponse switchConf() {
Map<String, Object> map = new HashMap<>();
return httpRestClient.defaultGet(HttpUriContants.SWITCH_LIMIT, BaseResponse.class, map);
}
}
... ...
... ... @@ -6,18 +6,18 @@ 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.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author zhengyouwei 2016年5月12日 下午1:49:55
* 中心入口切换
*
* @author bblu 2016-10-27
*/
@Controller
@RequestMapping("luaswitch")
... ... @@ -29,28 +29,41 @@ public class LuaSwitchCtrl {
HttpRestClient httpRestClient;
/**
* 查看nginx配置
* 展示当前配置
*
* @return 2016年5月12日下午1:49:48
* @return ModelAndView
*/
@RequestMapping(value = "toLuaSwitch")
public ModelAndView viewNginxConf() {
String response = httpRestClient.defaultGet(HttpUriContants.VIEW_LUA_CONF, String.class,null );
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
* @param cloudName 目标中心名称
* @return BaseResponse
*/
@RequestMapping(value = "viewToChangeLuaConf")
@ResponseBody
public BaseResponse viewToChangeLuaConf(String cloudName) {
Map<String, Object> map = new HashMap<>();
map.put("cloudName", cloudName);
return httpRestClient.defaultGet(HttpUriContants.VIEW_TOCHANGE_LUA_CONF, BaseResponse.class, map);
}
/**
* 切换配置,并重启nginx
*
* @return BaseResponse
*/
@RequestMapping(value = "switchConf")
@ResponseBody
public BaseResponse switchConf(String cloudName) {
Map map = new HashMap<>();
map.put("cloudName",cloudName);
public BaseResponse switchConf() {
Map<String, Object> map = new HashMap<>();
return httpRestClient.defaultGet(HttpUriContants.SWITCH_LUA, BaseResponse.class, map);
}
... ...
package com.ui.ctrl;
import com.ui.http.HttpRestClient;
import com.ui.model.BaseResponse;
import com.ui.model.req.ActionRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
/**
* Created by yoho on 2016/10/27.
*/
@RestController
@RequestMapping(value = "/monit")
public class MonitCtrl {
@Autowired
HttpRestClient httpRestClient;
@RequestMapping("/toMonit")
public ModelAndView toNginxView() {
return new ModelAndView("monit/monit");
}
@RequestMapping("/service/all")
public BaseResponse queryAllService() {
BaseResponse response = httpRestClient.defaultGet("/monit/service/all", BaseResponse.class);
return response;
}
/* @RequestMapping("/hosts/action")
public BaseResponse operHostService(String request) {
BaseResponse response = httpRestClient.defaultPost("/monit/hosts/action", request, BaseResponse.class);
return response;
}*/
@RequestMapping("/hosts/oneAction")
public BaseResponse operOneHostService(ActionRequest request) {
BaseResponse response = httpRestClient.defaultPost("/monit/hosts/oneAction", request, BaseResponse.class);
return response;
}
@RequestMapping("/hosts/delete/{monitId}")
public BaseResponse delHostService(@PathVariable("monitId") String monitId) {
BaseResponse response = httpRestClient.defaultPost("/monit/hosts/delete/" + monitId, null, BaseResponse.class);
return response;
}
}
... ...
... ... @@ -17,7 +17,9 @@ import java.util.List;
import java.util.Map;
/**
* @author zhengyouwei 2016年5月12日 下午1:49:55
* nginx->gateway切换
*
* @author bblu 2016-10-27
*/
@Controller
@RequestMapping("nginxswitch")
... ... @@ -29,15 +31,15 @@ public class NginxSwitchCtrl {
HttpRestClient httpRestClient;
/**
* 查看nginx配置
* 展示当前配置
*
* @return 2016年5月12日下午1:49:48
* @return ModelAndView
*/
@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"));
... ... @@ -45,17 +47,37 @@ public class NginxSwitchCtrl {
}
/**
* 修改配置
* 修改配置,并重启nginx
*
* @return 2016年5月12日下午1:49:48
* @param cloudName 源中心名称
* @return BaseResponse
*/
@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(String cloudName) {
Map<String, String> map = new HashMap<>();
map.put("cloudName", cloudName);
return httpRestClient.defaultGet(HttpUriContants.SWITCH_NGINX, BaseResponse.class, map);
}
/**
* 展示修改后配置文件内容
*
* @param cloudName 源中心名称
* @param target 目标中心名称
* @param onlineOrGray 线上/灰度切换
* @param noChangeIps 不变更配置的ip
* @return BaseResponse
*/
@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);
}
}
... ...
... ... @@ -4,6 +4,7 @@ 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.req.*;
import com.ui.project.ProjectEnvironment;
import com.ui.project.ProjectOnline;
... ... @@ -16,8 +17,7 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;
import java.util.*;
/**
* Created by fruwei on 2016/6/16.
... ... @@ -57,7 +57,7 @@ public class ProjectBuildCtrl {
model.addAttribute("projects", ProjectOnline.getJavaList());
return new ModelAndView("project/history");
return new ModelAndView("project/history");
}
/**
... ... @@ -109,22 +109,80 @@ public class ProjectBuildCtrl {
}
@RequestMapping(value = "tobuildpage")
@ResponseBody
public ModelAndView tobuildpage(String messageid, String project, String environment, String operate, String branch, String rollbackfile, Model model) {
model.addAttribute("messageid", messageid);
model.addAttribute("project", project);
model.addAttribute("environment", environment);
model.addAttribute("operate", operate);
model.addAttribute("branch", branch);
model.addAttribute("rollbackfile", rollbackfile);
return new ModelAndView("project/single_project_build");
}
/**
* 执行任务
*
* @param request
* @return
*/
@RequestMapping(value = "build", method = RequestMethod.POST)
@ResponseBody
public String build(@RequestBody BuildRequest request, HttpSession session) {
public ModelAndView build(String project_name, String environment_name, String operate_name, String branch_name, String rollbackfile_name, Model model, HttpSession session) {
try {
User user = (User) session.getAttribute("user");
request.setUser(user.getName());
return httpRestClient.post(ProjectEnvironment.getUrl(request.getEnvironment()) + "build", request, String.class);
List<BuildMessage> list = new ArrayList<>();
BuildRequest buildRequest = new BuildRequest();
buildRequest.setBranch(branch_name);
buildRequest.setUser(user.getName());
buildRequest.setEnvironment(environment_name);
buildRequest.setRollbackfile(rollbackfile_name);
buildRequest.setOperate(operate_name);
String messageids = "";
if ("Deploy".equals(operate_name)) {
String[] array = project_name.split(",");
if (array.length > 4) {
String[] newArray = new String[]{"","","",""};
for (int i = 0; i < array.length; i++) {
newArray[i%4] = newArray[i%4] + array[i] + ",";
}
for (String project : newArray) {
buildRequest.setProject(project.substring(0,project.length() - 1));
BuildMessage buildMessage = httpRestClient.post(ProjectEnvironment.getUrl(environment_name) + "build", buildRequest, BuildMessage.class);
if (buildMessage != null) {
list.add(buildMessage);
messageids = messageids + buildMessage.getId() + ",";
}
}
} else {
for (String project : array) {
buildRequest.setProject(project);
BuildMessage buildMessage = httpRestClient.post(ProjectEnvironment.getUrl(environment_name) + "build", buildRequest, BuildMessage.class);
if (buildMessage != null) {
list.add(buildMessage);
messageids = messageids + buildMessage.getId() + ",";
}
}
}
} else {
BuildMessage buildMessage = httpRestClient.post(ProjectEnvironment.getUrl(environment_name) + "build", buildRequest, BuildMessage.class);
if (buildMessage != null) {
list.add(buildMessage);
messageids = messageids + buildMessage.getId() + ",";
}
}
model.addAttribute("environment_name", environment_name);
model.addAttribute("operate_name", operate_name);
model.addAttribute("branch_name", branch_name);
model.addAttribute("rollbackfile_name", rollbackfile_name);
model.addAttribute("messageids", messageids);
model.addAttribute("messageList", list);
} catch (Exception ex) {
return "failed";
}
return new ModelAndView("project/project_build");
}
/**
... ... @@ -140,6 +198,7 @@ public class ProjectBuildCtrl {
Map<String, String> map = new HashMap<>();
map.put("messageid", messageid);
map.put("project", project);
return httpRestClient.get(ProjectEnvironment.getUrl(messageid.split("_")[0]) + "getbuildmsg", String.class, map);
} catch (Exception ex) {
... ...
monitor.service.url=http://127.0.0.1:8880/monitor
\ No newline at end of file
monitor.service.url=http://192.168.102.205:8880/monitor
\ No newline at end of file
... ...
.blanksegmentation {
height: 30px;
}
#rightpanel{
margin: 0 40px;
}
.margin10px{
margin-top:10px;
}
.margin15px{
margin-top:15px;
}
.margin20px{
margin-top:20px;
}
.title-hr{
margin:30px 0;
}
.table-hr{
margin:5px 64% 8px 0;
}
... ...
<%@ page import="org.aspectj.weaver.ast.Var" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%
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/bootstrap-datetimepicker.css"/>
<link href="<%=basePath %>js/bootstrap-plugin/css/bootstrap.table.css" rel="stylesheet" media="screen"/>
<link rel="stylesheet" href="<%=basePath %>css/bootstrap-responsive.min.css"/>
<link rel="stylesheet" href="<%=basePath %>css/fullcalendar.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/uniform.css"/>
<link rel="stylesheet" href="<%=basePath %>css/select2.css"/>
<link rel="stylesheet" href="<%=basePath %>js/jstree/themes/proton/style.css"/>
<link rel="stylesheet" href="<%=basePath %>css/select2.css"/>
<link rel="stylesheet" href="<%=basePath %>css/yoho.css"/>
<script src="<%=basePath %>js/excanvas.min.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-1.12.0.min.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-ui.custom.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>/js/bootstrap.min.js"></script>
<script src="<%=basePath %>/js/unicorn.js"></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/layer/layer.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/jstree/jstree.min.js"></script>
<script src="<%=basePath %>js/jquery.toaster.js"></script>
<script type="text/javascript" src="<%=basePath %>js/echarts.simple.min.js"></script>
<script type="text/javascript" src="<%=basePath %>js/echarts.min.js"></script>
<script>
var contextPath = '<%=basePath %>';
</script>
<title>YOHO!运维</title>
</head>
<body>
<!-- 头部 -->
<div id="head">
</div>
<!-- 右侧具体内容 -->
<div id="content">
<div id="breadcrumb">
<a href="#" title="Go to Home" class="tip-bottom"><i
class="icon-home"></i> Home</a> <a
href="#" class="current">在线IP配置对比</a>
</div>
<div class="container-fluid">
<div class="widget-box">
<div class="widget-title">
<h5>在线IP配置对比</h5>
</div>
<div class="container-fluid">
<div class="row-fluid">
<div class="col-md-6" style="width: 90%">
<div class="form-group">
<label class="col-sm-1 control-label">服务选择</label>
<div class="col-sm-8">
<select id="serviceSelect"
style="display: list-item; width: 100px; height: 30px">
<option value="1">nginx</option>
<option value="2">gateway</option>
<option value="3">bigdata</option>
<option value="4">message</option>
<option value="5">order</option>
<option value="6">product</option>
<option value="7">promotion</option>
<option value="8">resources</option>
<option value="9">sns</option>
<option value="10">users</option>
<option value="11">push</option>
<option value="12">uic</option>
<option value="13">platform</option>
</select>
</div>
</div>
</div>
<div class="col-md-6" style="width: 90%; margin-top: 20px">
<div class="form-group">
<label class="col-sm-1 control-label">范围选择</label>
<div class="col-sm-8">
<div class="rdio rdio-default">
<input type="radio" name="operate-1" value="qcloud_val" id="qcloud"
onclick="choseNet('qcloud')"/>
<label for="qcloud">腾讯云</label>
</div>
<div class="rdio rdio-default">
<input type="radio" name="operate-1" value="aws_val" id="aws"
onclick="choseNet('aws')"/>
<label for="aws">AWS</label>
</div>
</div>
</div>
</div>
<div class="col-md-6" style="width: 90%">
<div class="form-group">
<div class="col-sm-8" style="margin-bottom: 10px;margin-top: 10px">
<button id="exe_btn" class="btn btn-success btn-rounded"
onclick="btn_click()">对比
</button>
</div>
</div>
<div class="form-group" style="margin-top: 40px">
<div id="showIps" class="col-sm-8"></div>
</div>
</div><!-- col-md-6 -->
</div>
</div>
</div>
</div>
</div>
</body>
<script src="<%=basePath %>script/common/genarate_left_panel.js"></script>
<script>
$("#li_config").addClass("active open");
$("#li_ips_compare").addClass("active");
</script>
<script type="text/javascript">
var service;
var net;
function selectService() {
var obj = document.getElementById("serviceSelect"); //定位id
var index = obj.selectedIndex; // 选中索引
var text = obj.options[index].text; // 选中文本
service = text;
}
function choseNet(netName) {
net = netName;
}
function btn_click() {
selectService();
$.ajax({
url: getUrlBasePath() + "/compareIps/compare",
type: "post",
dataType: "json",
data: {
service: service,
net: net
},
success: function (response) {
showIps(response.data.ips);
if (1 == response.data.status) {
localAlert("告警","存在IP配置不一致,请仔细查看比对结果!");
}
},
error: function (e) {
localAlert("错误","查询比对失败,请稍后重试!");
}
});
}
function showIps(data) {
var showIpsArea = document.getElementById("showIps");
document.getElementById('showIps').innerHTML = '';
for (var i = 0; i < data.length; i++) {
var texrArea = $("<textarea rows='30' cols='120' style='width: 20%; height: 20%;margin-left: 10%; resize: none;' readonly='readonly'>");
texrArea.text(data[i]);
texrArea.appendTo(showIpsArea);
}
}
</script>
</html>
... ...
<%@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"/>
<script src="<%=basePath %>js/excanvas.min.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-1.12.0.min.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-ui.custom.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>/js/bootstrap.min.js"></script>
<script src="<%=basePath %>/js/unicorn.js"></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/layer/layer.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/jstree/jstree.min.js"></script>
<script src="<%=basePath %>js/jquery.toaster.js"></script>
<script src="<%=basePath %>js/jquery-2.1.4.min.js"></script>
<script src="<%=basePath %>js/bootstrap.min.js"></script>
<script src="<%=basePath %>js/select2.min.js"></script>
<script src="<%=basePath %>js/custom.js"></script>
<script>
var contextPath = '<%=basePath %>';
</script>
<title>YOHO!运维</title>
</head>
<body>
<!-- 头部 -->
<div id="head">
</div>
<!-- 右侧具体内容 -->
<div id="content">
<div id="breadcrumb">
<a href="#" title="Go to Home" class="tip-bottom"><i
class="icon-home"></i> Home</a> <a href="#" class="current">Monit</a>
</div>
<div class="container-fluid">
<div id="body_div">
<div class="blanksegmentation"></div>
</div>
</div>
</div>
<script src="<%=basePath %>script/common/genarate_left_panel.js"></script>
<script>
$("#li_monitor").addClass("active open");
$("#li_monit").addClass("active");
</script>
<script src="<%=basePath %>script/monit.js"></script>
</body>
</html>
... ...
... ... @@ -101,6 +101,17 @@
</c:forEach>
</select>
</div>
<div class="input-group" style="float: left;">
<span class="input-group-addon">状态:</span>
<select id="currentStatus" name="currentStatus" class="form-control">
<option value="0"></option>
<option value="1">正在进行</option>
<option value="2">成功</option>
<option value="3">强制退出</option>
<option value="4">出错退出</option>
</select>
</div>
<button id="searchBtn" class="btn btn-primary" style="margin-left: 18px;">搜索</button>
</div>
</div>
... ... @@ -153,10 +164,10 @@
width: "8%"
}, {
title: "状态",
field: "status",
field: "currentStatus",
formatter : function(value, rowData, rowIndex) {
if(value == 1){
return '成功';
return '正在进行';
} else if(value == 2){
return '成功';
}else if(value == 3){
... ... @@ -189,9 +200,12 @@
$("#searchBtn").click(function () {
var currentProject = $("#currentProject").val();
var environment = $("#environment").val();
var currentStatus = $("#currentStatus").val();
$("#historyTable").table("load", {
'currentProject': currentProject,
'environment': environment
'environment': environment,
'currentStatus': currentStatus
});
});
... ...
... ... @@ -73,12 +73,6 @@
<div class="col-sm-8" id="project-div">
</div>
</div>
<%--<div class="form-group" id="tag-div">--%>
<%--<label class="col-sm-1 control-label">TAG输入</label>--%>
<%--<div class="col-sm-8">--%>
<%--<input name="tag" type="text" placeholder="默认为master最新版本" class="form-control" style="width: 300px" />--%>
<%--</div>--%>
<%--</div>--%>
<div class="form-group" id="branch-div">
<label class="col-sm-1 control-label">Branch输入</label>
... ... @@ -100,33 +94,12 @@
<div class="col-sm-8">
<button type="button" id="submit-btn" onclick="comfirmSubmit()" class="btn btn-primary">提交</button>
<button type="button" id="cancel-btn" onclick="cancelBuild()" class="btn btn-danger">取消</button>
</div>
</div>
<div class="form-group">
<label class="col-sm-1 control-label">操作提示</label>
<div class="col-sm-8">
<div class="alert alert-warning" id="task-info-div">
</div>
<div id="show-project-div">
</div>
</div>
</div>
</form>
</div>
<!-- query panel -->
<HR class="title-hr"
style="FILTER: alpha(opacity = 100, finishopacity = 0, style = 3)"
SIZE=3>
&nbsp; &nbsp; &nbsp; &nbsp;
<textarea id="resultArea" rows="30" cols="120"
style="background-color: black; color: white" readonly="readonly"></textarea>
</div>
<input type="hidden" id="messageid">
<input type="hidden" id="currentproject">
<!-- 初始化确认页面 -->
<div class="modal fade" id="confirmSubmitDivId" tabindex="-1" role="dialog" aria-labelledby="confirmSubmitLabel"
... ... @@ -140,8 +113,8 @@
</h2>
</div>
<div class="modal-body">
<form class="bs-example bs-example-form" action="<%=path %>/createBranch.do" role="form"
id="GitBranchCreateForm">
<form class="bs-example bs-example-form" action="<%=basePath %>project/build" role="form"
id="GitBranchCreateForm" method="post">
<div class="input-group">
<span class="input-group-addon">操作类型</span>
<input type="text" name="operate_name" class="form-control" readonly="readonly">
... ... @@ -170,12 +143,13 @@
<span class="input-group-addon">回滚文件</span>
<input type="text" name="rollbackfile_name" class="form-control" readonly="readonly">
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">确认</button>
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" onclick="projectbuild();">确认</button>
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
</div>
</div>
</div>
</div>
... ... @@ -191,11 +165,5 @@
$("#li_project").addClass("active open");
$("#li_projectRelease").addClass("active");
</script>
<script language="JavaScript">
window.onbeforeunload = function () {
return "真的离开?";
}
</script>
</body>
</html>
... ...
<%@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/bootstrap-datetimepicker.css"/>
<link href="<%=basePath %>js/bootstrap-plugin/css/bootstrap.table.css" rel="stylesheet" media="screen"/>
<link rel="stylesheet" href="<%=basePath %>css/bootstrap-responsive.min.css"/>
<link rel="stylesheet" href="<%=basePath %>css/fullcalendar.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/uniform.css"/>
<link rel="stylesheet" href="<%=basePath %>css/select2.css"/>
<link rel="stylesheet" href="<%=basePath %>js/jstree/themes/proton/style.css"/>
<link rel="stylesheet" href="<%=basePath %>css/select2.css"/>
<link rel="stylesheet" href="<%=basePath %>css/yoho.css"/>
<script src="<%=basePath %>js/excanvas.min.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-1.12.0.min.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-ui.custom.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>/js/bootstrap.min.js"></script>
<script src="<%=basePath %>/js/unicorn.js"></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/layer/layer.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/jstree/jstree.min.js"></script>
<script src="<%=basePath %>js/jquery.toaster.js"></script>
<script>
var contextPath = '<%=basePath %>';
</script>
<title>YOHO!运维</title>
</head>
<body>
<!-- 头部 -->
<div id="head">
</div>
<!-- 右侧具体内容 -->
<div id="content">
<div id="breadcrumb">
<a href="#" title="Go to Home" class="tip-bottom"><i
class="icon-home"></i> Home</a> <a href="#" class="current">发布进程</a>
</div>
<div class="container-fluid">
<div class="widget-box">
<div class="widget-title">
<h5>发布进程信息</h5>
</div>
<div class="widget-content nopadding">
<div class="widget-title" style="height: 53px;">
<div>
<div class="form-inline" role="form" id="inBoxQueryDiv"
style=" margin-top: 12px;margin-left: 25px;float: left;">
<div class="input-group" style="float: left;">
<span class="input-group-addon">操作:</span>
<input type="text" id="operate_name" name="operate_name" class="form-control"
readonly="readonly" value="${operate_name}"/>
</div>
<div class="input-group" style="float: left;">
<span class="input-group-addon">环境:</span>
<input type="text" id="environment_name" name="environment_name" class="form-control"
readonly="readonly" value="${environment_name}"/>
</div>
<div class="input-group" style="float: left;">
<span class="input-group-addon">分支:</span>
<input type="text" id="branch_name" name="branch_name" class="form-control"
readonly="readonly" value="${branch_name}"/>
</div>
<div class="input-group" style="float: left;">
<span class="input-group-addon">回滚:</span>
<input type="text" id="rollbackfile_name" name="rollbackfile_name" class="form-control"
readonly="readonly" value="${rollbackfile_name}"/>
</div>
</div>
</div>
</div>
<c:forEach items="${messageList }" var="message">
<div style="float: left;height: 600px;">
<hr>
<div>执行顺序:<strong>${message.projectOrder}</strong>
</div>
<div>当前项目:<input type="text" id="currentProject_${message.id}" value="${message.currentProject}" readonly="readonly">
<button type="button" id="cancel-btn_${message.id}" onclick="cancelBuild('${message.id}')"
class="btn btn-xs btn-danger">取消
</button>
</div>
<div style="height: 50px" class="alert alert-warning" id="task-info-div_${message.id}">
</div>
<textarea id="resultArea_${message.id}" rows="25" cols="100"
style="background-color: black; color: white" readonly="readonly"></textarea>
</div>
</c:forEach>
</div>
</div>
</div>
</div>
<input type="hidden" id="messageListHidden" value="${messageids}">
</body>
<script src="<%=basePath %>script/common/genarate_left_panel.js"></script>
<script>
$("#li_project").addClass("active open");
$("#li_projectRelease").addClass("active");
</script>
<script>
var myArray;
var removeArray = new Array();
$(function () {
var messageListHidden = $("#messageListHidden").val();
myArray = messageListHidden.split(",");
var interval = setInterval(function () {//查后台,展示数据
$.each(myArray, function (idx, val) {
if(jQuery.inArray(val, removeArray) != -1){
return;
}
if(val == ""){
return;
}
var cproject = $("#currentProject_"+val).val();
$.ajax({
url: contextPath + 'project/getbuildmsg?messageid=' + val+"&project="+cproject,
type: 'POST',
dataType: 'json',
success: function (data3) {
var obj2 = eval("(" + data3 + ")");
var messagedata = obj2.data;
var currproject = messagedata.currentProject;
if (currproject != cproject) {
$("#currentProject_"+val).val(currproject);//更换当前的项目
$("#resultArea_" + val).val("")
}
if (messagedata.message != "") {
var d = $("#resultArea_" + val).val();
$("#resultArea_"+ val).val(d + messagedata.message);
var scrollTop = $("#resultArea_" + val)[0].scrollHeight;
$("#resultArea_" + val).scrollTop(scrollTop);
}
//code为2 ,则结束
var code = obj2.code;
var message = obj2.message;
if (code == 2) {
document.getElementById("task-info-div_" + val).innerHTML = "<strong>'" + message + "'</strong>";
removeArray.push(val);
$("#cancel-btn_"+val).hide();
}
},
error: function (e) {
}
});
});
}, 3000);
});
/**
* 取消
*/
function cancelBuild(messageid) {
var jsondata = {"id": messageid};
$.ajax({
url: contextPath + 'project/cancelBuild',
type: 'POST',
dataType: 'json',
data: jsondata,
success: function (data) {
},
error: function (e) {
}
});
}
</script>
<script>
document.onkeydown = function()
{
if(event.keyCode==116 || event.keyCode==8 || (event.ctrlKey && event.keyCode==82) || event.keyCode == 13) {
event.keyCode=0;
event.returnValue = false;
}
}
document.oncontextmenu = function() {event.returnValue = false;}
</script>
\ No newline at end of file
... ...
<%@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/bootstrap-datetimepicker.css"/>
<link href="<%=basePath %>js/bootstrap-plugin/css/bootstrap.table.css" rel="stylesheet" media="screen"/>
<link rel="stylesheet" href="<%=basePath %>css/bootstrap-responsive.min.css"/>
<link rel="stylesheet" href="<%=basePath %>css/fullcalendar.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/uniform.css"/>
<link rel="stylesheet" href="<%=basePath %>css/select2.css"/>
<link rel="stylesheet" href="<%=basePath %>js/jstree/themes/proton/style.css"/>
<link rel="stylesheet" href="<%=basePath %>css/select2.css"/>
<link rel="stylesheet" href="<%=basePath %>css/yoho.css"/>
<script src="<%=basePath %>js/excanvas.min.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-1.12.0.min.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-ui.custom.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>/js/bootstrap.min.js"></script>
<script src="<%=basePath %>/js/unicorn.js"></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/layer/layer.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/jstree/jstree.min.js"></script>
<script src="<%=basePath %>js/jquery.toaster.js"></script>
<script>
var contextPath = '<%=basePath %>';
</script>
<title>YOHO!运维</title>
</head>
<body>
<!-- 头部 -->
<div id="head">
</div>
<!-- 右侧具体内容 -->
<div id="content">
<div id="breadcrumb">
<a href="#" title="Go to Home" class="tip-bottom"><i
class="icon-home"></i> Home</a> <a href="#" class="current">双中心切换</a>
</div>
<div class="container-fluid">
<div class="widget-box">
<div id="switchTable">
</div>
</div>
</div>
</div>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" >
<div class="modal-dialog" style="margin-top: 5%;
margin-left: auto;
height:50.333%;
width: 60%;
overflow:scroll;
overflow-x:auto;
overflow-y:auto ">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-hidden="true">&times;</button>
<h4 class="modal-title" id="myModalLabel"></h4>
</div>
<div class="modal-body">
<div id="check_result_div" style="">
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">关闭</button>
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal -->
</div>
<script src="<%=basePath %>script/common/genarate_left_panel.js"></script>
<script type="text/javascript">
$("#li_switch").addClass("active open");
$("#li_centerswitch").addClass("active");</script>
</body>
</html>
<script>
$(function () {
//加载表格
$("#switchTable").table({
columnAutoWidth: false,
url: contextPath + "centerSwitch/getSwitchList",
striped: true,
title: "切换列表",
loadFilter: function (data) {
return defaultLoadFilter(data);
},
columns: [{
title: "切换项",
field: "cName",
width: "15%"
}, {
title: "切向QQ",
field: "name",
formatter: function (value, rowData, rowIndex) {
var div = $("<div>");
$("<button onclick=\"doExe(\'" + value + "\',\'beforeCheck\')\">").addClass("btn btn-xs btn-success").html("前检测").appendTo(div);
div.append("&nbsp;");
$("<button onclick=\"toDoExe(\'" + value + "\',\'toQcloud\')\">").addClass("btn btn-primary").html("切换").appendTo(div);
div.append("&nbsp;");
$("<button onclick=\"doExe(\'" + value + "\',\'afterCheck\')\">").addClass("btn btn-xs btn-success").html("后检测").appendTo(div);
return div;
},
width: "35%"
},{
title: "切回AWS",
field: "name",
formatter: function (value, rowData, rowIndex) {
var div = $("<div>");
$("<button onclick=\"doExe(\'" + value + "\',\'afterCheck\')\">").addClass("btn btn-xs btn-success").html("前检测").appendTo(div);
div.append("&nbsp;");
$("<button onclick=\"toDoExe(\'" + value + "\',\'toAws\')\">").addClass("btn btn-primary").html("切换").appendTo(div);
div.append("&nbsp;");
$("<button onclick=\"doExe(\'" + value + "\',\'beforeCheck\')\">").addClass("btn btn-xs btn-success").html("后检测").appendTo(div);
return div;
},
width: "35%"
},{
title: "状态查看",
field: "name",
formatter: function (value, rowData, rowIndex) {
var div = $("<div>");
$("<button onclick=\"doExe(\'" + value + "\',\'status\')\">").addClass("btn btn-primary").html("当前状态").appendTo(div);
return div;
},
width: "35%"
}]
});
});
//执行切换
function toDoExe(name, toCloud) {
var dialog = $("<div>").appendTo($("body"));
dialog.dialog({
title: "切换确定",
backdrop: "static",
content: "name:"+name+" exe:"+toCloud,
buttons: [{
text: "否",
className: "btn-danger",
onclick: function () {
$(dialog).dialog("hide");
}
}, {
text: "是",
className: "btn-success",
onclick: function () {
$(dialog).dialog("hide");
doExe(name,toCloud);
}
}]
});
}
//执行切换
function doExe(name, exe) {
var jq = $("#switchTable");
$.ajax({
type: 'post',
url: contextPath + "/centerSwitch/doExe",
data:{
'name':name,
'exe':exe
},
dataType: 'json',
beforeSend:function(){
var div = $("<div>").attr("tableSelector", jq.selector).addClass("modal-backdrop fade in").appendTo($("body")).hide();
var tableOffset = jq.offset();
var tableWidth = jq.outerWidth(true), tableHeight = jq.outerHeight(true);
div.append($("<div>").addClass("table-loading").css({
left : (tableWidth - 124) / 2,
top : (tableHeight - 124) / 2
}));
div.css({
width : tableWidth,
height : tableHeight,
left : tableOffset.left,
top : tableOffset.top
});
div.show();
},
success: function (resp) {
$("body").find("div[tableSelector='"+ jq.selector +"']").remove();
$("#check_result_div").html(resp.data);
$("#myModalLabel").text("name:"+name+" exe:"+exe);
$("#myModal").modal('show');
},
error: function () {
$("body").find("div[tableSelector='"+ jq.selector +"']").remove();
}
});
}
</script>
\ No newline at end of file
... ...
<%@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/bootstrap-datetimepicker.css"/>
<link href="<%=basePath %>js/bootstrap-plugin/css/bootstrap.table.css" rel="stylesheet" media="screen"/>
<link rel="stylesheet" href="<%=basePath %>css/bootstrap-responsive.min.css"/>
<link rel="stylesheet" href="<%=basePath %>css/fullcalendar.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/uniform.css"/>
<link rel="stylesheet" href="<%=basePath %>css/select2.css"/>
<link rel="stylesheet" href="<%=basePath %>js/jstree/themes/proton/style.css"/>
<link rel="stylesheet" href="<%=basePath %>css/select2.css"/>
<link rel="stylesheet" href="<%=basePath %>css/yoho.css"/>
<script src="<%=basePath %>js/excanvas.min.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-1.12.0.min.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-ui.custom.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>/js/bootstrap.min.js"></script>
<script src="<%=basePath %>/js/unicorn.js"></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/layer/layer.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/jstree/jstree.min.js"></script>
<script src="<%=basePath %>js/jquery.toaster.js"></script>
<script>
var contextPath = '<%=basePath %>';
</script>
<title>YOHO!运维</title>
</head>
<body>
<!-- 头部 -->
<div id="head">
</div>
<!-- 右侧具体内容 -->
<div id="content">
<div id="breadcrumb">
<a href="#" title="Go to Home" class="tip-bottom"><i
class="icon-home"></i> Home</a> <a href="#" class="current">双中心切换</a>
</div>
<div class="container-fluid">
<div class="widget-box">
<div id="switchTable">
<textarea id="resultArea" rows="25"
style="background-color: black; color: white;width: 100%" readonly="readonly">${message}</textarea>
</div>
</div>
</div>
</div>
<input type="hidden" id="name" value="${name}">
<input type="hidden" id="toCloud" value="${toCloud}">
</div>
<script src="<%=basePath %>script/common/genarate_left_panel.js"></script>
<script type="text/javascript">
$("#li_switch").addClass("active open");
$("#li_centerswitch").addClass("active");</script>
</body>
</html>
<script>
$(function () {
var name=$("#name").val();
var toCloud=$("#toCloud").val();
var jq = $("#switchTable");
$.ajax({
type: 'post',
url: contextPath + "/centerSwitch/doExe",
data:{
'name':name,
'exe':toCloud
},
dataType: 'json',
beforeSend:function(){
var div = $("<div>").attr("tableSelector", jq.selector).addClass("modal-backdrop fade in").appendTo($("body")).hide();
var tableOffset = jq.offset();
var tableWidth = jq.outerWidth(true), tableHeight = jq.outerHeight(true);
div.append($("<div>").addClass("table-loading").css({
left : (tableWidth - 124) / 2,
top : (tableHeight - 124) / 2
}));
div.css({
width : tableWidth,
height : tableHeight,
left : tableOffset.left,
top : tableOffset.top
});
div.show();
},
success: function (resp) {
$("body").find("div[tableSelector='"+ jq.selector +"']").remove();
$("#resultArea").val(resp.data);
},
error: function (resp) {
}
});
});
document.onkeydown = function()
{
if(event.keyCode==116 || event.keyCode==8 || (event.ctrlKey && event.keyCode==82) || event.keyCode == 13) {
event.keyCode=0;
event.returnValue = false;
}
}
document.oncontextmenu = function() {event.returnValue = false;}
</script>
\ No newline at end of file
... ...
... ... @@ -58,7 +58,6 @@
<script src="<%=basePath %>js/jquery.toaster.js"></script>
<script>
var contextPath = '<%=basePath %>';
var api_type = "<%=api_type %>";
</script>
<title>YOHO!运维</title>
</head>
... ... @@ -86,17 +85,17 @@
<div>
<button id="awsRestart" class="btn btn-primary" style="margin-top: 12px;margin-left: 100px;"
onclick="restart('all','aws')">
onclick="restart('all','aws','')">
aws重启
</button>
&nbsp;
<button id="qcloudRestart" class="btn btn-primary" style="margin-top: 12px;margin-left: 100px;"
onclick="restart('all','qcloud')">
onclick="restart('all','qcloud','')">
qq重启
</button>
&nbsp;
<button id="allRestart" class="btn btn-primary" style="margin-top: 12px;margin-left: 100px;"
onclick="restart('all','mix')">
onclick="restart('all','mix','')">
所有重启
</button>
</div>
... ... @@ -108,6 +107,7 @@
</div>
</div>
</div>
</body>
<script src="<%=basePath %>script/common/genarate_left_panel.js"></script>
<script>
... ... @@ -158,11 +158,16 @@
field: "op",
formatter: function (value, rowData, rowIndex) {
var div = $("<div>");
$("<button onclick=\"restart(\'" + rowData.name + "\',\'aws\')\">").addClass("btn btn-xs btn-primary").html("aws重启").appendTo(div);
$("<button onclick=\"restart(\'" + rowData.name + "\',\'aws\',\'\')\">").addClass("btn btn-xs btn-primary").html("aws重启").appendTo(div);
div.append("&nbsp;");
$("<button onclick=\"restart(\'" + rowData.name + "\',\'qcloud\',\'\')\">").addClass("btn btn-xs btn-primary").html("qq重启").appendTo(div);
div.append("&nbsp;");
$("<button onclick=\"restart(\'" + rowData.name + "\',\'qcloud\')\">").addClass("btn btn-xs btn-primary").html("qq重启").appendTo(div);
$("<button onclick=\"restart(\'" + rowData.name + "\',\'mix\',\'\')\">").addClass("btn btn-xs btn-primary").html("全部重启").appendTo(div);
div.append("</br>");
div.append("</br>");
$("<button onclick=\"stop(\'" + rowData.name + "\',\'aws\',\'\')\">").addClass("btn btn-xs btn-primary").html("aws停止").appendTo(div);
div.append("&nbsp;");
$("<button onclick=\"restart(\'" + rowData.name + "\',\'mix\')\">").addClass("btn btn-xs btn-primary").html("全部重启").appendTo(div);
$("<button onclick=\"stop(\'" + rowData.name + "\',\'qcloud\',\'\')\">").addClass("btn btn-xs btn-primary").html("qq停止").appendTo(div);
return div;
},
width: "20%"
... ... @@ -200,21 +205,27 @@
span.attr("data-toggle", "popover");
span.attr("data-placement", "bottom");
span.attr("data-html", "true");
span.attr("data-content", val.lastStart);
if(val.status == "1"){
span.attr("title", val.lastStart);
span.attr("data-content", "<button class='btn btn-primary btn-xs' onclick=\"restart(\'" + name + "\',\'single\',\'"+val.ip+"\')\">重启</button>&nbsp;&nbsp;<button class='btn btn-primary btn-xs' onclick=\"stop(\'" + name + "\',\'single\',\'"+val.ip+"\')\">停止</button>");
// span.attr("data-content", "unkown");
span.popover({
//delay: {"show": 500, "hide": 100}
// container: 'tip_well'
});
// span.attr("onclick","singleOp('"+val.ip+"','"+name+"')");
if (val.status == "1") {
span.addClass('btn-success');
}else{
} else {
span.addClass('btn-danger');
}
if(val.cloud == "aws"){
if (val.cloud == "aws") {
aws_div.append(span);
}else{
} else {
qcloud_div.append(span);
}
span.popover({
delay: {"show": 500, "hide": 100}
// container: 'tip_well'
});
});
$("#aws_" + name).html("");
... ... @@ -229,9 +240,60 @@
});
}
function restart(project, cloud,ip) {
var dialog = $("<div>").appendTo($("body"));
dialog.dialog({
title: "重启确定",
backdrop: "static",
content: "服务:"+project+",云:"+cloud+",ip:"+ip+"",
buttons: [{
text: "否",
className: "btn-danger",
onclick: function () {
$(dialog).dialog("hide");
}
}, {
text: "是",
className: "btn-success",
onclick: function () {
function restart(project, cloud) {
var iWidth = 900;
var iHeight = 700;
var iTop = (window.screen.availHeight - 30 - iHeight) / 2; //获得窗口的垂直位置;
var iLeft = (window.screen.availWidth - 10 - iWidth) / 2; //获得窗口的水平位置;
window.open(contextPath + "javaRestart/toStopOrRestart?project=" + project + "&cloud=" + cloud + "&exe=restart"+ "&ip=" + ip, "_blank", "height=" + iHeight + ", width=" + iWidth + ", top=" + iTop + ", left=" + iLeft);
$(dialog).dialog("hide");
}
}]
});
}
function stop(project, cloud,ip) {
var dialog = $("<div>").appendTo($("body"));
dialog.dialog({
title: "停机确定",
backdrop: "static",
content: "服务:"+project+",云:"+cloud+",ip:"+ip+"",
buttons: [{
text: "否",
className: "btn-danger",
onclick: function () {
$(dialog).dialog("hide");
}
}, {
text: "是",
className: "btn-success",
onclick: function () {
var iWidth = 1200;
var iHeight = 900;
var iTop = (window.screen.availHeight - 30 - iHeight) / 2; //获得窗口的垂直位置;
var iLeft = (window.screen.availWidth - 10 - iWidth) / 2; //获得窗口的水平位置;
window.open(contextPath + "javaRestart/toStopOrRestart?project=" + project + "&cloud=" + cloud + "&exe=stop"+ "&ip=" + ip, "_blank", "height=" + iHeight + ", width=" + iWidth + ", top=" + iTop + ", left=" + iLeft);
$(dialog).dialog("hide");
}
}]
});
}
</script>
 
\ No newline at end of file
... ...
<%@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/bootstrap-responsive.min.css"/>
<link rel="stylesheet" href="<%=basePath %>css/jquery.gritter.css"/>
<link rel="stylesheet" href="<%=basePath %>css/jquery-ui.css"/>
<link rel="stylesheet" href="<%=basePath %>css/unicorn.main.css"/>
<link rel="stylesheet" href="<%=basePath %>css/unicorn.grey.css" class="skin-color"/>
<script src="<%=basePath %>js/excanvas.min.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-1.12.0.min.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-ui.custom.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>/js/bootstrap.min.js"></script>
<script src="<%=basePath %>/js/unicorn.js"></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/layer/layer.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/jstree/jstree.min.js"></script>
<script src="<%=basePath %>js/jquery.toaster.js"></script>
<script src="<%=basePath %>js/jquery.gritter.min.js"></script>
<script>
var contextPath = '<%=basePath %>';
</script>
<title>YOHO!运维</title>
</head>
<body>
<!-- 右侧具体内容 -->
<input type="hidden" id="hidden_ip" value="${ip}">
<input type="hidden" id="hidden_project" value="${project}">
<input type="hidden" id="hidden_exe" value="${exe}">
<input type="hidden" id="hidden_cloud" value="${cloud}">
<div id="infoTable">
</div>
</body>
<script>
var myArray = new Array();
var removeArray = new Array();
$(function () {
var ip = $("#hidden_ip").val();
var cloud = $("#hidden_cloud").val();
var exe = $("#hidden_exe").val();
var project = $("#hidden_project").val();
var tableParam = {
columnAutoWidth: false,
url: contextPath + "/javaRestart/stopOrRestart",
striped: true,
title: "java服务操作进程",
dataType: "json",
loadFilter: function (data) {
return defaultLoadFilter(data);
},
onLoadSuccess: function (data) {
$.each(data, function (idx, val) {
myArray[idx] = val.id;
});
setStatus();
},
columns: [{
title: "项目名称",
field: "project",
width: "10%"
}, {
title: "操作",
field: "exe",
width: "10%"
}, {
title: "云",
field: "cloud",
width: "10%"
}, {
title: "已执行IP",
field: "id",
formatter: function (value, rowData, rowIndex) {
var div = $("<div >").attr('id', 'done_' + value);
return div;
},
width: "25%"
}, {
title: "待执行IP",
field: "id",
formatter: function (value, rowData, rowIndex) {
var div = $("<div >").attr('id', 'todo_' + value);
return div;
},
width: "25%"
}, {
title: "进度",
field: "id",
formatter: function (value, rowData, rowIndex) {
var div = $("<div id=\"process_" + value + "\">");
return div;
},
width: "20%"
}]
};
//加载表格
$("#infoTable").table(tableParam);
$("#infoTable").table("load", {
'ip': ip,
'cloud': cloud,
'exe': exe,
'project': project
});
var interval = setInterval(function () {//查后台,展示数据
setStatus();
}, 3000);
});
function setStatus() {
if (myArray.length == 0)
return;
$.each(myArray, function (idx, val) {
if(jQuery.inArray(val, removeArray) != -1){
return;
}
$.ajax({
type: 'post',
url: contextPath + "/javaRestart/getMessage?id=" + val,
dataType: 'json',
success: function (resp) {
if (resp == null || resp.code == 300) {
removeArray[removeArray.length+1] = val;
return;
}
$("#done_" + val).html("");
$("#done_" + val).html(resp.data.doneList);
$("#todo_" + val).html("");
$("#todo_" + val).html(resp.data.toDoList);
$("#process_" + val).html("");
$("#process_" + val).html(resp.data.donePersent);
},
error: function (resp) {
}
});
});
}
</script>
<script>
document.onkeydown = function()
{
if(event.keyCode==116 || event.keyCode==8 || (event.ctrlKey && event.keyCode==82) || event.keyCode == 13) {
event.keyCode=0;
event.returnValue = false;
}
}
document.oncontextmenu = function() {event.returnValue = false;}
</script>
\ No newline at end of file
... ...
<%@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">
<div style="padding:50px 200px">${conf}</div>
<h3 class="header smaller red"></h3>
<div class="btn-group" style="padding:5px 20px">
<c:choose>
<c:when test="${status == 0}">
<button class="btn btn-sm btn-success" onclick="initSwitch(1)">
<em class="icon-cogs bigger-110"></em>开启
</button>
</c:when>
<c:when test="${status == 1}">
<button class="btn btn-sm btn-success" onclick="initSwitch(0)">
<em class="icon-cogs bigger-110"></em>关闭
</button>
</c:when>
</c:choose>
</div>
</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 -->
<script src="<%=basePath %>script/common/genarate_left_panel.js" type="text/javascript"></script>
<script type="text/javascript">
$("#li_switch").addClass("active open");
$("#li_lbswitch").addClass("active");
</script>
<script type="text/javascript">
/**
* "开启/关闭"按钮点击事件,打开确认操作对话框
* @param status
*/
function initSwitch(status) {
var dialog = $("<div>").appendTo($("body"));
dialog.dialog({
title: "你确定切换吗",
backdrop: "static",
content: "你确定要" + (0 === status ? "关闭" : (1 === status ? "开启" : "")) + "直连吗?",
buttons: [{
text: "否",
className: "btn-danger",
onclick: function () {
dialog.dialog("hide");
}
}, {
text: "是",
className: "btn-success",
onclick: function () {
var param = {
status: status
};
sendAjax("post", "viewToChangeLbConf", param, "text", viewToChangeSuccess, errorFunc);
dialog.dialog("hide");
}
}]
});
}
/**
* 打开对话框,展示切换后的配置
* @param resp 切换后的响应数据
*/
function viewToChangeSuccess(resp) {
var data = JSON.parse(resp);
var dialog = $("<div>").appendTo($("body"));
dialog.dialog({
title: "切换结果",
backdrop: "static",
content: "<pre>" + data.data + "</pre>",
buttons: [{
text: "否",
className: "btn-danger",
onclick: function () {
dialog.dialog("hide");
}
}, {
text: "确定",
className: "btn-success",
onclick: function () {
sendAjax("post", "switchConf", {}, "text", switchSuccess, errorFunc);
dialog.dialog("hide");
toWait();
}
}]
}).find(".modal-body").css({
height: "650px"
});
}
/**
* 切换配置成功,跳转回首页
*/
function switchSuccess() {
window.location.href = contextPath + "/lbSwitch/toLbSwitch";
}
/**
* 发送ajax请求
* @param type 请求方法post/get
* @param url 请求url
* @param data 请求参数数据
* @param dataType 请求参数类型
* @param success 请求成功回调函数
* @param error 请求异常回调函数
*/
function sendAjax(type, url, data, dataType, success, error) {
$.ajax({
type: type,
url: url,
data: data,
dataType: dataType,
success: success,
error: error
});
}
/**
* ajax请求异常回调函数
*/
function errorFunc() {
layer.msg("Token异常", {icon: 2});
}
/**
* 打开等待对话框
*/
function toWait() {
$("<div>").appendTo($("body")).dialog({
title: "提示",
backdrop: "static",
content: "正在切换,请稍后..."
});
}
</script>
</body>
</html>
... ...
<%@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">
$("#li_switch").addClass("active open");
$("#li_limitswitch").addClass("active");
</script>
<script type="text/javascript">
/**
* 按钮“调整”点击事件,打开设置对话框并初始化数据
*/
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>";
var dialog = $("<div>").appendTo($("body"));
dialog.dialog({
title: "限流调整",
backdrop: "static",
content: html,
buttons: [{
text: "取消",
className: "btn-danger",
onclick: function () {
dialog.dialog("hide");
}
}, {
text: "提交",
className: "btn-success",
onclick: function () {
toSubmit(dialog);
}
}]
}).find(".modal-body").css({
height: "650px"
});
}
/**
* ajax提交编辑后的数据
*/
function toSubmit(dialog) {
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);
dialog.dialog("hide");
}
}
/**
* 弹出调整后数据对话框
*/
function viewToChangeSuccess(resp) {
var data = JSON.parse(resp);
var dialog = $("<div>").appendTo($("body"));
dialog.dialog({
title: "切换结果",
backdrop: "static",
content: "<pre>" + data.data + "</pre>",
buttons: [{
text: "否",
className: "btn-danger",
onclick: function () {
dialog.dialog("hide");
}
}, {
text: "确定",
className: "btn-success",
onclick: function () {
sendAjax("post", "switchConf", {}, "text", switchSuccess, errorFunc);
dialog.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();
}
/**
* 发送ajax请求
* @param type 请求方法post/get
* @param url 请求url
* @param data 请求参数数据
* @param dataType 请求参数类型
* @param success 请求成功回调函数
* @param error 请求异常回调函数
*/
function sendAjax(type, url, data, dataType, success, error) {
$.ajax({
type: type,
url: url,
data: data,
dataType: dataType,
success: success,
error: error
});
}
/**
* ajax请求异常回调函数
*/
function errorFunc() {
layer.msg("Token异常", {icon: 2});
}
/**
* 打开等待对话框
*/
function toWait() {
$("<div>").appendTo($("body")).dialog({
title: "提示",
backdrop: "static",
content: "正在切换,请稍后..."
});
}
/**
* 打开提示对话框
* @param title 标题
* @param content 内容
*/
function prompt(title, content) {
var dialog = $("<div>").appendTo($("body"));
dialog.dialog({
title: title,
backdrop: "static",
content: content,
buttons: [{
text: "确定",
className: "btn-success",
onclick: function () {
dialog.dialog("hide");
}
}]
});
}
</script>
</body>
</html>
... ...
... ... @@ -23,14 +23,13 @@
<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"></script>
<script src="<%=basePath %>js/bootstrap.min.js"></script>
<script src="<%=basePath %>js/typeahead-bs2.min.js"></script>
<script src="<%=basePath %>js/ace-elements.min.js"></script>
<script src="<%=basePath %>js/ace.min.js"></script>
<script src="<%=basePath %>script/nginx_switch.js"></script>
<script src="<%=basePath %>js/layer/layer.js"></script>
<script src="<%=basePath %>/js/unicorn.js"></script>
<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"
... ... @@ -51,8 +50,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"></script>
<script>
<script src="<%=basePath %>js/jquery.toaster.js" type="text/javascript"></script>
<script type="text/javascript">
var contextPath = '<%=basePath %>';
</script>
<title>YOHO!运维</title>
... ... @@ -65,8 +64,8 @@
<!-- 右侧具体内容 -->
<div id="content">
<div id="breadcrumb">
<a href="#" title="Go to Home" class="tip-bottom"><i
class="icon-home"></i> Home</a> <a href="#" class="current">lua切换</a>
<a href="#" title="Go to Home" class="tip-bottom"><em
class="icon-home"></em> Home</a> <a href="#" class="current">lua切换</a>
</div>
<div class="row">
... ... @@ -84,44 +83,50 @@
<h3 class="header smaller red"></h3>
<div class="btn-group" style="padding:5px 20px">
<button class="btn btn-sm btn-success" onclick="initSwitch('aws')">
<i class="icon-cogs bigger-110"></i>
<em class="icon-cogs bigger-110"></em>
aws切换
</button>
<button class="btn btn-sm btn-success" onclick="initSwitch('qcloud')">
<i class="icon-cogs bigger-110"></i>
<em class="icon-cogs bigger-110"></em>
qq切换
</button>
<button class="btn btn-sm btn-success" onclick="initSwitch('mix')">
<i class="icon-cogs bigger-110"></i>
<em class="icon-cogs bigger-110"></em>
混合切换
</button>
</div>
</div>
</div>
</div>
</div>
</div><!-- /span -->
</div>
</div><!-- /span -->
<div class="vspace-xs-6"></div>
</div><!-- /row -->
<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>
<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 -->
<!-- PAGE CONTENT ENDS -->
</div><!-- /.col -->
</div><!-- /.row -->
</div>
<script src="<%=basePath %>script/common/genarate_left_panel.js" type="text/javascript"></script>
<script src="<%=basePath %>script/common/genarate_left_panel.js"></script>
<script>
<script type="text/javascript">
$("#li_switch").addClass("active open");
$("#li_luaswitch").addClass("active");
</script>
<script type="text/javascript">
/**
* "*切换"按钮点击事件,打开确认操作对话框
* @param cloudName 目标中心名称
*/
function initSwitch(cloudName) {
var dialog = $("<div>").appendTo($("body"));
dialog.dialog({
... ... @@ -132,44 +137,96 @@
text: "否",
className: "btn-danger",
onclick: function () {
$(dialog).dialog("hide");
dialog.dialog("hide");
}
}, {
text: "是",
className: "btn-success",
onclick: function () {
var param = {
cloudName: cloudName,
}
$.ajax({
type: 'post',
url: 'switchConf',
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 = contextPath + "/luaswitch/toLuaSwitch";
}
}]
});
},
error: function (data) {
layer.msg("异常", {icon: 2});
}
});
cloudName: cloudName
};
sendAjax("post", "viewToChangeLuaConf", param, "text", viewToChangeSuccess, errorFunc);
dialog.dialog("hide");
}
}]
});
}
/**
* 打开对话框,展示切换后的配置
* @param resp 切换后的响应数据
*/
function viewToChangeSuccess(resp) {
var data = JSON.parse(resp);
var dialog = $("<div>").appendTo($("body"));
dialog.dialog({
title: "切换结果",
backdrop: "static",
content: "<pre>" + data.data + "</pre>",
buttons: [{
text: "否",
className: "btn-danger",
onclick: function () {
dialog.dialog("hide");
}
}, {
text: "确定",
className: "btn-success",
onclick: function () {
sendAjax("post", "switchConf", {}, "text", switchSuccess, errorFunc);
dialog.dialog("hide");
toWait();
}
}]
}).find(".modal-body").css({
height: "650px"
});
}
/**
* 切换配置成功,跳转回首页
*/
function switchSuccess() {
window.location.href = contextPath + "/luaswitch/toLuaSwitch";
}
/**
* 发送ajax请求
* @param type 请求方法post/get
* @param url 请求url
* @param data 请求参数数据
* @param dataType 请求参数类型
* @param success 请求成功回调函数
* @param error 请求异常回调函数
*/
function sendAjax(type, url, data, dataType, success, error) {
$.ajax({
type: type,
url: url,
data: data,
dataType: dataType,
success: success,
error: error
});
}
/**
* ajax请求异常回调函数
*/
function errorFunc() {
layer.msg("Token异常", {icon: 2});
}
/**
* 打开等待对话框
*/
function toWait() {
$("<div>").appendTo($("body")).dialog({
title: "提示",
backdrop: "static",
content: "正在切换,请稍后..."
});
}
</script>
... ...
... ... @@ -23,14 +23,14 @@
<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"></script>
<script src="<%=basePath %>js/bootstrap.min.js"></script>
<script src="<%=basePath %>js/typeahead-bs2.min.js"></script>
<script src="<%=basePath %>js/ace-elements.min.js"></script>
<script src="<%=basePath %>js/ace.min.js"></script>
<script src="<%=basePath %>script/nginx_switch.js"></script>
<script src="<%=basePath %>js/layer/layer.js"></script>
<script src="<%=basePath %>/js/unicorn.js"></script>
<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 %>script/nginx_switch.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"
... ... @@ -51,8 +51,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"></script>
<script>
<script src="<%=basePath %>js/jquery.toaster.js" type="text/javascript"></script>
<script type="text/javascript">
var contextPath = '<%=basePath %>';
</script>
<title>YOHO!运维</title>
... ... @@ -65,8 +65,8 @@
<!-- 右侧具体内容 -->
<div id="content">
<div id="breadcrumb">
<a href="#" title="Go to Home" class="tip-bottom"><i
class="icon-home"></i> Home</a> <a href="#" class="current">nginx切换</a>
<a href="#" title="Go to Home" class="tip-bottom"><em
class="icon-home"></em> Home</a> <a href="#" class="current">nginx切换</a>
</div>
<div class="row">
... ... @@ -79,14 +79,14 @@
<ul class="nav nav-tabs" id="myTab">
<li class="active" style="width: 110px">
<a data-toggle="tab" href="#home">
<i class="green icon-cloud bigger-110"></i>
<em class="green icon-cloud bigger-110"></em>
亚马逊
</a>
</li>
<li style="width: 110px">
<a data-toggle="tab" href="#profile">
<i class="green icon-cloud bigger-110"></i>
<em class="green icon-cloud bigger-110"></em>
腾讯云
</a>
</li>
... ... @@ -110,7 +110,7 @@
<dd>
<ul>
<c:forEach items="${map.server}" var="server">
<li>${server}</li>
<li class="aws${map.name}Ips">${server}</li>
</c:forEach>
</ul>
</dd>
... ... @@ -124,28 +124,29 @@
<button class="btn btn-sm ">
线上切换
</button>
<button class="btn btn-sm btn-success" onclick="initSwitch('aws','qcloud')">
<i class="icon-cogs bigger-110"></i>
<button class="btn btn-sm btn-success"
onclick="initSwitch('aws','qcloud','online')">
<em class="icon-cogs bigger-110"></em>
切向qcloud
</button>
<button class="btn btn-sm btn-success" onclick="initSwitch('aws','aws')">
<i class="icon-cogs bigger-110"></i>
<button class="btn btn-sm btn-success" onclick="initSwitch('aws','aws','online')">
<em class="icon-cogs bigger-110"></em>
切向aws
</button><br><br>
</button>
<br><br>
<button class="btn btn-sm ">
灰度切换
</button>
<button class="btn btn-sm btn-success" onclick="initSwitch('gray','qcloud')">
<i class="icon-cogs bigger-110"></i>
<button class="btn btn-sm btn-success" onclick="initSwitch('aws','qcloud','gray')">
<em class="icon-cogs bigger-110"></em>
切向qcloud
</button>
</button>
<button class="btn btn-sm btn-success" onclick="initSwitch('gray','aws')">
<i class="icon-cogs bigger-110"></i>
<button class="btn btn-sm btn-success" onclick="initSwitch('aws','aws','gray')">
<em class="icon-cogs bigger-110"></em>
切向aws
</button>
<button class="btn btn-sm btn-success" onclick="initSwitch('gray','gray')">
<i class="icon-cogs bigger-110"></i>
<button class="btn btn-sm btn-success" onclick="initSwitch('aws','gray','gray')">
<em class="icon-cogs bigger-110"></em>
切向gray
</button>
</div>
... ... @@ -167,7 +168,7 @@
<dd>
<ul>
<c:forEach items="${map.server}" var="server">
<li>${server}</li>
<li class="qcloud${map.name}Ips">${server}</li>
</c:forEach>
</ul>
</dd>
... ... @@ -180,28 +181,32 @@
<button class="btn btn-sm ">
线上切换
</button>
<button class="btn btn-sm btn-success" onclick="initSwitch('qcloud','qcloud')">
<i class="icon-cogs bigger-110"></i>
<button class="btn btn-sm btn-success"
onclick="initSwitch('qcloud','qcloud','online')">
<em class="icon-cogs bigger-110"></em>
切向qcloud
</button>
<button class="btn btn-sm btn-success" onclick="initSwitch('qcloud','aws')">
<i class="icon-cogs bigger-110"></i>
<button class="btn btn-sm btn-success"
onclick="initSwitch('qcloud','aws','online')">
<em class="icon-cogs bigger-110"></em>
切向aws
</button>
<br/><br/>
<button class="btn btn-sm ">
灰度切换
</button>&nbsp;&nbsp;
<button class="btn btn-sm btn-success" onclick="initSwitch('gray','qcloud')">
<i class="icon-cogs bigger-110"></i>
</button>
&nbsp;&nbsp;
<button class="btn btn-sm btn-success"
onclick="initSwitch('qcloud','qcloud','gray')">
<em class="icon-cogs bigger-110"></em>
切向qcloud
</button>
<button class="btn btn-sm btn-success" onclick="initSwitch('gray','aws')">
<i class="icon-cogs bigger-110"></i>
<button class="btn btn-sm btn-success" onclick="initSwitch('qcloud','aws','gray')">
<em class="icon-cogs bigger-110"></em>
切向aws
</button>
<button class="btn btn-sm btn-success" onclick="initSwitch('gray','gray')">
<i class="icon-cogs bigger-110"></i>
<button class="btn btn-sm btn-success" onclick="initSwitch('qcloud','gray','gray')">
<em class="icon-cogs bigger-110"></em>
切向gray
</button>
... ... @@ -217,7 +222,6 @@
<div class="space"></div>
<script type="text/javascript">
var $path_assets = "assets";//this will be used in gritter alerts containing images
</script>
... ... @@ -228,10 +232,12 @@
</div>
<script src="<%=basePath %>script/common/genarate_left_panel.js"></script>
<script>
<script src="<%=basePath %>script/common/genarate_left_panel.js" type="text/javascript"></script>
<script type="text/javascript">
$("#li_switch").addClass("active open");
$("#li_nginxswitch").addClass("active");
</script>
</body>
</html>
... ...
... ... @@ -22,8 +22,10 @@ innerHTML += "<li id='li_newRedisMonitor'><a id='li_newRedisMonitor_a' href=''><
innerHTML += "<li id='li_newRedisMonitor'><a id='li_memcachedMonitor_a' href=''><i class='icon icon-th'></i> <span>Memcached监控</span></a></li>";
innerHTML += "<li id='li_nginxview'><a id='li_nginxview_a' href=''><i class='icon icon-th'></i> <span>Nginx监控</span></a></li>";
innerHTML += "<li id='li_dns_monitor'><a id='li_dns_monitor_a' href=''><i class='icon icon-th'></i> <span>DNS反劫持监控</span></a></li>";
innerHTML += "<li id='li_monit'><a id='li_monit_a' href=''><i class='icon icon-th'></i> <span>Monit监控</span></a></li>";
innerHTML += "</ul></li>";
/*主机管理*/
innerHTML += "<li class='submenu' id='li_host'><a id='li_host_a' href='#'><i class='icon icon-th-list'></i> <span>主机管理</span><span class='label'>3</span></a><ul>";
innerHTML += "<li id='li_hostGroupList'><a id='li_hostGroupList_a' href=''><i class='icon icon-th'></i> <span>标签管理</span></a></li>";
... ... @@ -46,15 +48,16 @@ innerHTML += "<li id='li_works'><a id='li_works_a' href=''><i class='icon icon-t
innerHTML += "</ul></li>";
/*配置管理*/
innerHTML += "<li class='submenu' id='li_config'><a id='li_config_a' href='#'><i class='icon icon-th-list'></i> <span>配置管理</span><span class='label'>4</span></a><ul>";
innerHTML += "<li class='submenu' id='li_config'><a id='li_config_a' href='#'><i class='icon icon-th-list'></i> <span>配置管理</span><span class='label'>5</span></a><ul>";
innerHTML += "<li id='li_zkMonitor'><a id='li_zkMonitor_a' href=''><i class='icon icon-th'></i> <span>ZK配置管理</span></a></li>";
innerHTML += "<li id='li_nginxSync'><a id='li_nginxSync_a' href=''><i class='icon icon-th'></i> <span>Nginx配置同步</span></a></li>";
innerHTML += "<li id='li_degrade_info'><a id='li_degrade_info_a' href=''><i class='icon icon-th'></i> <span>降级服务配置</span></a></li>";
innerHTML += "<li id='li_aws_ebs'><a id='li_aws_ebs_a' href=''><i class='icon icon-th'></i> <span>AWS_EBS镜像任务</span></a></li>";
innerHTML += "<li id='li_ips_compare'><a id='li_ips_compare_a' href=''><i class='icon icon-th'></i> <span>在线服务Ip配置对比</span></a></li>";
innerHTML += "</ul></li>";
/*project*/
innerHTML += "<li class='submenu' id='li_project'><a id='li_project_a' href='#'><i class='icon icon-th-list'></i> <span>项目发布</span><span class='label'>4</span></a><ul>";
innerHTML += "<li class='submenu' id='li_project'><a id='li_project_a' href='#'><i class='icon icon-th-list'></i> <span>项目发布</span><span class='label'>5</span></a><ul>";
innerHTML += "<li id='li_projectRelease'><a id='li_projectRelease_a' href=''><i class='icon icon-th'></i> <span>项目发布</span></a></li>";
innerHTML += "<li id='li_om'><a id='li_om_a' href=''><i class='icon icon-th'></i> <span>OM发布</span></a></li>";
innerHTML += "<li id='li_om_new'><a id='li_om_new_a' href=''><i class='icon icon-th'></i> <span>OM_New发布</span></a></li>";
... ... @@ -63,10 +66,13 @@ innerHTML += "<li id='li_projectHistory'><a id='li_projectHistory_a' href=''><i
innerHTML += "</ul></li>";
/*switch*/
innerHTML += "<li class='submenu' id='li_switch'><a id='li_switch_a' href='#'><i class='icon icon-th-list'></i> <span>关键切换</span><span class='label'>3</span></a>";
innerHTML += "<li class='submenu' id='li_switch'><a id='li_switch_a' href='#'><i class='icon icon-th-list'></i> <span>关键切换</span><span class='label'>6</span></a>";
innerHTML += "<ul><li id='li_nginxswitch'><a id='li_nginxswitch_a' href=''>nginx切换</a></li>";
innerHTML += "<li id='li_luaswitch'><a id='li_luaswitch_a' href='#'>LUA切换</a></li>";
innerHTML += "<li id='li_limitswitch'><a id='li_limitswitch_a' href='#'>限流调整</a></li>";
innerHTML += "<li id='li_lbswitch'><a id='li_lbswitch_a' href='#'>直连开关</a></li>";
innerHTML += "<li id='li_javarestart'><a id='li_javarestart_a' href='#'>java重启</a></li>";
innerHTML += "<li id='li_centerswitch'><a id='li_centerswitch_a' href='#'>双中心切换</a></li>";
innerHTML += "</ul></li>";
/*manage*/
... ... @@ -123,6 +129,11 @@ document.getElementById("li_om_new_a").setAttribute("href", path + "/project/toN
document.getElementById("li_newRedisMonitor_a").setAttribute("href", path + "/redisMonitor/toNewRedis");
document.getElementById("li_memcachedMonitor_a").setAttribute("href", path + "/memcachedMonitor/toMemcached");
document.getElementById("li_javarestart_a").setAttribute("href", path + "/javaRestart/toJavaRestart");
document.getElementById("li_centerswitch_a").setAttribute("href", path + "/centerSwitch/toCenterSwitch");
document.getElementById("li_ips_compare_a").setAttribute("href", path + "/compareIps/toCompareIps");
document.getElementById("li_limitswitch_a").setAttribute("href", path + "/limitSwitch/toLimitSwitch");
document.getElementById("li_lbswitch_a").setAttribute("href", path + "/lbSwitch/toLbSwitch");
document.getElementById("li_monit_a").setAttribute("href",path+"/monit/toMonit");
function getUrlBasePath() {
var location = ( window.location + '').split('/');
... ...
//加载页面 初始化页面
queryAllMonitorService();
//设置定时器,一分钟刷新一次页面
timename = setInterval("queryAllMonitorService();", 60 * 1000);
//查询monitor所有服务信息,并且刷新页面展示
function queryAllMonitorService() {
$.ajax({
"url": "/monit/service/all",
"type": 'GET',
"dataType": "json",
success: function (response) {
console.log(response.data);
genarateMonitorDashboard(response.data);
},
error: function (response) {
localAlert("Error", "获取服务失败,请稍后重试。");
return;
}
});
}
//生成monitor dashboard展示页面
function genarateMonitorDashboard(data) {
var innerHTML = "";
for (var i in data) {
var info = data[i];
console.log("monitorId: " + info.monitorId);
innerHTML += "<div class='blanksegmentation'></div>";
innerHTML += "<div class='panel panel-default'>";
//genarate panel header httpInfo
innerHTML += genarateHttpInfoDiv(info.httpInfo, info.monitorId);
//genarate panel body serviceInfos events
innerHTML += genarateServiceInfosTables(info.servicesInfo, info.eventsInfo, info.monitorId);
innerHTML += "</div>";
}
document.getElementById("body_div").innerHTML = innerHTML;
}
//HttpInfo panel header
function genarateHttpInfoDiv(httpInfo, monitorId) {
console.log("httpInfo: " + httpInfo);
var innerHTML = "<div class='panel-heading'>";
innerHTML += genarateSpanText("address: " + httpInfo.address, 20);
innerHTML += genarateSpanText("port: " + httpInfo.port, 20);
innerHTML += genarateSpanText("ssl: " + httpInfo.ssl, 20);
innerHTML += "<a href=\"javascript:deleteBtnOnClicked(\'" + monitorId + "\')\"><span class='glyphicon glyphicon-trash' style='color: #FF0000;font-size:18px'></span></a>";
innerHTML += "</div>";
return innerHTML;
}
//serviceInfos Table events Table
function genarateServiceInfosTables(serviceInfos, events, monitorId) {
var innerHTML = "<div class='panel-body'>";
//genarate serviceInfo table<th>
innerHTML += "<table class='table table-bordered mb30'>";
innerHTML += "<thead><tr><th style='width: 25%;'>serviceName</th><th style='width: 20%;'>serviceStatus</th><th style='width: 10%;'>system</th>";
innerHTML += "<th style='width: 15%;'>start</th><th style='width: 15%;'>stop</th><th style='width: 15%;'>restart</th></tr></thead><tbody>";
//genarate serviceInfo table<tr>
for (var i in serviceInfos) {
var service = serviceInfos[i];
innerHTML += "<tr>"
innerHTML += "<td>" + service.serviceName + "</td>";
//status == NORMAL status font turn green, start button unclickable, and the others potition, turn red stop button unclickable
if (serviceInfos[i].serviceStatus == "NORMAL") {
innerHTML += "<td style='color:#008000;font-weight:bold'>" + service.serviceStatus + "</td>";
innerHTML += "<td>" + service.system + "</td>";
innerHTML += "<td><button class='btn btn-success btn-rounded' onclick=\"actionBtnOnClicked('" + monitorId + "','" + service.serviceName + "', 'start')\">Start</button></td>";
innerHTML += "<td><button class='btn btn-danger btn-rounded' onclick=\"actionBtnOnClicked('" + monitorId + "','" + service.serviceName + "', 'stop')\">Stop</button></td>";
innerHTML += "<td><button class='btn btn-success btn-rounded' onclick=\"actionBtnOnClicked('" + monitorId + "','" + service.serviceName + "', 'restart')\">Restart</button></td>";
} else {
innerHTML += "<td style='color:#FF0000;font-weight:bold'>" + serviceInfos[i].serviceStatus + "</td>";
innerHTML += "<td>" + serviceInfos[i].system + "</td>";
innerHTML += "<td><button class='btn btn-success btn-rounded' onclick=\"actionBtnOnClicked('" + monitorId + "','" + service.serviceName + "', 'start')\">Start</button></td>";
innerHTML += "<td><button class='btn btn-danger btn-rounded' onclick=\"actionBtnOnClicked('" + monitorId + "','" + service.serviceName + "', 'stop')\">Stop</button></td>";
innerHTML += "<td><button class='btn btn-success btn-rounded' onclick=\"actionBtnOnClicked('" + monitorId + "','" + service.serviceName + "', 'restart')\">Restart</button></td>";
}
innerHTML += "</tr>";
}
innerHTML += "</tbody></table>";
//genarate events table<th>
innerHTML += "<table class='table table-bordered mb30'>";
innerHTML += "<thead><tr><th>collected_sec</th><th>service</th><th>type</th>";
innerHTML += "<th>message</th></tr></thead><tbody>";
for (var i in events) {
var event = events[i];
innerHTML += "<tr>"
innerHTML += "<td>" + event.collected_sec + "</td>";
innerHTML += "<td>" + event.service + "</td>";
innerHTML += "<td>" + event.type + "</td>";
innerHTML += "<td>" + event.message + "</td>";
innerHTML += "</tr>";
}
innerHTML += "</tbody></table>"
innerHTML += "</div>";
return innerHTML;
}
//生成data的json字符串
function buildBody(monitorId, serviceName, actionType) {
var actionItem = new Object();
actionItem['hostId'] = monitorId;
actionItem['service'] = serviceName;
actionItem['action'] = actionType;
var actions = new Array();
actions.push(actionItem);
var body = new Object();
body['actions'] = actions;
return JSON.stringify(body);
}
//启停按钮的动作方法
function actionBtnOnClicked(monitorId, serviceName, actionType) {
var body = buildBody(monitorId, serviceName, actionType);
console.log(body);
if (actionType == "delete") {
deleteBtnOnClicked(monitorId);
return;
}
$.ajax({
"url": "/monit/hosts/oneAction",
"type": 'POST',
"dataType": "json",
"data": {
hostId: monitorId,
service: serviceName,
action: actionType
},
success: function (resp) {
console.log(resp);
queryAllMonitorService();
},
error: function (e) {
localAlert("Error", "操作失败:" + e.data);
queryAllMonitorService();
}
});
}
//delete按钮的动作方法
function deleteBtnOnClicked(monitorId) {
var url = "/monit/hosts/delete/" + monitorId;
console.log(url)
$.ajax({
"url": url,
"type": 'POST',
"dataType": "json",
success: function (data) {
queryAllMonitorService();
},
error: function (e) {
queryAllMonitorService();
}
});
}
function genarateSpanText(text, size) {
return "<span style='font-size:" + size + "px;margin-right:20px'>" + text + "</span>";
}
\ No newline at end of file
... ...
$(function () {
$("#validateTokenRltInfo").hide();
});
function initSwitch(cloudName, target) {
/**
* "切向*"按钮点击事件,打开确认操作对话框
* @param cloudName 源中心名称
* @param target 目标中心名称
* @param onlineOrGray 切换:线上/灰度
*/
function initSwitch(cloudName, target, onlineOrGray) {
var arr = getNoChangeIpArr(cloudName, onlineOrGray);
if (undefined === arr || null === arr || 0 === arr.length) {
prompt("提示", "无可切换的gateway!");
return;
}
var dialog = $("<div>").appendTo($("body"));
dialog.dialog({
title: "你确定切换吗",
backdrop: "static",
content: "你确定要将" + cloudName + "上的流量切向" + target + "吗?",
content: "你确定要将" + cloudName + "上的" + onlineOrGray + "流量切向" + target + "吗?",
buttons: [{
text: "否",
className: "btn-danger",
onclick: function () {
$(dialog).dialog("hide");
dialog.dialog("hide");
}
}, {
text: "是",
... ... @@ -20,38 +31,132 @@ 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);
dialog.dialog("hide");
}
}]
});
}
/**
* 打开对话框,展示切换后的配置
* @param resp 切换后的响应数据
*/
function viewToChangeSuccess(resp) {
var data = JSON.parse(resp);
var dialog = $("<div>").appendTo($("body"));
dialog.dialog({
title: "切换结果",
backdrop: "static",
content: "<pre>" + data.data.result + "</pre>",
buttons: [{
text: "否",
className: "btn-danger",
onclick: function () {
dialog.dialog("hide");
}
}, {
text: "确定",
className: "btn-success",
onclick: function () {
var param = {
cloudName: data.data.cloudName
};
sendAjax("post", "switchNginxConf", param, "text", switchSuccess, errorFunc);
dialog.dialog("hide");
toWait();
}
}]
}).find(".modal-body").css({
height: "650px"
});
}
/**
* 切换配置成功,跳转回首页
*/
function switchSuccess() {
window.location.href = getUrlBasePath() + "/nginxswitch/toNginxSwitch";
}
/**
* 获取不切换的服务器ip(由于线上和灰度同在nginx.conf配置中,模板须设计两个占位符,所以切换某一处时,须将不切换的ip提交到后台)
* @param cloudName 切换的中心aws/qcloud
* @param onlineOrGray 切换线上/灰度
* @returns {Array} 不切换服务器的ip列表
*/
function getNoChangeIpArr(cloudName, onlineOrGray) {
var list = $("." + cloudName + ("online" === onlineOrGray ? "grayapigateway" : "apigateway") + "Ips");
if (undefined === list || null === list || 0 === list.length) {
return [];
}
var result = [];
list.each(function () {
result.push($(this).text().split(":")[0]);
});
return result;
}
/**
* 提示函数
* @param title 标题
* @param content 内容
*/
function prompt(title, content) {
var dialog = $("<div>").appendTo($("body"));
dialog.dialog({
title: title,
backdrop: "static",
content: content,
buttons: [{
text: "确定",
className: "btn-success",
onclick: function () {
dialog.dialog("hide");
}
}]
});
}
/**
* 发送ajax请求
* @param type 请求方法post/get
* @param url 请求url
* @param data 请求参数数据
* @param dataType 请求参数类型
* @param success 请求成功回调函数
* @param error 请求异常回调函数
*/
function sendAjax(type, url, data, dataType, success, error) {
$.ajax({
type: type,
url: url,
data: data,
dataType: dataType,
success: success,
error: error
});
}
/**
* ajax请求异常回调函数
*/
function errorFunc() {
layer.msg("Token异常", {icon: 2});
}
/**
* 打开等待对话框
*/
function toWait() {
$("<div>").appendTo($("body")).dialog({
title: "提示",
backdrop: "static",
content: "正在切换,请稍后..."
});
}
\ No newline at end of file
... ...
jQuery(document).ready(function () {
getProjects();
$("#cancel-btn").hide();
});
/**
... ... @@ -222,127 +221,6 @@ function comfirmSubmit() {
}
}
function projectbuild() {
var operate = $("input[name='operate_name']").val();
var projects = $("input[name='project_name']").val();
var environment = $("input[name='environment_name']").val();
var branch = $("input[name='branch_name']").val();
var rollbackfile = $("input[name='rollbackfile_name']").val();
$('#confirmSubmitDivId').modal('hide');
$("#submit-btn").hide();
$("#cancel-btn").show();
$("#resultArea").val("");
document.getElementById("task-info-div").innerHTML = "<strong>任务执行中,请不要关闭页面...</strong>";
var jsondata = {
"project": projects,
"environment": environment,
"operate": operate,
"branch": branch,
"rollbackfile": rollbackfile
};
$.ajax({
url: 'build',
type: 'POST',
dataType: 'json',
contentType: "application/json",
data: JSON.stringify(jsondata),
success: function (data2) {
var obj = eval("(" + data2 + ")");
var projectOrder = obj.data.projectOrder;
var projectOrders = projectOrder.split(",");
$("#currentproject").val(projectOrders[0]);
$("#messageid").val(obj.data.id);
// 展示执行顺序
var HTML = "";
for (var i = 0; i < projectOrders.length; i++) {
var p = projectOrders[i];
HTML += "<div class='ckbox ckbox-danger' id='show-" + p + "-div' style='display: inline'>";
HTML += " <input name='show-" + p + "' type='checkbox' id='show-" + p + "' value='" + p + "' checked='checked' disabled/>";
HTML += "<label for='show-" + p + "' style='width: 200px'>" + p + "</label></div>";
if ((i + 1) % 4 == 0) {
HTML += "</br>";
}
}
document.getElementById("show-project-div").innerHTML = HTML;
$("#show-" + projectOrders[0] + "-div").attr("class", "ckbox ckbox-warning");
var interval = setInterval(function () {//查后台,展示数据
var cproject = $("#currentproject").val();
$.ajax({
url: 'getbuildmsg?messageid=' + obj.data.id + '&project=' + cproject,
type: 'POST',
dataType: 'json',
success: function (data3) {
var obj2 = eval("(" + data3 + ")");
var messagedata = obj2.data;
var currproject = messagedata.currentProject;
if (currproject != cproject) {
$("#currentproject").val(currproject);//更换当前的项目
$("#show-" + cproject + "-div").attr("class", "ckbox ckbox-success");
$("#show-" + currproject + "-div").attr("class", "ckbox ckbox-warning");
$("#resultArea").val("")
}
if (messagedata.message != "") {
var d = $("#resultArea").val();
$("#resultArea").val(d + messagedata.message);
var scrollTop = $("#resultArea")[0].scrollHeight;
$("#resultArea").scrollTop(scrollTop);
}
//code为2 ,则结束
var code = obj2.code;
var message = obj2.message;
if (code == 2) {
$("#submit-btn").show();
$("#cancel-btn").hide();
$("#show-" + cproject + "-div").attr("class", "ckbox ckbox-success");
document.getElementById("task-info-div").innerHTML = "<strong>'"+ message +"'</strong>";
clearInterval(interval);
}
},
error: function (e) {
alert("从后台获取数据出错");
}
});
}, 3000);
},
error: function (e) {
alert("从后台获取数据出错");
}
});
}
/**
* 取消
*/
function cancelBuild() {
$("#submit-btn").show();
$("#cancel-btn").hide();
var messageid = $("#messageid").val();
if (messageid != null && messageid != "") {
var jsondata = {"id": messageid};
$.ajax({
url: 'cancelBuild',
type: 'POST',
dataType: 'json',
data: jsondata,
success: function (data) {
if (data == "success") {
} else {
alert(data)
}
},
error: function (e) {
}
});
}
}
function getRollbackList() {
var project = $("input[name='project']:checked").val();
var environment = $("input[name='environments']:checked").val();
... ... @@ -401,43 +279,6 @@ function branchdefault() {
}
//function getmessage() {
// var messageid = $("#messageid").val();
// if(messageid != null && messageid != ""){
// var jsondata = {"messageid":messageid};
// $.ajax({
// url : 'getbuildmsg',
// type : 'POST',
// dataType : 'json',
// data : jsondata,
// success : function(data) {
// var d= $("#resultArea").val();
// $("#resultArea").val(d+data);
// var scrollTop = $("#resultArea")[0].scrollHeight;
// $("#resultArea").scrollTop(scrollTop);
//
// if(data.indexOf("Process Cancel") != -1){
// $("#messageid").val("");
// $("#submit-btn").show();
// $("#cancel-btn").hide();
// $("#exe_div").html("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;任务已经取消");
// return false;
// }
//
// if(data.indexOf("@@@@@@@@@@@@@@") != -1){
// $("#messageid").val("");
// $("#exe_div").html("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;任务执行结束");
// }
//
// },
// error : function(e) {
// }
// });
// }
// return false;
//}
... ...