package edu.sjtu.infosec.ismp.manager.WSM.service.impl; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Timer; import java.util.TimerTask; import org.infosec.ismp.manager.rmi.wsm.model.SiteCheckRmiModel; import org.infosec.ismp.manager.rmi.wsm.service.SiteCheckRmiInterface; import edu.sjtu.infosec.ismp.manager.WSM.dao.WebMonitorRecordsDao; import edu.sjtu.infosec.ismp.manager.WSM.model.WebMonitorRecords; import edu.sjtu.infosec.ismp.manager.WSM.service.WebMonitorRecordsService; import edu.sjtu.infosec.ismp.security.Domain; public class WebMonitorRecordsServiceImpl implements WebMonitorRecordsService { private Timer timer = new Timer(); private WebMonitorRecordsDao webMonitorRecordsDao; private SiteCheckRmiInterface siteCheckRmiInterface; private Map<String,String> hm=new HashMap<String,String>(); public void setWebMonitorRecordsDao(WebMonitorRecordsDao webMonitorRecordsDao) { this.webMonitorRecordsDao = webMonitorRecordsDao; } public void setSiteCheckRmiInterface(SiteCheckRmiInterface siteCheckRmiInterface) { this.siteCheckRmiInterface = siteCheckRmiInterface; } /** * 获取后台传过来的信息 */ public Object[] findWebStates(String nodeId,Integer timeOut){ Object[] obj = null; SiteCheckRmiModel webStates=null; try { if(hm.get("run")!="yes" && hm.get("flag")=="1"){ TimerTask timerTask = new TimerTask(){ public void run(){ hm.put("flag", "0"); hm.put("run", "yes"); } }; timer.schedule(timerTask,0,(5 * 60 * 1000));// 60 * 1000 } long start =System.currentTimeMillis(); if(hm.get("flag")=="1"){ hm.put(nodeId, "yes"); }else{ webStates=siteCheckRmiInterface.getSiteCheck(nodeId); } long end =System.currentTimeMillis(); if(webStates!=null&&!"".equals(webStates)){ //yes:超时 no:未超时 if((start-end)*0.001>=timeOut){ hm.put(nodeId, "yes"); }else{ hm.put(nodeId, "no"); } obj=new Object[4]; if(webStates.getPingStatus().equals("Up")){ obj[0]="在线"; }else{ obj[0]="不在线"; } obj[1]=webStates.getResponseTime(); if(webStates.getSiteCheckStatus().equals("NORMAL")){ obj[2]="页面未更改"; obj[3]=true; }else{ obj[2]="页面被更改"; obj[3]=false; } } } catch (Exception e) { hm.put(nodeId, "yes"); hm.put("flag", "1"); e.printStackTrace(); } System.out.println("---flag---"+hm.get("flag")); return obj; } /** * 获取状态是否超时 */ public String findOverStates (String nodeId){ String state=hm.get(nodeId); System.out.println(nodeId+"=nodeid=====state=="+state); return state; } /** * 认可 */ public boolean isChange(String nodeId){ boolean falg = false;; try { SiteCheckRmiModel webStates=siteCheckRmiInterface.getSiteCheck(nodeId); if(webStates!=null&&!"".equals(webStates)){ WebMonitorRecords webMonitor=findByNodeId(nodeId); if(webStates.getSiteCheckStatus()!=null&&webStates.getSiteCheckStatus()!=webMonitor.getChangeCode()){ webMonitor.setChangeCode(webStates.getSiteCheckStatus()); webMonitorRecordsDao.saveOrUpdate(webMonitor); falg=true; //发送数据给后台 siteCheckRmiInterface.resetSiteCheck(nodeId); } } } catch (Exception e) { falg=false; throw new RuntimeException("认可-运行时异常"); } return falg; } /** * 通过nodeId查找网站安全检测信息 */ public WebMonitorRecords findByNodeId(String nodeId){ WebMonitorRecords webMonitorRecords = webMonitorRecordsDao.findByNodeId(nodeId); return webMonitorRecords; } /** * 网站安全检测分页信息 */ public List<WebMonitorRecords> findAll(int startResult, int maxResult) { return webMonitorRecordsDao.findAll(startResult,maxResult); } /** * 查询网站安全检测 */ public WebMonitorRecords findById(Integer id) { return webMonitorRecordsDao.findById(id); } /** * 删除网站安全检测信息 */ public void remove(Integer id) { if(id != null) { WebMonitorRecords webMonitorRecords = webMonitorRecordsDao.findById(id); webMonitorRecordsDao.remove(webMonitorRecords); } } /** * 批量删除网站安全检测信息 */ public void remove(String[] ids) { List<WebMonitorRecords> WebMonitorList = new ArrayList<WebMonitorRecords>(); for(int i=0;i<ids.length;i++) { WebMonitorRecords webMonitorRecords = webMonitorRecordsDao.findById(Integer.parseInt(ids[i])); WebMonitorList.add(webMonitorRecords); } if(WebMonitorList.size()>0) { webMonitorRecordsDao.remove(WebMonitorList); } } /** * 保存/更新网站安全检测信息 */ public void saveOrUpdate(WebMonitorRecords webMonitorRecords) { webMonitorRecordsDao.saveOrUpdate(webMonitorRecords); } public int getCount() { return webMonitorRecordsDao.getCount(); } /** * 网站安全检测分页信息 */ public List<WebMonitorRecords> findAllByDomain(List<Domain> userDomainList, int startResult, int maxResult) { return webMonitorRecordsDao.findAllByDomain(userDomainList,startResult,maxResult); } public int getCountByDomain(List<Domain> userDomainList) { return webMonitorRecordsDao.getCountByDomain(userDomainList); } public void saveAllMonitor(WebMonitorRecords Monitor) { Boolean flag=true; if(Monitor.getId()!=null){ flag=false; } try{ saveOrUpdate(Monitor); //发送数据给后台 if(flag){ siteCheckRmiInterface.addSiteCheck(Monitor.getDomain().getId()+"", Monitor.getNodeId()+"", Monitor.getUrl(), Monitor.getTimeInterval(), Monitor.getTimeOut()); }else{ siteCheckRmiInterface.updateSiteCheck(Monitor.getNodeId(), Monitor.getUrl(), Monitor.getTimeInterval(), Monitor.getTimeOut()); } }catch (Exception e) { //e.printStackTrace(); throw new RuntimeException("新增/修改-运行时异常"); } } public void removeAllMonitor(WebMonitorRecords record) { try { String nodeId = record.getNodeId(); webMonitorRecordsDao.remove(record); siteCheckRmiInterface.removeSiteCheck(nodeId); } catch (Exception e) { throw new RuntimeException("删除-运行时异常"); } } }