package edu.sjtu.infosec.ismp.manager.SCM.web.actions; import java.io.PrintWriter; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.BeanUtils; import org.apache.log4j.Logger; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.actions.DispatchAction; import org.infosec.ismp.manager.rmi.comm.model.SystemModelInfo; import org.infosec.ismp.manager.rmi.lm.pfLog.model.SystemLog; import org.infosec.ismp.manager.rmi.scm.service.ServiceMonitor; import org.infosec.ismp.manager.rmi.tm.manager.model.NodeEntity; import org.infosec.ismp.manager.rmi.tm.manager.service.TopoWebService; import edu.sjtu.infosec.ismp.manager.LM.pfLog.service.SystemLogService; import edu.sjtu.infosec.ismp.manager.SCM.comm.Constants; import edu.sjtu.infosec.ismp.manager.SCM.model.Monitor; import edu.sjtu.infosec.ismp.manager.SCM.service.MonitorService; import edu.sjtu.infosec.ismp.manager.SCM.web.form.MonitorForm; import edu.sjtu.infosec.ismp.manager.SYSM.user.self.comm.SecurityUserHolder; import edu.sjtu.infosec.ismp.manager.SYSM.user.self.service.DomainService; import edu.sjtu.infosec.ismp.security.Domain; import edu.sjtu.infosec.ismp.security.OperatorDetails; import edu.sjtu.infosec.ismp.security.Role; public class MonitorAction extends DispatchAction { private static Logger logger = Logger.getLogger(MonitorAction.class); /** * 注入 service 接口 */ private MonitorService monitorService; private DomainService domainService; private ServiceMonitor monitorServiceClient; private TopoWebService topoWebService; private SystemLogService systemLogService; public void setMonitorService(MonitorService monitorService) { this.monitorService = monitorService; } public void setDomainService(DomainService domainService) { this.domainService = domainService; } public void setMonitorServiceClient(ServiceMonitor monitorServiceClient) { this.monitorServiceClient = monitorServiceClient; } public void setTopoWebService(TopoWebService topoWebService) { this.topoWebService = topoWebService; } public void setSystemLogService(SystemLogService systemLogService) { this.systemLogService = systemLogService; } public ActionForward changeDisplay(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { form.reset(mapping, request); OperatorDetails user = SecurityUserHolder.getCurrentUser();///获取当前用户 List<Domain> userDomainList = new ArrayList<Domain>(); if(null != user){ userDomainList = user.getDomainList(); }else{ userDomainList = null; } String type = request.getParameter("type"); request.setAttribute("monitorType", type); request.setAttribute("userDomainList", userDomainList); return mapping.findForward("monitorInput"); } ///点击左导航(服务检测) public ActionForward getMonitorList(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { form.reset(mapping, request); int currPage = 1; Double totalPage = 0d; int totalNum = 0; int startResult = 0; int maxResult = 5; try { String isAll = (request.getParameter("isAll") == null) ? "0" : request.getParameter("isAll"); OperatorDetails user = SecurityUserHolder.getCurrentUser(); List<Domain> userDomainList = new ArrayList<Domain>(); if(null != user){ userDomainList = user.getDomainList(); }else{ userDomainList = null; } //分页定义的相关的基本信息 String cp = (request.getParameter("currPage") == null) ? "1" : request.getParameter("currPage"); if (cp != null && !cp.equals("")) { currPage = Integer.parseInt(cp); } startResult = (currPage - 1) * maxResult; if(startResult < 0){ startResult = 0; } //数据相关的基本信息 List<Monitor> monitorList = new ArrayList<Monitor>(); if(isAll.equals("1")){ request.setAttribute("isAll", isAll); monitorList = monitorService.getMonitorList(startResult, maxResult); }else{ monitorList = monitorService.getMonitorListByDomain(userDomainList, startResult, maxResult); } List<String> nodeList = new ArrayList<String>(); if(null != monitorList){ for(Monitor monitor:monitorList){ nodeList.add(monitor.getNodeId()); } } request.setAttribute("nodeIdList", nodeList); //分页定义的相关的基本信息 if(isAll.equals("1")){ totalNum = monitorService.getCount(); }else{ totalNum = monitorService.getCountByDomain(userDomainList); } totalPage = Math.ceil((double) totalNum / maxResult); if (totalPage > 0 && currPage <= 0) { currPage = 1; } request.setAttribute("monitorList", monitorList); } catch (Exception e) { logger.debug("机房列表出错啦!"); e.printStackTrace(); } request.setAttribute("currPage", currPage); request.setAttribute("totalPage", totalPage.intValue()); return mapping.findForward("monitorList"); } public ActionForward monitorInput(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)throws Exception { saveToken(request);///创建一个新的令牌值,将其保存在当前的会话(session)范围内 MonitorForm monitorForm = (MonitorForm) form; monitorForm.reset(); String isAll = request.getParameter("isAll"); String currPage = request.getParameter("currPage"); String id = request.getParameter("id"); if(null != id){///id不为空说明是更新前 Monitor monitor = monitorService.getMonitorById(Integer.parseInt(id)); if(null != monitor){ request.setAttribute("monitorType", monitor.getType()); request.setAttribute("monitor", monitor); } }else{///id为空说明是增加前 request.setAttribute("monitorType", "UDP");///默认首先显示的是UDP } List<Domain> userDomainList = SecurityUserHolder.getCurrentUser().getDomainList(); request.setAttribute("userDomainList", userDomainList); request.setAttribute("isAll", isAll); request.setAttribute("currPage", currPage); return mapping.findForward("monitorInput"); } ///增加或更新监控机 public ActionForward monitorSaveOrUpdate(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { request.setAttribute("isAll", request.getParameter("isAll")); request.setAttribute("currPage", request.getParameter("currPage")); if(isTokenValid(request, true)){///检查令牌,防止重复提交 Monitor monitor = new Monitor(); BeanUtils.copyProperties(monitor, (MonitorForm)form); MonitorForm monitorForm = (MonitorForm)form; if(null != monitorForm.getDomainId() && !"".equals(monitorForm.getDomainId())){ Domain domain = domainService.findById(monitorForm.getDomainId()); monitor.setDomain(domain); } String[] weekcheck = monitorForm.getWeekcheck();///获取周检测取值 StringBuffer tempweekcheck = new StringBuffer(); if(null != weekcheck && weekcheck.length > 0){///解析数组,将周检测时间组成字符串,用","分隔入库。 for (int i = 0; i < weekcheck.length; i++) { if(i != (weekcheck.length -1) ){ tempweekcheck.append(weekcheck[i] + ","); }else{ tempweekcheck.append(weekcheck[i]); } } monitor.setWeekcheck(tempweekcheck.toString()); } String flag = "update"; if(null == monitor.getId() || monitor.getId() <= 0){///增加 // monitor.setId(null); flag = "add"; monitor.setCreateTime(new Timestamp(new Date().getTime()));///创建时间 //从后台获取nodeId NodeEntity nodeEntity = new NodeEntity(); nodeEntity.setNodeStyle(1); topoWebService.saveOrUpdateNode(nodeEntity); String nodeId = nodeEntity.getNodeId(); nodeId = nodeId.trim(); monitor.setNodeId(nodeId);///从拓扑那里取得 HashMap<String, String> hashMap = new HashMap<String, String>(); String tempSubType = monitorForm.getSubType().toLowerCase(); if("dns".equals(tempSubType)){ hashMap.put("port", monitorForm.getPort()); hashMap.put("lookup", monitorForm.getIp()); }else if("ftp".equals(tempSubType)){ hashMap.put("port", monitorForm.getPort()); hashMap.put("userid", monitorForm.getUserid()); hashMap.put("password", monitorForm.getPassword()); }else if("http".equals(tempSubType)){ hashMap.put("port", monitorForm.getPort()); hashMap.put("url", monitorForm.getUrl()); }else if("https".equals(tempSubType)){ hashMap.put("port", monitorForm.getPort()); hashMap.put("url", monitorForm.getUrl()); }else if("icmp".equals(tempSubType)){ hashMap.put("retry", monitorForm.getRetry() + ""); hashMap.put("timeout", monitorForm.getTimeout()*1000 + ""); }else if("imap".equals(tempSubType)){ hashMap.put("port", monitorForm.getPort()); hashMap.put("retry", monitorForm.getRetry() + ""); hashMap.put("timeout", monitorForm.getTimeout()*1000 + ""); }else if("smtp".equals(tempSubType)){ hashMap.put("port", monitorForm.getPort()); hashMap.put("retry", monitorForm.getRetry() + ""); hashMap.put("timeout", monitorForm.getTimeout()*1000 + ""); }else if("pop3".equals(tempSubType)){ hashMap.put("port", monitorForm.getPort()); hashMap.put("retry", monitorForm.getRetry() + ""); hashMap.put("timeout", monitorForm.getTimeout()*1000 + ""); } try { // public void registerServiceMonitor(String domain,String nodeid,String serviceType, // String ipAddr,long interval,Map<String,String> parameters); /** 调用后台接口注册监控项 **/ if(!"smtp".equals(tempSubType) && !"imap".equals(tempSubType) && !"pop3".equals(tempSubType) ){ // monitorServiceClient.registerServiceMonitor(monitorForm.getDomainId()+"", nodeId,monitorForm.getSubType().toLowerCase(), // monitorForm.getIp(), monitorForm.getIntervalTime()*1000, hashMap); monitorServiceClient.registerServiceMonitor(monitorForm.getDomainId()+"", nodeId,monitorForm.getSubType().toLowerCase(), monitorForm.getIp(), monitorForm.getIntervalTime()*1000, hashMap); }else { monitorServiceClient.registerServiceMonitor(monitorForm.getDomainId()+"", nodeId,monitorForm.getSubType().toLowerCase(), monitorForm.getUrl(), monitorForm.getIntervalTime()*1000, hashMap); // monitorServiceClient.registerServiceMonitor(monitorForm.getDomainId()+"", nodeId,monitorForm.getSubType().toLowerCase(), // monitorForm.getUrl(), monitorForm.getIntervalTime()*1000, hashMap); } // else if("pop3".equals(tempSubType) ){ // monitorServiceClient.registerServiceMonitor("testDomain", nodeId,monitorForm.getSubType().toLowerCase(), // monitorForm.getUrl(), monitorForm.getIntervalTime()*1000, hashMap); //// monitorServiceClient.registerServiceMonitor(monitorForm.getDomainId()+"", nodeId,monitorForm.getSubType().toLowerCase(), //// monitorForm.getUrl(), monitorForm.getIntervalTime()*1000, hashMap); // } } catch (Exception e) { logger.error("后台注册失败!!"); // e.printStackTrace(); PrintWriter out = response.getWriter(); response.setContentType("text/html; charset=UTF-8"); out.println("<script language=\"javascript\">"); out.println("window.opener.location.reload();"); out.println("alert('后台注册失败!!');"); out.println("window.close();"); out.println("</script>"); out.close(); /** 添加日志开始 **/ SystemLog systemLog = new SystemLog(); systemLog.setUsername(SecurityUserHolder.getCurrentUser().getUsername()); List<Role> roleList = SecurityUserHolder.getCurrentUser().getRoleList(); StringBuffer roles = new StringBuffer(""); for(Role role:roleList){ roles.append(role.getName()); roles.append(","); } systemLog.setRoleName(roles.substring(0,roles.length()-1)); systemLog.setTime(new Timestamp(new Date().getTime())); systemLog.setModuleName(SystemModelInfo.MOD_SCM); systemLog.setOperationDesc("服务检测模块:注册监控项。监控项名称:" + monitor.getName()); systemLog.setControl("失败"); systemLogService.saveSystemLog(systemLog); /** 添加日志结束 **/ return null; } }else {///更新 Monitor oldMonitor = monitorService.getMonitorById(monitor.getId()); monitor.setCreateTime(oldMonitor.getCreateTime()); monitor.setNodeId(oldMonitor.getNodeId()); HashMap<String, String> hashMap = new HashMap<String, String>(); String tempSubType = monitorForm.getSubType().toLowerCase(); if("dns".equals(tempSubType)){ hashMap.put("port", monitorForm.getPort()); hashMap.put("lookup", monitorForm.getIp()); }else if("ftp".equals(tempSubType)){ hashMap.put("port", monitorForm.getPort()); hashMap.put("userid", monitorForm.getUserid()); hashMap.put("password", monitorForm.getPassword()); }else if("http".equals(tempSubType)){ hashMap.put("port", monitorForm.getPort()); hashMap.put("url", monitorForm.getUrl()); }else if("https".equals(tempSubType)){ hashMap.put("port", monitorForm.getPort()); hashMap.put("url", monitorForm.getUrl()); }else if("icmp".equals(tempSubType)){ hashMap.put("retry", monitorForm.getRetry() + ""); hashMap.put("timeout", monitorForm.getTimeout()*1000 + ""); }else if("imap".equals(tempSubType)){ hashMap.put("port", monitorForm.getPort()); hashMap.put("retry", monitorForm.getRetry() + ""); hashMap.put("timeout", monitorForm.getTimeout()*1000 + ""); }else if("smtp".equals(tempSubType)){ hashMap.put("port", monitorForm.getPort()); hashMap.put("retry", monitorForm.getRetry() + ""); hashMap.put("timeout", monitorForm.getTimeout()*1000 + ""); }else if("pop3".equals(tempSubType)){ hashMap.put("port", monitorForm.getPort()); hashMap.put("retry", monitorForm.getRetry() + ""); hashMap.put("timeout", monitorForm.getTimeout()*1000 + ""); } try { /** 调用后台接口更新监控项(先删除再重新注册) **/ monitorServiceClient.removeServiceMonitor(monitor.getNodeId()); if(!"smtp".equals(tempSubType) && !"imap".equals(tempSubType) && !"pop3".equals(tempSubType) ){ // monitorServiceClient.registerServiceMonitor(monitor.getDomain().getId()+"", monitor.getNodeId(),monitorForm.getSubType().toLowerCase(), // monitorForm.getIp(), monitorForm.getIntervalTime()*1000, hashMap); monitorServiceClient.registerServiceMonitor(monitorForm.getDomainId()+"", monitor.getNodeId(),monitorForm.getSubType().toLowerCase(), monitorForm.getIp(), monitorForm.getIntervalTime()*1000, hashMap); }else { // monitorServiceClient.registerServiceMonitor(monitor.getDomain().getId()+"", monitor.getNodeId(),monitorForm.getSubType().toLowerCase(), // monitorForm.getUrl(), monitorForm.getIntervalTime()*1000, hashMap); monitorServiceClient.registerServiceMonitor(monitorForm.getDomainId()+"", monitor.getNodeId(),monitorForm.getSubType().toLowerCase(), monitorForm.getUrl(), monitorForm.getIntervalTime()*1000, hashMap); } } catch (Exception e) { logger.error("后台更新失败!!"); // e.printStackTrace(); PrintWriter out = response.getWriter(); response.setContentType("text/html; charset=UTF-8"); out.println("<script language=\"javascript\">"); out.println("window.opener.location.reload();"); out.println("alert('后台更新失败!!');"); out.println("window.close();"); out.println("</script>"); out.close(); /** 添加日志开始 **/ SystemLog systemLog = new SystemLog(); systemLog.setUsername(SecurityUserHolder.getCurrentUser().getUsername()); List<Role> roleList = SecurityUserHolder.getCurrentUser().getRoleList(); StringBuffer roles = new StringBuffer(""); for(Role role:roleList){ roles.append(role.getName()); roles.append(","); } systemLog.setRoleName(roles.substring(0,roles.length()-1)); systemLog.setTime(new Timestamp(new Date().getTime())); systemLog.setModuleName(SystemModelInfo.MOD_SCM); systemLog.setOperationDesc("服务检测模块:更新监控项。监控项名称:" + monitor.getName()); systemLog.setControl("失败"); systemLogService.saveSystemLog(systemLog); /** 添加日志结束 **/ return null; } } monitorService.saveOrUpdateMonitor(monitor); /** 添加日志开始 **/ SystemLog systemLog = new SystemLog(); systemLog.setUsername(SecurityUserHolder.getCurrentUser().getUsername()); List<Role> roleList = SecurityUserHolder.getCurrentUser().getRoleList(); StringBuffer roles = new StringBuffer(""); for(Role role:roleList){ roles.append(role.getName()); roles.append(","); } systemLog.setRoleName(roles.substring(0,roles.length()-1)); systemLog.setTime(new Timestamp(new Date().getTime())); systemLog.setModuleName(SystemModelInfo.MOD_SCM); if("add".equals(flag)){ systemLog.setOperationDesc("服务检测模块:新建监控项。监控项名称:" + monitor.getName()); }else { systemLog.setOperationDesc("服务检测模块:修改监控项。监控项ID:" + monitor.getId()); } systemLog.setControl("成功"); systemLogService.saveSystemLog(systemLog); /** 添加日志结束 **/ monitorForm.reset(); }else{ saveToken(request); } request.setAttribute("monitorType", request.getParameter("type")); PrintWriter out = response.getWriter(); response.setContentType("text/html; charset=UTF-8"); out.println("<script language=\"javascript\">"); out.println("window.opener.location.reload();"); out.println("window.close();"); out.println("</script>"); out.close(); return null; } ///删除监控项 public ActionForward monitorDelete(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { request.setAttribute("isAll", request.getParameter("isAll")); request.setAttribute("currPage", request.getParameter("currPage")); String id = request.getParameter("id"); Monitor monitor = monitorService.getMonitorById(Integer.parseInt(id)); String flag = "success"; if (null != monitor) { try { /** 调用后台接口删除监控项 **/ monitorServiceClient.removeServiceMonitor(monitor.getNodeId()); } catch (Exception e) { logger.error("后台删除失败!!"); flag = "fail"; /** 添加日志开始 **/ SystemLog systemLog = new SystemLog(); systemLog.setUsername(SecurityUserHolder.getCurrentUser().getUsername()); List<Role> roleList = SecurityUserHolder.getCurrentUser().getRoleList(); StringBuffer roles = new StringBuffer(""); for(Role role:roleList){ roles.append(role.getName()); roles.append(","); } systemLog.setRoleName(roles.substring(0,roles.length()-1)); systemLog.setTime(new Timestamp(new Date().getTime())); systemLog.setModuleName(SystemModelInfo.MOD_SCM); systemLog.setOperationDesc("服务检测模块:后台删除监控项。监控项名称:" + monitor.getName()); systemLog.setControl("失败"); systemLogService.saveSystemLog(systemLog); /** 添加日志结束 **/ // e.printStackTrace(); } if(flag != "fail"){ monitorService.deleteMonitorById(Integer.parseInt(id)); /** 添加日志开始 **/ SystemLog systemLog = new SystemLog(); systemLog.setUsername(SecurityUserHolder.getCurrentUser().getUsername()); List<Role> roleList = SecurityUserHolder.getCurrentUser().getRoleList(); StringBuffer roles = new StringBuffer(""); for(Role role:roleList){ roles.append(role.getName()); roles.append(","); } systemLog.setRoleName(roles.substring(0,roles.length()-1)); systemLog.setTime(new Timestamp(new Date().getTime())); systemLog.setModuleName(SystemModelInfo.MOD_SCM); systemLog.setOperationDesc("服务检测模块:删除监控项。监控项ID:" + id); systemLog.setControl("成功"); systemLogService.saveSystemLog(systemLog); /** 添加日志结束 **/ } } return getMonitorList(mapping, form, request, response); } //查看详细信息 public ActionForward monitorDetail(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)throws Exception { String id = request.getParameter("id"); if(null != id){ Monitor monitor = monitorService.getMonitorById(Integer.parseInt(id)); request.setAttribute("monitor", monitor); } return mapping.findForward("monitorDetail"); } ///跳转到修改页面 public ActionForward toUpdateMonitorJsp(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)throws Exception { saveToken(request);///创建一个新的令牌值,将其保存在当前的会话(session)范围内 MonitorForm monitorForm = (MonitorForm) form; monitorForm.reset(); String isAll = request.getParameter("isAll"); String currPage = request.getParameter("currPage"); String id = request.getParameter("id"); if(null != id){///id不为空说明是更新前 Monitor monitor = monitorService.getMonitorById(Integer.parseInt(id)); if(null != monitor){ if(null != monitor.getWeekcheck() && !"".equals(monitor.getWeekcheck())){ String[] weekcheck = monitor.getWeekcheck().split(","); for (int i = 0; i < weekcheck.length; i++) { request.setAttribute(weekcheck[i],weekcheck[i] ); } } request.setAttribute("monitorType", monitor.getType()); request.setAttribute("monitor", monitor); } }else{///id为空说明是增加前 request.setAttribute("monitorType", "UDP");///默认首先显示的是UDP } List<Domain> userDomainList = SecurityUserHolder.getCurrentUser().getDomainList(); request.setAttribute("userDomainList", userDomainList); request.setAttribute("isAll", isAll); request.setAttribute("currPage", currPage); return mapping.findForward("monitorUpdate"); } }