package edu.sjtu.infosec.ismp.manager.AIM.web.actions;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
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.aim.model.AlertInfoBO;
import org.infosec.ismp.manager.rmi.comm.model.SystemModelInfo;
import org.infosec.ismp.manager.rmi.lm.pfLog.model.SystemLog;
import edu.sjtu.infosec.ismp.manager.AIM.comm.AlertQueryVO;
import edu.sjtu.infosec.ismp.manager.AIM.model.AlertFusionRuleBO;
import edu.sjtu.infosec.ismp.manager.AIM.model.AlertRuleBO;
import edu.sjtu.infosec.ismp.manager.AIM.model.AlertTypeBO;
import edu.sjtu.infosec.ismp.manager.AIM.service.AlertFusionRuleServices;
import edu.sjtu.infosec.ismp.manager.AIM.service.AlertRuleService;
import edu.sjtu.infosec.ismp.manager.AIM.service.AlertService;
import edu.sjtu.infosec.ismp.manager.AIM.service.AlertTypeService;
import edu.sjtu.infosec.ismp.manager.AIM.web.dwr.AlertDwrServices;
import edu.sjtu.infosec.ismp.manager.AIM.web.form.AlertForm;
import edu.sjtu.infosec.ismp.manager.LM.pfLog.service.SystemLogService;
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.manager.SYSM.user.self.service.UserService;
import edu.sjtu.infosec.ismp.manager.comm.model.page.Page;
import edu.sjtu.infosec.ismp.manager.comm.model.page.PageResult;
import edu.sjtu.infosec.ismp.security.Domain;
import edu.sjtu.infosec.ismp.security.OperatorDetails;
import edu.sjtu.infosec.ismp.security.Role;
public class AlertAction extends DispatchAction {
// 注入告警信息 service层接口
private AlertService alertService;
// 注入告警类型service接口
private AlertTypeService alertTypeService;
private AlertDwrServices alertDwrService;
private AlertFusionRuleServices alertFusionRuleServices;
private UserService userService;
// private ManagerService managerService;
private DomainService domainService;
private AlertRuleService alertRuleService;
private SystemLogService systemlogService;
public void setSystemlogService(SystemLogService systemlogService) {
this.systemlogService = systemlogService;
}
SystemLog log;
String rolenames ;
String username;
OperatorDetails user;
void init(){
user = SecurityUserHolder.getCurrentUser();
username = user.getUsername();
rolenames="";
for(Role role : user.getRoleList()){
rolenames = rolenames+role.getName();
}
log = new SystemLog();
}
/**
* 查询所有的告警类型信息
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward getListAlertType(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
try{
init();
List<AlertTypeBO> alertTypelist = alertTypeService.getLisByAlertTypeService();
request.getSession().setAttribute("altypeList", alertTypelist);
log.setUsername(username);
log.setRoleName(rolenames);
log.setTime(new Timestamp(new Date().getTime()));
log.setModuleName(SystemModelInfo.MOD_AIM);
log.setOperationDesc("查询所有的告警类型信息");
log.setControl("成功");
systemlogService.saveSystemLog(log);
return this.getListPageAlertAction(mapping, form, request, response);
}catch(Exception e){
log.setUsername(username);
log.setRoleName(rolenames);
log.setTime(new Timestamp(new Date().getTime()));
log.setModuleName(SystemModelInfo.MOD_AIM);
log.setOperationDesc("查询所有的告警类型信息");
log.setControl("失败");
systemlogService.saveSystemLog(log);
return null;
}
}
/**
* 多条件查询告警信息 并且分页显示
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward getListPageAlertAction(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
AlertForm alertForm = (AlertForm) form;
HttpSession session = request.getSession();
Page page = new Page();
request.setAttribute("alertinfoQuery", alertForm.getAlertquer());
try{
init();
log.setUsername(username);
log.setRoleName(rolenames);
log.setTime(new Timestamp(new Date().getTime()));
log.setModuleName(SystemModelInfo.MOD_AIM);
log.setOperationDesc("多条件查询告警信息 并且分页显示");
log.setControl("成功");
systemlogService.saveSystemLog(log);
//根据类型查找子类型
List<AlertTypeBO> subTypeList=new ArrayList();
if(alertForm.getAlertquer().getAlertType()!=null&&alertForm.getAlertquer().getAlertType().trim().length()>0){
subTypeList=alertDwrService.getSubTypeByNameService(alertForm.getAlertquer().getAlertType());
}
request.setAttribute("subTypeList", subTypeList);
// 获得当前页
String curpage = request.getParameter("curpage") != null
&& (!request.getParameter("curpage").equals("")) ? request
.getParameter("curpage") : "1";
if (request.getParameter("pageSize") != null
&& (!request.getParameter("pageSize").equals(""))) {
int pagesize = Integer.parseInt(request.getParameter("pageSize"));
request.setAttribute("pageSize", request.getParameter("pageSize"));
page.setEveryPage(pagesize);
}else{
page.setEveryPage(10);
}
//如果第一次进来就初始化条件为NULL
if(request.getParameter("first")!=null){
alertForm.setAlertquer(new AlertQueryVO());
request.setAttribute("subTypeList", null);
request.setAttribute("alertinfoQuery",null);
}
// 设置当前页跟开始位置
page.setCurrentPage(Integer.parseInt(curpage));
page.setBeginIndex((page.getCurrentPage() - 1)*page.getEveryPage());
OperatorDetails user = SecurityUserHolder.getCurrentUser();
if(user.getUsername().equals("admin")){
PageResult result = alertService.getListPageAlertService(page,
alertForm.getAlertquer());
request.setAttribute("page", result.getPage());
request.setAttribute("list", result.getPageList());
}
else{
List<Domain> listDomain = user.getDomainList();
PageResult result = alertService.getListPageAlertService(page,alertForm.getAlertquer(),listDomain);
if(result!=null){
request.setAttribute("page", result.getPage());
request.setAttribute("list", result.getPageList());
}
}
//告警浏览
if(request.getParameter("home")!=null && request.getParameter("home").trim().equals("1")){
AlertFusionRuleBO alertFusionRuleBO=alertFusionRuleServices.getAlertFusionRuleServices();
request.setAttribute("alertFusionRuleBO", alertFusionRuleBO);
session.setAttribute("topcss", "alertIndex");
return mapping.findForward("alertHome");
}
//弹出告警监控 小窗口
if(request.getParameter("MinWindow")!=null){
if(request.getSession().getAttribute("altypeList")==null){
this.getListAlertType(mapping, alertForm, request, response);
}
AlertFusionRuleBO alertFusionRuleBO=alertFusionRuleServices.getAlertFusionRuleServices();
request.setAttribute("alertFusionRuleBO", alertFusionRuleBO);
request.setAttribute("monitorTime", new Timestamp(System.currentTimeMillis()));
return mapping.findForward("AlertMinWindow");
}
session.setAttribute("topcss", "alertIndex");
return mapping.findForward("alertIndex");
}catch(Exception e){
log.setUsername(username);
log.setRoleName(rolenames);
log.setTime(new Timestamp(new Date().getTime()));
log.setModuleName(SystemModelInfo.MOD_AIM);
log.setOperationDesc("多条件查询告警信息 并且分页显示");
log.setControl("失败");
systemlogService.saveSystemLog(log);
return null;
}
}
/**
* 根据ID 查询单个的告警信息
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward getByIdAlert(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
String alertId=request.getParameter("alertId");
try{
init();
if(alertId!=null&&(!alertId.equals(""))){
AlertInfoBO alertInfobo=alertService.getByIdAlertService(Integer.parseInt(alertId));
if(alertInfobo!=null){
request.setAttribute("alertInfobo", alertInfobo);
String fusion=alertInfobo.getFusioin();
int fusionCount=0;
List fustionTimeList=new ArrayList();
if(fusion!=null&&fusion.trim().length()>0){
String strs[]=fusion.split(",");
if(strs!=null&&strs.length>0){
fusionCount=strs.length;
for (String string : strs) {
fustionTimeList.add(string);
}
}
}
request.setAttribute("fusionCount", fusionCount);
request.setAttribute("fustionTimeAll", fustionTimeList);
if(alertInfobo.getStatus()!=null&&alertInfobo.getStatus()==1){
//如果状态是未读 就更新状态为只读
alertInfobo.setStatus(0);
alertService.updateAlertService(alertInfobo);
}
if(alertInfobo.getIfnew()!=null&&alertInfobo.getIfnew()==1){
alertInfobo.setIfnew(0);
alertService.updateAlertService(alertInfobo);
}
if(alertInfobo!=null && alertInfobo.getDomain_id()!=null){
Integer domain_id = alertInfobo.getDomain_id();
Domain domain = domainService.findById(domain_id);
request.setAttribute("department", domain);
}
//触发规则列表
List alertRuleList=new ArrayList();
if(alertInfobo.getRule()!=null && alertInfobo.getRule().trim().length()!=0){
String strs[]= alertInfobo.getRule().split(",");
for(int i=0;i<strs.length;i++){
AlertRuleBO rule = alertRuleService.getByIdAlertRuleService(Integer.parseInt(strs[i]));
alertRuleList.add(rule);
}
}
request.setAttribute("alertruleList", alertRuleList);
}
}
log.setUsername(username);
log.setRoleName(rolenames);
log.setTime(new Timestamp(new Date().getTime()));
log.setModuleName(SystemModelInfo.MOD_AIM);
log.setOperationDesc("根据ID 查询单个的告警信息");
log.setControl("成功");
systemlogService.saveSystemLog(log);
return mapping.findForward("alertPart");
}catch(Exception e){
log.setUsername(username);
log.setRoleName(rolenames);
log.setTime(new Timestamp(new Date().getTime()));
log.setModuleName(SystemModelInfo.MOD_AIM);
log.setOperationDesc("根据ID 查询单个的告警信息");
log.setControl("失败");
systemlogService.saveSystemLog(log);
return null;
}
}
/**
* Frame 跳转专用
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward alertRuleFwd(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
String alertId=request.getParameter("alertId");
try{
init();
if(alertId!=null&&(!alertId.equals(""))){
AlertInfoBO alertInfobo=alertService.getByIdAlertService(Integer.parseInt(alertId));
if(alertInfobo!=null){
request.setAttribute("alertInfobo", alertInfobo);
String fusion=alertInfobo.getFusioin();
int fusionCount=0;
List fustionTimeList=new ArrayList();
if(fusion!=null&&fusion.trim().length()>0){
String strs[]=fusion.split(",");
if(strs!=null&&strs.length>0){
fusionCount=strs.length;
for (String string : strs) {
fustionTimeList.add(string);
}
}
}
request.setAttribute("fusionCount", fusionCount);
request.setAttribute("fustionTimeAll", fustionTimeList);
if(alertInfobo.getStatus()!=null&&alertInfobo.getStatus()==1){
//如果状态是未读 就更新状态为只读
alertInfobo.setStatus(0);
alertService.updateAlertService(alertInfobo);
}
if(alertInfobo.getIfnew()!=null&&alertInfobo.getIfnew()==1){
alertInfobo.setIfnew(0);
alertService.updateAlertService(alertInfobo);
}
if(alertInfobo!=null && alertInfobo.getDomain_id()!=null){
Integer domain_id = alertInfobo.getDomain_id();
Domain domain = domainService.findById(domain_id);
request.setAttribute("department", domain);
}
//触发规则列表
List alertRuleList=new ArrayList();
if(alertInfobo.getRule()!=null && alertInfobo.getRule().trim().length()!=0){
String strs[]= alertInfobo.getRule().split(",");
for(int i=0;i<strs.length;i++){
AlertRuleBO rule = alertRuleService.getByIdAlertRuleService(Integer.parseInt(strs[i]));
alertRuleList.add(rule);
}
}
request.setAttribute("alertruleList", alertRuleList);
}
}
log.setUsername(username);
log.setRoleName(rolenames);
log.setTime(new Timestamp(new Date().getTime()));
log.setModuleName(SystemModelInfo.MOD_AIM);
log.setOperationDesc("查询告警类型信息详情");
log.setControl("成功");
systemlogService.saveSystemLog(log);
return mapping.findForward("alertLinkage");
}catch(Exception e){
log.setUsername(username);
log.setRoleName(rolenames);
log.setTime(new Timestamp(new Date().getTime()));
log.setModuleName(SystemModelInfo.MOD_AIM);
log.setOperationDesc("查询告警类型信息详情");
log.setControl("失败");
systemlogService.saveSystemLog(log);
return null;
}
}
/**
* Frame 修改归并窗这个不涉及到权限 所以方法名称特殊点
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward alertSorUfusion(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
try{
init();
AlertFusionRuleBO entityAlertFusionRuleBO=new AlertFusionRuleBO();
String fusionTime=request.getParameter("fusionTime");
if(fusionTime!=null){
entityAlertFusionRuleBO.setFusionTime(Integer.parseInt(fusionTime));
}
alertFusionRuleServices.saveOrUpdateAlertFusionRuleServices(entityAlertFusionRuleBO);
log.setUsername(username);
log.setRoleName(rolenames);
log.setTime(new Timestamp(new Date().getTime()));
log.setModuleName(SystemModelInfo.MOD_AIM);
log.setOperationDesc("修改归并时间");
log.setControl("成功");
systemlogService.saveSystemLog(log);
return this.getListPageAlertAction(mapping, form, request, response);
}catch(Exception e){
log.setUsername(username);
log.setRoleName(rolenames);
log.setTime(new Timestamp(new Date().getTime()));
log.setModuleName(SystemModelInfo.MOD_AIM);
log.setOperationDesc("修改归并时间");
log.setControl("失败");
systemlogService.saveSystemLog(log);
return null;
}
}
/**========================Spring IOC================================**/
public void setAlertDwrService(AlertDwrServices alertDwrService) {
this.alertDwrService = alertDwrService;
}
public void setAlertTypeService(AlertTypeService alertTypeService) {
this.alertTypeService = alertTypeService;
}
public void setAlertService(AlertService alertService) {
this.alertService = alertService;
}
public void setAlertFusionRuleServices(
AlertFusionRuleServices alertFusionRuleServices) {
this.alertFusionRuleServices = alertFusionRuleServices;
}
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
/*public ManagerService getManagerService() {
return managerService;
}
public void setManagerService(ManagerService managerService) {
this.managerService = managerService;
}*/
public DomainService getDomainService() {
return domainService;
}
public void setDomainService(DomainService domainService) {
this.domainService = domainService;
}
public void setAlertRuleService(AlertRuleService alertRuleService) {
this.alertRuleService = alertRuleService;
}
}