package org.infosec.ismp.situation.manager;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.infosec.ismp.situation.model.MachineCabinetSituation;
import org.infosec.ismp.situation.model.MachineRoomSituation;
import org.infosec.ismp.situation.model.MachineSituation;
import org.infosec.ismp.situation.model.RecordIndex;
import org.infosec.ismp.situation.model.SecurityAreaSituation;
import org.infosec.ismp.situation.model.SituationEvent;
import org.infosec.ismp.situation.service.MachineCabinetSituationService;
import org.infosec.ismp.situation.service.MachineRoomSituationService;
import org.infosec.ismp.situation.service.MachineSituationService;
import org.infosec.ismp.situation.service.RecordIndexService;
import org.infosec.ismp.situation.service.SecurityAreaSituationService;
import org.infosec.ismp.situation.service.SituationEventService;
import org.infosec.ismp.situation.service.impl.SituationPipe;
public class SituationSaveToDB {
protected final Log log = LogFactory.getLog(getClass());
// 机房标识 locationIdentify
public static final Integer JiFang = 1;
// 机柜标识 locationIdentify
public static final Integer JiGui = 2;
// 网络标识 locationIdentify
public static final Integer WangLuo = 4;
// 安全域标识 locationIdentify
public static final Integer AnQuanYu = 8;
// 主机标识 locationIdentify
public static final Integer ZhuJi = 16;
// 攻击威胁指数标识 locationIdentify
public static final Integer AttackThreatZS = 11;
// 病毒疫情指数标识 locationIdentify
public static final Integer VirusYiQingZS = 22;
// 非法连接指数标识 locationIdentify
public static final Integer UnValidConnectionZS = 44;
///整体态势指数标识 locationIdentify
public static final Integer TotalSituation = 88;
/**
* 记录指针类集合
*/
private Map<Integer, RecordIndex> ridexMap = new HashMap<Integer, RecordIndex>();
/**
* 根据index序列加入集合
*
* @param ri
*/
public void setRidexMap(RecordIndex ri) {
ridexMap.put(ri.getIndex(), ri);
}
private MachineCabinetSituationService mcsService;
private MachineRoomSituationService mrsService;
private MachineSituationService msService;
private SecurityAreaSituationService sasService;
private RecordIndexService riService;
private SituationEventService seService;
private SituationPipe situationPipe;
public void setMcsService(MachineCabinetSituationService mcsService) {
this.mcsService = mcsService;
}
public void setMrsService(MachineRoomSituationService mrsService) {
this.mrsService = mrsService;
}
public void setMsService(MachineSituationService msService) {
this.msService = msService;
}
public void setSasService(SecurityAreaSituationService sasService) {
this.sasService = sasService;
}
public void setRiService(RecordIndexService riService) {
this.riService = riService;
}
public void setSituationPipe(SituationPipe situationPipe) {
this.situationPipe = situationPipe;
}
public SituationEventService getSeService() {
return seService;
}
public void setSeService(SituationEventService seService) {
this.seService = seService;
}
private SurroundingsInit surroundingsInit;
public void setSurroundingsInit(SurroundingsInit surroundingsInit) {
this.surroundingsInit = surroundingsInit;
}
/**
* 存放前一次主机的攻击威胁指数
*/
private Map<String, Float> attackMap = new HashMap<String, Float>();
/**
* 存放前一次主机的病毒疫情指数
*/
private Map<String, Float> virusMap = new HashMap<String, Float>();
/**
* 存放前一次主的非法连接指数
*/
private Map<String, Float> illicitConnectMap = new HashMap<String, Float>();
/**
* 存放前一次主机的态势值
*/
private Map<String, Float> machineMap = new HashMap<String, Float>();
/**
* 存放前一次机柜的态势值
*/
private Map<Integer, Float> machineCabinetMap = new HashMap<Integer, Float>();
/**
* 存放前一次机房的态势值
*/
private Map<Integer, Float> machineRommMap = new HashMap<Integer, Float>();
/**
* 存放前一次安全域的态势值
*/
private Map<Integer, Float> securityAreaMap = new HashMap<Integer, Float>();
/**
* 存放前一次网络的态势值
*/
private Map<String, Float> netMap = new HashMap<String, Float>();
/**
* 存放前一次总态势值
*/
private float oldTotalValue = 0;
private int recordId = 0;
public void setRecordId(int recordId) {
this.recordId = recordId;
}
///存放态势到数据库
public void saveSixSituationToDB(int index,
List<MachineSituation> machineSituations,
List<MachineCabinetSituation> machineCabinetSituations,
List<MachineRoomSituation> machineRoomSituations,
List<SecurityAreaSituation> securityAreaSituations,
List<SituationEvent> situationEvents) {
Map<String, Integer> color = surroundingsInit.getColorMap();
int green = color.get("green");
int yellow = color.get("yellow");
msService.save(machineSituations);///保存主机态势到数据库。
situationPipe.addMachineSituations(machineSituations);///将主机态势压入管道,以供RMI抽取
mcsService.save(machineCabinetSituations);///保存机柜态势到数据库。
situationPipe.addMachineCabinetSiuations(machineCabinetSituations);///将机柜态势压入管道,以供RMI抽取
mrsService.save(machineRoomSituations);///保存机房态势到数据库。
situationPipe.addMachineRoomSituations(machineRoomSituations);///将机房态势压入管道,以供RMI抽取
sasService.save(securityAreaSituations);///保存安全域态势到数据库。
situationPipe.addSecurityAreaSituations(securityAreaSituations);///将安全域态势压入管道,以供RMI抽取
seService.save(situationEvents);///保存态势对应事件到数据库
log.info("第" + index + "次运算入数据库!!!!");
}
/**
* 比较色彩区间
*
* @param green
* @param yellow
* @param value
* @return
*/
private int colorInterval(int green, int yellow, float value) {
int res = 1;
if (value > green) {
res++;
}
if (value > yellow) {
res++;
}
return res;
}
/**
* 从主机态势中生成攻击威胁指数告警
*
* @param dates
* @param green
* @param yellow
* @param alarms
* @return
*/
// private List<Alarm> queryMachineAttackAlarm(List<MachineSituation> dates,
// int green, int yellow, List<Alarm> alarms) {
// for (int i = 0; i < dates.size(); i++) {
// MachineSituation date = dates.get(i);
// String ip = date.getIp();
// float newValue = date.getAttackThreat();
// if (attackMap.containsKey(ip)) {
// float oldValue = attackMap.get(ip);
// int old = colorInterval(green, yellow, oldValue);
// int newv = colorInterval(green, yellow, newValue);
// if (newv > old) {
// Alarm alarm = new Alarm();
// alarm.setChangedValue(newValue);
// alarm.setLocation(date.getIp());
// alarm.setName("攻击威胁指数");
// alarm.setTime(date.getTime());
// alarm.setValue(oldValue);
// alarm.setFlag(AttackThreatZS);
// alarms.add(alarm);
// }
// } else {
// Alarm alarm = new Alarm();
// alarm.setChangedValue(newValue);
// alarm.setLocation(date.getIp());
// alarm.setName("攻击威胁指数");
// alarm.setTime(date.getTime());
// alarm.setValue(0);
// alarm.setFlag(AttackThreatZS);
// alarms.add(alarm);
// }
// attackMap.put(ip, newValue);
// }
// return alarms;
// }
/**
* 从主机态势中生成病毒疫情指数告警
*
* @param dates
* @param green
* @param yellow
* @param alarms
* @return
*/
// private List<Alarm> queryMachineVriusAlarm(List<MachineSituation> dates,
// int green, int yellow, List<Alarm> alarms) {
// for (int i = 0; i < dates.size(); i++) {
// MachineSituation date = dates.get(i);
// String ip = date.getIp();
// float newValue = date.getVirusCondition();
// if (virusMap.containsKey(ip)) {
// float oldValue = virusMap.get(ip);
// int old = colorInterval(green, yellow, oldValue);
// int newv = colorInterval(green, yellow, newValue);
// if (newv > old) {
// Alarm alarm = new Alarm();
// alarm.setChangedValue(newValue);
// alarm.setLocation(date.getIp());
// alarm.setName("病毒疫情指数");
// alarm.setTime(date.getTime());
// alarm.setValue(oldValue);
// alarm.setFlag(VirusYiQingZS);
// alarms.add(alarm);
// }
// } else {
// Alarm alarm = new Alarm();
// alarm.setChangedValue(newValue);
// alarm.setLocation(date.getIp());
// alarm.setName("病毒疫情指数");
// alarm.setTime(date.getTime());
// alarm.setValue(0);
// alarm.setFlag(VirusYiQingZS);
// alarms.add(alarm);
// }
// virusMap.put(ip, newValue);
// }
// return alarms;
// }
/**
* 从主机态势中生成非法连接指数告警
*
* @param dates
* @param green
* @param yellow
* @param alarms
* @return
*/
// private List<Alarm> queryMachineillicitConnectAlarm(
// List<MachineSituation> dates, int green, int yellow,
// List<Alarm> alarms) {
// for (int i = 0; i < dates.size(); i++) {
// MachineSituation date = dates.get(i);
// String ip = date.getIp();
// float newValue = date.getInvalidConnection();
// if (illicitConnectMap.containsKey(ip)) {
// float oldValue = illicitConnectMap.get(ip);
// int old = colorInterval(green, yellow, oldValue);
// int newv = colorInterval(green, yellow, newValue);
// if (newv > old) {
// Alarm alarm = new Alarm();
// alarm.setChangedValue(newValue);
// alarm.setLocation(date.getIp());
// alarm.setName("非法连接指数");
// alarm.setTime(date.getTime());
// alarm.setValue(oldValue);
// alarm.setFlag(UnValidConnectionZS);
// alarms.add(alarm);
// }
// } else {
// Alarm alarm = new Alarm();
// alarm.setChangedValue(newValue);
// alarm.setLocation(date.getIp());
// alarm.setName("非法连接指数");
// alarm.setTime(date.getTime());
// alarm.setValue(0);
// alarm.setFlag(UnValidConnectionZS);
// alarms.add(alarm);
// }
// illicitConnectMap.put(ip, newValue);
// }
// return alarms;
// }
/**
* 从主机态势中生成主机整体态势告警
*
* @param dates
* @param green
* @param yellow
* @param alarms
* @return
*/
// private List<Alarm> queryMachineAlarm(List<MachineSituation> dates,
// int green, int yellow, List<Alarm> alarms) {
// for (int i = 0; i < dates.size(); i++) {
// MachineSituation date = dates.get(i);
// String ip = date.getIp();
// float newValue = date.getWholeSituation();
// if (machineMap.containsKey(ip)) {
// float oldValue = machineMap.get(ip);
// int old = colorInterval(green, yellow, oldValue);
// int newv = colorInterval(green, yellow, newValue);
// if (newv > old) {
// Alarm alarm = new Alarm();
// alarm.setChangedValue(newValue);
// alarm.setLocation(date.getIp());
// alarm.setName("主机整体态势");
// alarm.setTime(date.getTime());
// alarm.setValue(oldValue);
// alarm.setFlag(ZhuJi);
// alarms.add(alarm);
// }
// } else {
// Alarm alarm = new Alarm();
// alarm.setChangedValue(newValue);
// alarm.setLocation(date.getIp());
// alarm.setName("整体态势");
// alarm.setTime(date.getTime());
// alarm.setValue(0);
// alarm.setFlag(ZhuJi);
// alarms.add(alarm);
// }
// machineMap.put(ip, newValue);
// }
// return alarms;
// }
/**
* 从机柜态势中生成机柜整体态势告警
*
* @param dates
* @param green
* @param yellow
* @param alarms
* @return
*/
// private List<Alarm> queryMachineCabinetAlarm(
// List<MachineCabinetSituation> dates, int green, int yellow,
// List<Alarm> alarms) {
// for (int i = 0; i < dates.size(); i++) {
// MachineCabinetSituation date = dates.get(i);
// int id = date.getMachineCabinetId();
// float newValue = date.getWholeSituation();
// if (machineCabinetMap.containsKey(id)) {
// float oldValue = machineCabinetMap.get(id);
// int old = colorInterval(green, yellow, oldValue);
// int newv = colorInterval(green, yellow, newValue);
// if (newv > old) {
// Alarm alarm = new Alarm();
// alarm.setChangedValue(newValue);
// alarm.setLocation(date.getName());
// alarm.setName("机柜整体态势");
// alarm.setTime(date.getTime());
// alarm.setValue(oldValue);
// alarm.setFlag(JiGui);
// alarms.add(alarm);
// }
// } else {
// Alarm alarm = new Alarm();
// alarm.setChangedValue(newValue);
// alarm.setLocation(date.getName());
// alarm.setName("机柜整体态势");
// alarm.setTime(date.getTime());
// alarm.setValue(0);
// alarm.setFlag(JiGui);
// alarms.add(alarm);
// }
// machineCabinetMap.put(id, newValue);
// }
// return alarms;
// }
/**
* 从机房态势中生成机房整体态势告警
*
* @param dates
* @param green
* @param yellow
* @param alarms
* @return
*/
// private List<Alarm> queryMachineRoomAlarm(List<MachineRoomSituation> dates,
// int green, int yellow, List<Alarm> alarms) {
// for (int i = 0; i < dates.size(); i++) {
// MachineRoomSituation date = dates.get(i);
// Integer name = date.getManagerID();
// float newValue = date.getWholeSituation();
// if (machineRommMap.containsKey(name)) {
// float oldValue = machineRommMap.get(name);
// int old = colorInterval(green, yellow, oldValue);
// int newv = colorInterval(green, yellow, newValue);
// if (newv > old) {
// Alarm alarm = new Alarm();
// alarm.setChangedValue(newValue);
// alarm.setLocation(departmentService.findManagerById(
// date.getManagerID()).getManagerName());
// alarm.setName("机房整体态势");
// alarm.setTime(date.getTime());
// alarm.setValue(oldValue);
// alarm.setFlag(JiFang);
// alarms.add(alarm);
// }
// } else {
// Alarm alarm = new Alarm();
// alarm.setChangedValue(newValue);
// alarm.setLocation(departmentService.findManagerById(
// date.getManagerID()).getManagerName());
// alarm.setName("机房整体态势");
// alarm.setTime(date.getTime());
// alarm.setValue(0);
// alarm.setFlag(JiFang);
// alarms.add(alarm);
// }
// machineRommMap.put(name, newValue);
// }
// return alarms;
// }
/**
* 从安全域态势中生成安全域整体态势告警
*
* @param dates
* @param green
* @param yellow
* @param alarms
* @return
*/
// private List<Alarm> querySecurityAreaAlarm(
// List<SecurityAreaSituation> dates, int green, int yellow,
// List<Alarm> alarms) {
// for (int i = 0; i < dates.size(); i++) {
// SecurityAreaSituation date = dates.get(i);
// int id = date.getSecurityAreaId();
// float newValue = date.getWholeSituation();
// if (securityAreaMap.containsKey(id)) {
// float oldValue = securityAreaMap.get(id);
// int old = colorInterval(green, yellow, oldValue);
// int newv = colorInterval(green, yellow, newValue);
// if (newv > old) {
// Alarm alarm = new Alarm();
// alarm.setChangedValue(newValue);
// alarm.setLocation(date.getName());
// alarm.setName("安全域整体态势");
// alarm.setTime(date.getTime());
// alarm.setValue(oldValue);
// alarm.setFlag(AnQuanYu);
// alarms.add(alarm);
// }
// } else {
// Alarm alarm = new Alarm();
// alarm.setChangedValue(newValue);
// alarm.setLocation(date.getName());
// alarm.setName("安全域整体态势");
// alarm.setTime(date.getTime());
// alarm.setValue(0);
// alarm.setFlag(AnQuanYu);
// alarms.add(alarm);
// }
// securityAreaMap.put(id, newValue);
// }
// return alarms;
// }
/**
* 从网络态势中生成网络整体态势告警
*
* @param dates
* @param green
* @param yellow
* @param alarms
* @return
*/
// private List<Alarm> queryNetAlarm(List<NetSituation> dates, int green,
// int yellow, List<Alarm> alarms) {
// for (int i = 0; i < dates.size(); i++) {
// NetSituation date = dates.get(i);
// String name = date.getName();
// float newValue = date.getWholeSituation();
// if (netMap.containsKey(name)) {
// float oldValue = netMap.get(name);
// int old = colorInterval(green, yellow, oldValue);
// int newv = colorInterval(green, yellow, newValue);
// if (newv > old) {
// Alarm alarm = new Alarm();
// alarm.setChangedValue(newValue);
// alarm.setLocation(date.getName());
// alarm.setName("网络整体态势");
// alarm.setTime(date.getTime());
// alarm.setValue(oldValue);
// alarm.setFlag(WangLuo);
// alarms.add(alarm);
// }
// } else {
// Alarm alarm = new Alarm();
// alarm.setChangedValue(newValue);
// alarm.setLocation(date.getName());
// alarm.setName("网络整体态势");
// alarm.setTime(date.getTime());
// alarm.setValue(0);
// alarm.setFlag(WangLuo);
// alarms.add(alarm);
// }
// netMap.put(name, newValue);
// }
// return alarms;
// }
// private List<Alarm> queryTotalAlarm(TotalMachineRoomSituation date,
// int green, int yellow, List<Alarm> alarms) {
// float newValue = date.getValue();
// int old = colorInterval(green, yellow, oldTotalValue);
// int newv = colorInterval(green, yellow, newValue);
// if (newv > old) {
// Alarm alarm = new Alarm();
// alarm.setChangedValue(newValue);
// alarm.setLocation("总态势");
// alarm.setName("总态势");
// alarm.setTime(date.getTime());
// alarm.setValue(newValue);
// alarm.setFlag(TotalSituation);
// alarms.add(alarm);
// }
// oldTotalValue = newValue;
// return alarms;
// }
}