/**
* 上海交通大学
*/
package org.infosec.ismp.manager.server.event.process;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.collections.FastHashMap;
import org.infosec.ismp.manager.rmi.event.dao.IEventGetTopoDao;
import org.infosec.ismp.manager.rmi.event.dao.IEventmoniDao;
import org.infosec.ismp.manager.rmi.event.dao.IEventrealdispDao;
import org.infosec.ismp.manager.rmi.event.dao.impl.EventGetTopoDao;
import org.infosec.ismp.manager.rmi.event.dao.impl.EventmoniDao;
import org.infosec.ismp.manager.rmi.event.dao.impl.EventrealdispDao;
import org.infosec.ismp.manager.rmi.event.modle.Eventmoni;
import org.infosec.ismp.manager.rmi.event.modle.Eventrealdisp;
import org.infosec.ismp.manager.rmi.event.util.EventConstants;
import org.infosec.ismp.manager.server.event.util.Constants;
import org.springframework.transaction.annotation.Transactional;
/**
* 处理后事件入库以及从数据库去数据
*
* @author Jianyu Shen
*
* 2009-6-19 上午11:00:00
*/
public class EventSaveToDB {
public EventSaveToDB() {
init();
}
private IEventrealdispDao eventrealdispDao;
private IEventmoniDao eventmoniDao;
private IEventGetTopoDao eventGetTopoDao;
private EventFilter eventFilter;
public void setEventrealdispDao(EventrealdispDao vEventrealdispDao) {
// System.out.println("set eventrealdispDao+++++++++++++++");
this.eventrealdispDao = vEventrealdispDao;
}
public void setEventmoniDao(EventmoniDao vEventmoniDao) {
// System.out.println("set eventmoniDao==================");
this.eventmoniDao = vEventmoniDao;
}
public void setEventGetTopoDao(EventGetTopoDao vGetTopoDao) {
// System.out.println("set topoEventDao+++++++++++++++");
this.eventGetTopoDao = vGetTopoDao;
}
public void setEventFilter(EventFilter vEventFilter){
this.eventFilter = vEventFilter;
}
public static List<Eventrealdisp> realdispEventBatch = new ArrayList<Eventrealdisp>(); // 实时事件存储控制时临时存放的地方
public static List<Eventmoni> moniEventBatch = new ArrayList<Eventmoni>(); // 统计计算事件存储控制时临时存放的地方
public static List<Object> topoInfos = new ArrayList<Object>(); // 存储拓扑数据库表中提取出来的设备IP和MAC地址
public static List<Object> totalValue; // 存放从数据库取得的日总量
public static FastHashMap topoInfosToMap = new FastHashMap();
List<Object> topos = new ArrayList<Object>();
long timeReal = 0;
long timeMoni = 0;
/**
* 保存实时显示事件入库,控制存储策略 saveRealDispEventList void
*/
public void saveRealDispEventList(List<Eventrealdisp> realEvents) {
realdispEventBatch.addAll(realEvents);
if (realdispEventBatch.size() > 600) {
eventrealdispDao.add(realdispEventBatch);
timeReal = System.currentTimeMillis();
realdispEventBatch.clear();
EventConstants.clearAggreBatch();
} else if ((System.currentTimeMillis() - timeReal) > 60000) {
eventrealdispDao.add(realdispEventBatch);
timeReal = System.currentTimeMillis();
realdispEventBatch.clear();
EventConstants.clearAggreBatch();
}
}
/**
* 保存统计计算事件入库,控制存储策略 saveMoniEventList void
*/
// @Transactional(propagation=)
public void saveMoniEventList(List<Eventmoni> moniEvents) {
moniEventBatch.addAll(moniEvents);
if (moniEventBatch.size() > 600) {
eventmoniDao.add(moniEventBatch);
timeMoni = System.currentTimeMillis();
moniEventBatch.clear();
} else if ((System.currentTimeMillis() - timeMoni) > 60000) {
eventmoniDao.add(moniEventBatch);
timeMoni = System.currentTimeMillis();
moniEventBatch.clear();
}
}
public List<Object> getTopoFromDB() {
// System.out.println("test DB per 1 sec");
topoInfos.clear();
topoInfos = eventGetTopoDao.getTopoInfo();
eventFilter.setTopoEvents(topoInfos);
if (topoInfos != null && topoInfos.size()>0) {
for (int i=0;i<topoInfos.size();i++) {
Object[] obj = (Object[]) topoInfos.get(i);
String key = obj[0].toString().trim()+":"+obj[4].toString().trim();
topoInfosToMap.put(key, obj);
}
}
return topoInfos;
}
/**
* 系统启动后第一次取得topo的IP和MAC
* @return
*/
public List<Object> getTopoEventInfo() {
if (topoInfos.isEmpty()) {
// System.out.println("topo info is null, no topo info");
topoInfos = eventGetTopoDao.getTopoInfo();
topos = topoInfos;
if (topoInfos != null && topoInfos.size()>0) {
for (int i=0;i<topoInfos.size();i++) {
Object[] obj = (Object[]) topoInfos.get(i);
String key = obj[0].toString().trim()+":"+obj[4].toString().trim();
topoInfosToMap.put(key, obj);
}
}
// System.out.println("topo size isssssssssssssssssssssssssssss " + topos.size());
} else {
topos = topoInfos;
}
return topos;
}
//-------2010-7-13新增-------------
public void getUpdateTopoToMap() {
if (!topoInfosToMap.isEmpty()) {
topoInfosToMap.clear();
List<Object> list = eventGetTopoDao.getTopoInfo();
if (list != null && list.size()>0) {
for (int i=0;i<list.size();i++) {
Object[] obj = (Object[]) list.get(i);
String key = obj[0].toString().trim()+":"+obj[4].toString().trim();
topoInfosToMap.put(key, obj);
}
}
}
}
public FastHashMap getTopoToMap() {
// System.out.println("*******EventSaveToDB.topoInfosToMap.isEmpty()******"+topoInfosToMap.isEmpty());
// System.out.println("*******EventSaveToDB.topoInfosToMap******"+topoInfosToMap);
if (topoInfosToMap.isEmpty()) {
List<Object> list = eventGetTopoDao.getTopoInfo();
// System.out.println("*******EventSaveToDB.list****"+list);
if (list != null && list.size()>0) {
for (int i=0;i<list.size();i++) {
Object[] obj = (Object[]) list.get(i);
String key = obj[0].toString().trim()+":"+obj[4].toString().trim();
topoInfosToMap.put(key, obj);
}
}
}
// System.out.println("*******EventSaveToDB.topoInfosToMap**end****"+topoInfosToMap);
return topoInfosToMap;
}
public void getTotalValueFromDB() {
if (totalValue == null) {
// System.out.println("nullllllllll");
} else {
// System.out.println("topo not nullllllllll");
totalValue.clear();
totalValue = null;
Constants.addTotalValue(totalValue);
}
}
public void init() {
getTotalValueFromDB();
}
}