package edu.sjtu.infosec.ismp.manager.EM.web.actions;
import java.io.UnsupportedEncodingException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
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.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessages;
import org.infosec.ismp.manager.rmi.tm.manager.model.NodeEntity;
import edu.sjtu.infosec.ismp.manager.EM.comm.BaseAction;
import edu.sjtu.infosec.ismp.manager.EM.comm.Page;
import edu.sjtu.infosec.ismp.manager.EM.dao.queryCondition.EventmoniCondition;
import edu.sjtu.infosec.ismp.manager.EM.dao.queryCondition.EventmoniinfoCondition;
import edu.sjtu.infosec.ismp.manager.EM.dao.queryCondition.EventrealdispCondition;
import edu.sjtu.infosec.ismp.manager.EM.dao.queryResult.EventGetTopoResult;
import edu.sjtu.infosec.ismp.manager.EM.dao.queryResult.EventmoniResult;
import edu.sjtu.infosec.ismp.manager.EM.dao.queryResult.EventmoniinfoResult;
import edu.sjtu.infosec.ismp.manager.EM.dao.queryResult.EventrealdispResult;
import edu.sjtu.infosec.ismp.manager.EM.model.Eventmoniinfo;
import edu.sjtu.infosec.ismp.manager.SYSM.user.self.comm.SecurityUserHolder;
import edu.sjtu.infosec.ismp.security.Domain;
import edu.sjtu.infosec.ismp.security.OperatorDetails;
/**
* web层 事件监测Action.
*
* @version 2009-06-02
* @author yang li
*/
public class EventAction extends BaseAction {
// private static int inTimeReportMarkJspMaxCount = 20;
protected final Log log = LogFactory.getLog(getClass());
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private ActionMessages messages = new ActionMessages();
private OperatorDetails eventLogClass =null;
private EventBaseClass eventBaseClass;
public void setEventBaseClass(EventBaseClass eventBaseClass) {
this.eventBaseClass = eventBaseClass;
}
/**
* 获取查询参数
*
* @param request
* HttpServletRequest
* @return 查询参数Map
* @throws UnsupportedEncodingException
*/
public Map getParamMap(HttpServletRequest request)
throws UnsupportedEncodingException {
Map paramMap = new HashMap();
String encoding = "ISO-8859-1";
Enumeration paramNames = request.getParameterNames();
while (paramNames.hasMoreElements()) {
String paramName = (String) paramNames.nextElement();
if (null != request.getParameter(paramName)
&& !"".equals(request.getParameter(paramName).trim())) {
String paramValue = new String(request.getParameter(paramName)
.getBytes(encoding), "utf-8");
if (null != paramValue && !paramValue.trim().equals("")) {
paramMap.put(paramName, paramValue);
request.setAttribute(paramName, paramValue);
}
}
}
return paramMap;
}
public ActionForward top(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
return mapping.findForward("top");
}
public ActionForward childFrame(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
return mapping.findForward("child");
}
/**
* 分页功能
*
* @param mapping
* ActionMapping
* @param form
* ActionForm
* @param request
* HttpServletRequest
* @param response
* HttpServletResponse
* @return ActionForward
* @throws Exception
*/
public ActionForward showListByTag(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
eventLogClass = SecurityUserHolder.getCurrentUser();
Page page = new Page();
page.setEveryPage(15);
String bureauId = request.getParameter("bureauId");
List<Domain> managerBoList = SecurityUserHolder.getCurrentUser().getDomainList();
Integer[] bureauIds = null;
if (bureauId != null && !bureauId.equals("")) {// 如果用户选择特定委办局时
bureauIds = new Integer[1];
bureauIds[0] = Integer.parseInt(bureauId);
} else if (managerBoList != null) {// 用户第一次登陆或是没有选择特定委办局时
bureauIds = new Integer[managerBoList.size()];
Domain bo = null;
for (int i = 0; i < managerBoList.size(); i++) {
bo = managerBoList.get(i);
bureauIds[i] = bo.getId();
}
} else {// 登陆的用户不属于任何委办局时
bureauIds = new Integer[1];
}
request.setAttribute("managerOfUser", managerBoList);
Map paramMap = getParamMap(request);
// mark用来标记选择跳转到的页数
String pageMark = request.getParameter("mark");// 1&eventName=IDS
String pageNo = request.getParameter("pageno") == null ? "1" : request
.getParameter("pageno");
if (null == pageMark) {
pageMark = pageNo;
page.setCurrentPage(Integer.parseInt(pageNo));
request.setAttribute("pageMark", Integer.parseInt(pageMark));
} else {
page.setCurrentPage(Integer.parseInt(pageMark == "" ? "1"
: pageMark));
request.setAttribute("pageMark", pageMark);
}
EventmoniCondition condition = new EventmoniCondition();
condition.setPage(page);
String eventName = request.getParameter("eventName");
EventGetTopoResult result = null;
/*
* Integer[] str = null; if(managerBoList != null &&
* managerBoList.size() > 0){ str = new Integer[managerBoList.size()];
* for(int i = 0; i < managerBoList.size(); i ++){ ManagerBO managerBo =
* (ManagerBO)managerBoList.get(i); str[i] = managerBo.getId(); } }
*/
// eventName = 1,2,3分别表示的是自定义事件一,二,三;如果eventName不为空则进行自定义事件的分页查询
if (request.getParameter("eventName") != null
&& !"".equals(request.getParameter("eventName").trim())) {
request.setAttribute("eventName", eventName);
result = eventBaseClass.getEventmoniService()
.queryEventByCustomize(eventLogClass.getUsername(),
Integer.parseInt(eventName), bureauIds, page);
// result =
// eventBaseClass.getEventmoniService().queryEventByCustomize
// (Integer.parseInt(eventName), page);
} else {
// 如果eventNaqme为空的话则表示的是进行全部事件的分页查询
result = eventBaseClass.getGetTopoInfo().getTopoInfo(page,
bureauIds);
// result =
// eventBaseClass.getEventmoniService().queryEventmoniByCondition
// (condition);
}
if(result != null){
page = result.getPage();
List<Object[]> eventList = result.getDatas();
request.setAttribute("page", page);
request.setAttribute("eventList", eventList);
if (eventList != null && eventList.size() > 0) {
int size = eventList.size();
request.setAttribute("eventListSize", size);
/*
* for(int i = 0; i < eventList.size(); i ++){ Object[] obj =
* (Object[])eventList.get(i);
* System.out.println("EventAction-----------------------"
* +obj.length+"-------------------------------------EventList"); }
*/
}
}
// response.getWriter().close();
if (request.getParameter("isFirst") != null
&& request.getParameter("isFirst").trim().equals("true")) {
return mapping.findForward("eventListFirst");
} else {
return mapping.findForward("eventList");
}
}
/**
* 删除功能
*
* @param mapping
* ActionMapping
* @param form
* ActionForm
* @param request
* HttpServletRequest
* @param response
* HttpServletResponse
* @return ActionForward
* @throws Exception
*
* 可以多条删除或是单条删除
*/
public ActionForward deleteEvent(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
/**
* 日志信息添加
*
*/
eventLogClass = SecurityUserHolder.getCurrentUser();
eventBaseClass.getLogService().saveSystemLog(
eventLogClass.getUsername(),
eventLogClass.getRoleList().get(0).getName(), "事件模块", "自定义事件删除", Timestamp.valueOf(sdf.format(new Date())), "");
// 1@12,2@12,3@12
String ids = request.getParameter("deleteIn");
String mark = request.getParameter("mark");
String event = request.getParameter("eventName");
String[] idStr = ids.split(",");
List idList = new ArrayList();// mac地址
for (int i = 0; i < idStr.length; i++) {
String every = idStr[i];
idList.add(idStr[i].substring(0, idStr[i].indexOf("@")));
}
// System.out.println(idList.toString());
eventBaseClass.getEventtaskseleService().delete(
eventLogClass.getUsername(), event, idList);// .
// getEventmoniService
// (
// ).delete(idList);
return showListByTag(mapping, form, request, response);
}
/**
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*
* 添加自定义事件
*/
public ActionForward addDefineEvent(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
/**
* 日志信息添加
*/
eventLogClass = SecurityUserHolder.getCurrentUser();
eventBaseClass.getLogService().saveSystemLog(
eventLogClass.getUsername(),
eventLogClass.getRoleList().get(0).getName(), "事件模块", "自定义事件添加", Timestamp.valueOf(sdf.format(new Date())), "");
String ids = request.getParameter("defineEventCondition");
String str = ids.substring(0, ids.lastIndexOf(","));
StringBuffer sb = new StringBuffer();
String[] string = str.split(",");
for (int i = 0; i < string.length; i++) {
sb.append(string[i].substring(string[i].lastIndexOf("@") + 1))
.append(",");
}
String result = sb.toString().substring(0,
sb.toString().lastIndexOf(","));
String eventNumber = ids.substring(ids.lastIndexOf(",") + 1, ids
.length());
// eventLogClass = new EventLogClass(request);
eventBaseClass.getEventtaskseleService().save(
eventLogClass.getUsername(), Integer.parseInt(eventNumber),
result);
return showListByTag(mapping, form, request, response);
}
/**
* 跳到实时显示页面
*
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward eventInTimeSpecific(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
System.out.println("eventInTimeSpecific");
eventLogClass = SecurityUserHolder.getCurrentUser();
if (eventLogClass.getDomainList() != null) {
List<Domain> managerBoList = eventLogClass.getDomainList();
String bureauId = request.getParameter("bureauId");
// Integer[] bureauIds = null;
StringBuffer bureauIds = new StringBuffer();
if (bureauId == null || bureauId.equals("")) {
if (managerBoList != null) {
for (int i = 0; i < managerBoList.size(); i++) {
Domain managerBo = managerBoList.get(i);
if(managerBo != null){
if(i == 0){
bureauIds.append(managerBo.getId());
}else{
bureauIds.append(",").append(managerBo.getId());
}
}
}
}
}else{
bureauIds.append(bureauId);
request.setAttribute("bureauId", bureauId);
}
request.setAttribute("bureauIds", bureauIds);
request.setAttribute("managerBoList", managerBoList);
}
String maxCount = request.getParameter("maxCount");
request.setAttribute("maxCount", maxCount);
System.out.println("maxCount=" + maxCount);
// request.getSession().setAttribute("inTimeReportMarkJspMaxCount",
// inTimeReportMarkJspMaxCount);
return mapping.findForward("inTimeReportMark");
}
/**
* 通过该方法实现行情报表页面的显示
*
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward eventSpecific(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
EventrealdispCondition condition = new EventrealdispCondition();
Page page = new Page();
page.setEveryPage(15);
String pageMark = request.getParameter("mark");// 1&eventName=IDS
String pageNo = request.getParameter("pageno") == null ? "1" : request
.getParameter("pageno");
if (null == pageMark) {
pageMark = pageNo;
page.setCurrentPage(Integer.parseInt(pageNo));
request.setAttribute("pageMark", Integer.parseInt(pageMark));
} else {
page.setCurrentPage(Integer.parseInt(pageMark == "" ? "1"
: pageMark));
request.setAttribute("pageMark", pageMark);
}
String ip = request.getParameter("faci_ip");
String bureauId = request.getParameter("bureauId");
/*if (bureauId != null && !bureauId.trim().equals("")) {
EventmoniCondition eventMoniCondition = new EventmoniCondition();
Page eventPage = new Page();
eventPage.setCurrentPage(1);
eventPage.setEveryPage(10);
eventMoniCondition.setFaci_ip(ip);
eventMoniCondition.setPage(eventPage);
eventMoniCondition.setBureauId(Integer.parseInt(bureauId==null?"0":bureauId));
EventmoniResult eventmoniResult = eventBaseClass
.getEventmoniService().queryEventmoniByCondition(
eventMoniCondition);
// if(eventmoniResult != null){
// if(eventmoniResult.getResults() != null){
// eventmoni = eventmoniResult.getResults().get(0);
// }
// }
}*/
// eventBaseClass.getServiceClient().setValueToPipe(ip);
/**
* 把IP传入到pipe里面去,并得到一个List到页面上显示
*
*/
condition.setSrc_ip(ip);
condition.setPage(page);
condition.setBureauId(Integer.parseInt(bureauId==null?"0":bureauId));
EventrealdispResult result = eventBaseClass.getEventrealdispService()
.queryEventrealdispByCondition(condition);
page = result.getPage();
// String bureauId = request.getParameter("bureauId");
NodeEntity topoManageDevice = eventBaseClass.getGetTopoInfo()
.queryByIpBureauId(ip, Integer.parseInt(bureauId));
List list = new ArrayList();
list.add(ip);
if (topoManageDevice != null) {
list.add(topoManageDevice.getDomain().getDomainName());
} else {
list.add("");
}
// list.add(request.getParameter("name"));
list.add(request.getParameter("init"));
list.add(request.getParameter("curr"));
list.add(request.getParameter("max"));
list.add(request.getParameter("min"));
list.add(request.getParameter("thre"));
// request.setAttribute("eventmoni", eventmoni);
request.setAttribute("faci_ip", ip);
request.setAttribute("bureauId", bureauId);
request.setAttribute("page", page);
request.setAttribute("paraList", list);
request.setAttribute("eventrealdispList", result.getResults());
if (result.getResults() != null) {
request.setAttribute("listSize", result.getResults().size());
} else {
request.setAttribute("listSize", 10);
}
return mapping.findForward("markReport");
}
/**
* 双击事件监测某条记录的时候显示到分时走势页面
*
* 通过该方法实现分时走势页面的显示
*
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward eventTimeTrend(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
String ip = request.getParameter("faci_ip");
Page pg = new Page();
pg.setCurrentPage(1);
pg.setEveryPage(15);
String bureauId = request.getParameter("bureauId");
NodeEntity topoManageDevice = eventBaseClass.getGetTopoInfo()
.queryByIpBureauId(ip, Integer.parseInt(bureauId));
List list = new ArrayList();
list.add(ip);
if (topoManageDevice != null) {
list.add(topoManageDevice.getDomain().getDomainName());
} else {
list.add("");
}
list.add(request.getParameter("init"));
list.add(request.getParameter("curr"));
list.add(request.getParameter("max"));
list.add(request.getParameter("min"));
list.add(request.getParameter("thre"));
list.add(request.getParameter("total"));
EventmoniCondition eventMoniCondition = new EventmoniCondition();
Page eventPage = new Page();
eventPage.setCurrentPage(1);
eventPage.setEveryPage(15);
eventMoniCondition.setPage(eventPage);
eventMoniCondition.setBureauId(Integer.parseInt(bureauId==null?"0":bureauId));
EventmoniResult eventmoniResult = eventBaseClass.getEventmoniService()
.queryEventmoniByCondition(eventMoniCondition);
request.setAttribute("faci_ip", ip);
request.setAttribute("bureauId", bureauId);
request.setAttribute("paraList", list);
return mapping.findForward("eventTimeTrend");
}
public ActionForward monitoringInformation(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
Page page = new Page();
page.setEveryPage(15);
String pageMark = request.getParameter("mark");// 1&eventName=IDS
String pageNo = request.getParameter("pageno") == null ? "1" : request
.getParameter("pageno");
if (null == pageMark) {
pageMark = pageNo;
page.setCurrentPage(Integer.parseInt(pageNo));
request.setAttribute("pageMark", Integer.parseInt(pageMark));
} else {
page.setCurrentPage(Integer.parseInt(pageMark == "" ? "1"
: pageMark));
request.setAttribute("pageMark", pageMark);
}
EventmoniinfoCondition condition = new EventmoniinfoCondition();
condition.setPage(page);
//condition.setBureauId(Integer.parseInt(request.getParameter("bureauId")));
condition.setIpAddress(request.getParameter("faci_ip"));
getParamMap(request);
EventmoniinfoResult result = eventBaseClass.getEventmoniinfoService()
.queryEventmoniinfoByCondition(condition);
page = result.getPage();
List<Eventmoniinfo> eventmoniinfo = result.getResults();
request.setAttribute("page", page);
request.setAttribute("eventmoniinfoList", eventmoniinfo);
return mapping.findForward("monitoring_information");
}
/**
* 查看关联资产
*
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward deviceInView(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// System.out
// .println("^^^^^^^^^^^^^^^^^^^^^^deviceInView^^^^^^^^^^^^^^^^^^^^^^^^^");
// // String eventmoniId = request.getParameter("id");
// String faciIp = request.getParameter("eventFaciIp");
// String bureauId = request.getParameter("bureauId");
// //eventBaseClass.getEventStatisticsService().queryAssetDeviceBOByFaciip(
// // "", 1);
//// AssetDeviceBO assetDeviceBO = eventBaseClass
//// .getEventStatisticsService().queryAssetDeviceBOByFaciip(faciIp,
//// Integer.parseInt(bureauId));
//
// request.getSession().setAttribute("assetDeviceBO", assetDeviceBO);
// response.setContentType("text/html;charset=UTF-8");
// PrintWriter out = response.getWriter();
//
// if (assetDeviceBO != null) {
// StringBuffer sb = new StringBuffer();
// sb.append("您查看的设备所关联的资产信息为\n\n");
// String name = assetDeviceBO.getName() == null ? "" : assetDeviceBO
// .getName();
// String assetType = assetDeviceBO.getAssetType() == null ? ""
// : assetDeviceBO.getAssetType().toString().trim();
// String ip = assetDeviceBO.getIp() == null ? "" : assetDeviceBO
// .getIp();
// String mac = assetDeviceBO.getMac() == null ? "" : assetDeviceBO
// .getMac();
// String status = assetDeviceBO.getStatus() == null ? ""
// : assetDeviceBO.getStatus().toString().trim();
// String model = assetDeviceBO.getModel() == null ? ""
// : assetDeviceBO.getModel();
//
// if(assetType.equals("1")){
// assetType = "网路设备";
// }else if(assetType.equals("2")){
// assetType = "安全设备";
// }else if(assetType.equals("3")){
// assetType = "服务器";
// }else if(assetType.equals("4")){
// assetType = "桌面主机";
// }else{
// assetType = "未知";
// }
//
// if(status.equals("1")){
// status = "在线";
// }else if(status.equals("2")){
// status = "报废";
// }else{
// status = "未知";
// }
// sb.append("资产名称:" + name + "\n");
// sb.append("资产类型:" + assetType + "\n");
// sb.append("IP地址:" + ip + "\n");
// sb.append("设备mac地址:" + mac + "\n");
// sb.append("资产状态:" + status + "\n");
// sb.append("设备型号:" + model + "\n");
// out.print(sb.toString());
// } else {
// out.print("你查看的设备没有关联的资产");
// }
// out.close();// 表示的是已经发回响应到客户端,不能在进行页面跳转了,所以下面返回的是空
return null;
}
}