package edu.sjtu.infosec.ismp.manager.BSAM.service.impl; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.infosec.ismp.manager.rmi.bsam.service.SituationService; import edu.sjtu.infosec.ismp.manager.BSAM.comm.Constants; import edu.sjtu.infosec.ismp.manager.BSAM.dao.ColorThresholdDao; import edu.sjtu.infosec.ismp.manager.BSAM.dao.MachineDao; import edu.sjtu.infosec.ismp.manager.BSAM.model.MachineSituationVO; import edu.sjtu.infosec.ismp.manager.BSAM.service.MachineSituationService; import edu.sjtu.infosec.ismp.manager.SYSM.user.self.comm.SecurityUserHolder; import edu.sjtu.infosec.ismp.security.Domain; public class MachineSituationServiceImpl implements MachineSituationService { private static Logger logger = Logger.getLogger(MachineSituationServiceImpl.class); private MachineDao machineDao; private ColorThresholdDao colorThresholdDao; private SituationService situationService;///RMI public MachineDao getMachineDao() { return machineDao; } public void setMachineDao(MachineDao machineDao) { this.machineDao = machineDao; } public ColorThresholdDao getColorThresholdDao() { return colorThresholdDao; } public void setColorThresholdDao(ColorThresholdDao colorThresholdDao) { this.colorThresholdDao = colorThresholdDao; } public SituationService getSituationService() { return situationService; } public void setSituationService(SituationService situationService) { this.situationService = situationService; } @SuppressWarnings("unchecked") public List getTopMachineSituation(String isAllAndtopNum) { ///解析传递过来的isAllAndtopNum参数 String[] tempArr = isAllAndtopNum.split(","); String isAll = tempArr[0]; String topNum = tempArr[1]; ///用户域列表 List<Domain> userDomainList = SecurityUserHolder.getCurrentUser().getDomainList(); StringBuffer userDomainStr = new StringBuffer(); ///遍历userDomainList,将domain的id组成一个字符串 for (int i = 0; i < userDomainList.size(); i++) { if(i != (userDomainList.size()-1)){ userDomainStr.append(userDomainList.get(i).getId()).append(","); }else{ userDomainStr.append(userDomainList.get(i).getId()); } } ///当前时间 Timestamp currentTime = new Timestamp(System.currentTimeMillis()); ///三分钟之前的时间 Timestamp beginTime = new Timestamp(currentTime.getTime() - Constants.T); String errorMessage = "right"; List<MachineSituationVO> topMachineSituationList = new ArrayList<MachineSituationVO>(); try { ///取得beginTime——endTime时间段内态势前topNum名的主机态势 List<org.infosec.ismp.manager.rmi.bsam.model.MachineSituationVO> tempTopMachineSituationList = situationService.getTopMachineSituation(userDomainStr.toString(), isAll, beginTime, currentTime, Integer.parseInt(topNum)); for (org.infosec.ismp.manager.rmi.bsam.model.MachineSituationVO machineSituationVO : tempTopMachineSituationList) { MachineSituationVO tempMachineSituationVO = new MachineSituationVO(); tempMachineSituationVO.setId(machineSituationVO.getId()); tempMachineSituationVO.setIp(machineSituationVO.getIp()); tempMachineSituationVO.setMachineDescription(machineSituationVO.getMachineDescription()); tempMachineSituationVO.setMachineName(machineSituationVO.getMachineName()); tempMachineSituationVO.setParentName(machineSituationVO.getParentName()); tempMachineSituationVO.setParentType(machineSituationVO.getParentType()); tempMachineSituationVO.setTime(machineSituationVO.getTime()); tempMachineSituationVO.setAttackThreat(machineSituationVO.getAttackThreat()); tempMachineSituationVO.setVirusCondition(machineSituationVO.getVirusCondition()); tempMachineSituationVO.setInvalidConnection(machineSituationVO.getInvalidConnection()); tempMachineSituationVO.setWholeSituation(machineSituationVO.getWholeSituation()); topMachineSituationList.add(tempMachineSituationVO); } } catch (Exception e) { logger.error("后台调用失败!"); errorMessage = "error"; } // /** 以下模拟RMI返回结果测试 **/ // List<MachineSituationVO> topMachineSituationList = new ArrayList<MachineSituationVO>(); // for (int i = 0; i < 20; i++) { // MachineSituationVO tempMachineSituationVO = new MachineSituationVO(); // tempMachineSituationVO.setId(1); // tempMachineSituationVO.setIp("192.168.9.121"); // tempMachineSituationVO.setMachineDescription("这是主机信息"); // tempMachineSituationVO.setTime(currentTime); // tempMachineSituationVO.setAttackThreat(3.5f); // tempMachineSituationVO.setVirusCondition(4.5f); // tempMachineSituationVO.setInvalidConnection(5.5f); // switch (i) { // case 0: // tempMachineSituationVO.setWholeSituation(99.52f);///模拟生成5以内随机数 // break; // case 1: // tempMachineSituationVO.setWholeSituation(85.34f);///模拟生成5-10以内随机数 // break; // case 2: // tempMachineSituationVO.setWholeSituation(82.56f);///模拟生成10-15以内随机数 // break; // case 3: // tempMachineSituationVO.setWholeSituation(78.23f);///模拟生成15-20以内随机数 // break; // case 4: // tempMachineSituationVO.setWholeSituation(75.23f);///模拟生成20-25以内随机数 // break; // case 5: // tempMachineSituationVO.setWholeSituation(72.35f);///模拟生成25-30以内随机数 // break; // case 6: // tempMachineSituationVO.setWholeSituation(68.25f);///模拟生成30-35以内随机数 // break; // case 7: // tempMachineSituationVO.setWholeSituation(62.53f);///模拟生成35-40以内随机数 // break; // case 8: // tempMachineSituationVO.setWholeSituation(58.56f);///模拟生成40-45以内随机数 // break; // case 9: // tempMachineSituationVO.setWholeSituation(55.23f);///模拟生成45-50以内随机数 // break; // case 10: // tempMachineSituationVO.setWholeSituation(51.02f);///模拟生成50-55以内随机数 // break; // case 11: // tempMachineSituationVO.setWholeSituation(49.58f);///模拟生成55-60以内随机数 // break; // case 12: // tempMachineSituationVO.setWholeSituation(46.89f);///模拟生成60-65以内随机数 // break; // case 13: // tempMachineSituationVO.setWholeSituation(40.12f);///模拟生成65-70以内随机数 // break; // case 14: // tempMachineSituationVO.setWholeSituation(34.59f);///模拟生成70-75以内随机数 // break; // case 15: // tempMachineSituationVO.setWholeSituation(30.76f);///模拟生成75-80以内随机数 // break; // case 16: // tempMachineSituationVO.setWholeSituation(25.36f);///模拟生成80-85以内随机数 // break; // case 17: // tempMachineSituationVO.setWholeSituation(24.23f);///模拟生成85-90以内随机数 // break; // case 18: // tempMachineSituationVO.setWholeSituation(18.52f);///模拟生成90-95以内随机数 // break; // case 19: // tempMachineSituationVO.setWholeSituation(7.56f);///模拟生成95-100以内随机数 // break; // case 20: // tempMachineSituationVO.setWholeSituation(2.35f);///模拟生成95-100以内随机数 // break; // } //// tempMachineSituationVO.setWholeSituation((float)Math.random()*100);///模拟生成100以内随机数 // tempMachineSituationVO.setMachineName("主机192.168.9.121"); // tempMachineSituationVO.setParentType("机柜"); // tempMachineSituationVO.setParentName("机柜:7号楼9号楼"); // //// Machine tempMachine = (Machine)machineDao.getObject(Machine.class, 6); //// //// tempMachineSituationVO.setMachineName(tempMachine.getMachineName()); //// //// if(Constants.JiGui.equals(tempMachine.getParentType())){ //// tempMachineSituationVO.setParentType("机柜"); //// tempMachineSituationVO.setParentName(tempMachine.getMachineCabinet().getMachineCabinetName()); //// }else if(Constants.JiFang.equals(tempMachine.getParentType())){ //// tempMachineSituationVO.setParentType("机房"); //// tempMachineSituationVO.setParentName(tempMachine.getMachineRoom().getMachineRoomName()); //// }else if(Constants.AnQuanYu.equals(tempMachine.getParentType())){ //// tempMachineSituationVO.setParentType("安全域"); //// tempMachineSituationVO.setParentName(tempMachine.getDomain().getDomainName()); //// } // // topMachineSituationList.add(tempMachineSituationVO); // } // /** 以上模拟RMI返回结果测试 **/ ///取得颜色阈值列表 List colorThresholdList = colorThresholdDao.getColorThresholdList(); List totalList = new ArrayList(); if(null != topMachineSituationList && null != colorThresholdList){ totalList.add(0, topMachineSituationList);///放入主机态势列表 totalList.add(1, colorThresholdList);///放入颜色阈值列表 totalList.add(2, errorMessage);///将错误信息带到前台页面。便于RMI连接失败时给出友好提示。 } return totalList; } // ==================================================== }