package edu.sjtu.infosec.ismp.manager.VPM.vm.web.actions;
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.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
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.VPM.vm.model.TopClients;
import edu.sjtu.infosec.ismp.manager.VPM.vm.model.TopVirus;
import edu.sjtu.infosec.ismp.manager.VPM.vm.model.VirusAlertsStat;
import edu.sjtu.infosec.ismp.manager.VPM.vm.model.VirusClients;
import edu.sjtu.infosec.ismp.manager.VPM.vm.service.VirusAlertStatService;
import edu.sjtu.infosec.ismp.manager.VPM.vm.service.VirusClientsService;
import edu.sjtu.infosec.ismp.security.Domain;
import edu.sjtu.infosec.ismp.security.OperatorDetails;
public class VirusInfoAction extends Action {
/**
* 注入 service 接口
*/
private VirusClientsService virusClientsService;
private VirusAlertStatService virusAlertsStatService;
private UserService userService;
private DomainService domainService;
public void setVirusClientsService(VirusClientsService virusClientsService) {
this.virusClientsService = virusClientsService;
}
public void setVirusAlertsStatService(VirusAlertStatService virusAlertsStatService) {
this.virusAlertsStatService = virusAlertsStatService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
public void setDomainService(DomainService domainService) {
this.domainService = domainService;
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
try{
String depId = (request.getParameter("di")==null)?null:request.getParameter("di");
/*
* 分页基本信息的定义
* 以及相关信息的计算
*/
int currPage = 0;
Double totalPage = 0d;
Long totalNum = 0l;
String cp = (request.getParameter("cup")==null)?"0":request.getParameter("cup");
if(cp!=null && !cp.equals("")){
currPage = Integer.parseInt(cp);
}
Long starResult = 0l;
Long maxResult = 10l;
starResult = (currPage-1)*maxResult;
Map<Domain, List<VirusClients>> treeStruc = new HashMap<Domain, List<VirusClients>>();
OperatorDetails user = SecurityUserHolder.getCurrentUser();
List<Domain> userDomainList = new ArrayList<Domain>();
if(user != null){
userDomainList = user.getDomainList();
}else{
userDomainList = null;
}
for(Domain dep : userDomainList){
List<VirusClients> vcomList = new ArrayList<VirusClients>();
vcomList = virusClientsService.findAllVirusClientsByDepartment(dep);
treeStruc.put(dep, vcomList);
}
long allNum = 0;
long okNum = 0;
long unOkNum = 0;
Timestamp startTime = null;
Timestamp endTime = null;
Date t = new Date();
int gtNUM = t.getDay();
if(gtNUM == 0){
gtNUM = 7;
}
startTime = new Timestamp(new Date(t.getYear(), t.getMonth(), (t.getDate()-gtNUM), 23,59,59).getTime());
endTime = new Timestamp(new Date(t.getYear(), t.getMonth(), (t.getDate()+1), 0,0,0).getTime());
// This is virus Information
List<VirusClients> virusClientsList = new ArrayList<VirusClients>();
if(depId!=null && !depId.equals("")){
Domain dep = domainService.findById(Integer.parseInt(depId));
virusClientsList = virusClientsService.findAllVirusClientsByDepartment(dep);
}else{
virusClientsList = virusClientsService.findAllVirusClientsByDepartmentListExceptUnknow(userDomainList);
}
List<VirusAlertsStat> alertList = new ArrayList<VirusAlertsStat>();
alertList = virusAlertsStatService.findAllByVirusClientsList(virusClientsList, startTime, endTime, starResult.intValue(), maxResult.intValue());
totalNum = virusAlertsStatService.findAllNumByVirusClientsList(virusClientsList, startTime, endTime);
if(alertList!=null && alertList.size()>0){
allNum = totalNum;
}
okNum = virusAlertsStatService.findKilledNumByVirusClientsList(virusClientsList, startTime, endTime);
unOkNum = allNum - okNum;
// System.out.println("11111111111111111111111111111111111");findAllByVirusClientsList(virusClientsList, startTime, endTime);
// for(Iterator it =alertList.iterator();it.hasNext();){
// VirusAlertsStat vs = (VirusAlertsStat)it.next();
//
// System.out.println("这是查找时间"+vs.getLastFindTime());
// System.out.println("这是病毒数量"+vs.getVCount());
//
// }
// System.out.println("3333333333333333333");
// Iterator iter = treeStruc.entrySet().iterator();
// while (iter.hasNext()) {
// Map.Entry entry = (Map.Entry) iter.next();
// ManagerBO key = (ManagerBO)entry.getKey();
// List<VirusClients> val = (List<VirusClients>)entry.getValue();
// System.out.println("=======================");
// System.out.println(key.getManagerName());
// System.out.println("=======================");
// for(VirusClients vc : val){
// System.out.println(vc.getClientID()+"["+vc.getClientIP()+"]");
// }
// }
// 总页数的计算
totalPage = Math.ceil((double)totalNum/maxResult);
if(totalPage>0 && currPage<=0){
currPage = 1;
}
request.setAttribute("currPage", currPage);
request.setAttribute("totalPage", totalPage.intValue());
int topNum = 10;
List<TopVirus> tvList = null;
List<TopClients> tcList = null;
if(virusClientsList!=null && virusClientsList.size()>0){
tcList = virusAlertsStatService.findTopClientsCountByVirusClientsList(virusClientsList, startTime, endTime, topNum);
tvList = virusAlertsStatService.findTopVirusCountByVirusClientsList(virusClientsList, startTime, endTime, topNum);
}
request.setAttribute("depId", depId);
request.setAttribute("tcList", tcList);
request.setAttribute("tvList", tvList);
request.setAttribute("treeStruc", treeStruc);
request.setAttribute("allNum", allNum);
request.setAttribute("okNum", okNum);
request.setAttribute("unOkNum", unOkNum);
request.setAttribute("alertList", alertList);
}catch(Exception e){
System.out.println("所有病毒告警信息查询出错!");
// e.printStackTrace();
}
return mapping.findForward("virusQuery");
}
}