diff --git a/.classpath b/.classpath index 4c22a35..b151010 100644 --- a/.classpath +++ b/.classpath @@ -1,36 +1,37 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/nutz-1.r.66.jar b/lib/nutz-1.r.66.jar new file mode 100644 index 0000000..db1b197 Binary files /dev/null and b/lib/nutz-1.r.66.jar differ diff --git a/src/com/nms/server/bean/DetectInfo.java b/src/com/nms/server/bean/DetectInfo.java index 635054e..453b528 100644 --- a/src/com/nms/server/bean/DetectInfo.java +++ b/src/com/nms/server/bean/DetectInfo.java @@ -3,15 +3,18 @@ package com.nms.server.bean; import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.concurrent.atomic.AtomicInteger; import com.fang.U; import com.nms.server.common.Common; -import com.nms.server.common.Config; import com.nms.server.dao.OracleToMysql; public class DetectInfo { + /** + * 数组大小 + */ + public static final int DETEC_ARR_SIZE = 34; + public static final int SEQID = 0; //seqId public static final int SETINFOID = 1; //监测设置ID public static final int CHECKTYPE = 2; //监测类别 @@ -55,6 +58,10 @@ public class DetectInfo { public static final int SHOWNUMLIST = 30; public static final int PLEVELLIST = 31; public static final int ALARMLIST = 32; + /** + * 告警恢复标识 + */ + public static final int WARN_2_OK = 33; /** * detect_queue 的 key diff --git a/src/com/nms/server/common/Common.java b/src/com/nms/server/common/Common.java index 4875049..5c533d5 100644 --- a/src/com/nms/server/common/Common.java +++ b/src/com/nms/server/common/Common.java @@ -14,6 +14,7 @@ import java.sql.Statement; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.HashMap; @@ -35,6 +36,8 @@ import java.util.concurrent.atomic.AtomicInteger; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; +import org.nutz.json.Json; +import org.nutz.json.JsonFormat; import org.snmp4j.Snmp; import com.fang.U; @@ -51,7 +54,6 @@ import com.nms.server.bean.SetInfo; import com.nms.server.bean.SimpleNode; import com.nms.server.bean.TableColumnsModel; import com.nms.server.bean.TableModel; -import com.nms.server.dao.CommonDao; import com.nms.server.thread.alarmData.AlarmDataResoveThread; import com.nms.server.thread.detecData.NewDetecDataResoveThread; import com.nms.server.thread.detectDataHandler.DataInsertManagerThread; @@ -1538,11 +1540,10 @@ public class Common { //获得当前的报警设置信息,与相应字段值比较 public static String[] getAlarmState(List alarmInfos, String[] sysData) throws Exception{ String[] strs = null; -// logger.debug("!!you gaojing o "+(alarmInfos==null?null:alarmInfos.size())); + logger.debug("alarm Infos : "+(alarmInfos==null?null:Json.toJson(alarmInfos,JsonFormat.tidy()))); if(alarmInfos!=null){ strs = new String[]{"", "", ""}; for(AlarmInfo alarm : alarmInfos){ -// logger.debug("!!you gaojing o "+alarm.getPoliceValue()); if(sysData.length>=alarm.getShowNum()){ if(sysData[alarm.getShowNum()-1]==null){ logger.error("Monitoring data is empty and can not do alarm verification"); @@ -2505,6 +2506,188 @@ public class Common { } + /** + * 告警判断 + * + * @return + */ + public static Object alarmJudgement(List> data) { + if(data != null) { + List pubData = data.get(0); + if(pubData.size() > 12){//旧格式 解析 + logger.debug("旧格式数据,暂不实现"); + }else if(pubData.size() <12){ + logger.debug( "基本数据解析长度:"+pubData.size()+" 小于最小解析标准,不予解析;"); + }else{//新格式 解析 + /** + * 公共部分解析格式: + * seqId, + * 监测设置ID, + * 监测类别, + * 进程名称(监测类别设置名称), + * 监测服务启动时间, + * 检测时延(秒), + * 本次检测时间, + * 尝试次数, + * 下次计划监测时间, + * 执行状态是否成功是否正常, + * 状态信息(描述信息), + * 性能数据 + **/ + logger.debug(String.format("告警判断-新格式数据:%s", Arrays.toString(pubData.toArray()))); + String seqId = pubData.get(0);//seqId + String setInfoId = pubData.get(1);//监测设置id + String checkType = pubData.get(2);// 监测类别 + String detectIden = pubData.get(3);//进程名称(监测类别设置名称) + StringBuilder infoSb = new StringBuilder(); + int detectStatus = Integer.valueOf(pubData.get(9));//状态 + List alarmInfoList = Common.getAlarmInfoMap().get(setInfoId); + if(data.size() < 3) { + return data; + } + for(int i = 2 ;i< data.size();i++) { + List detailList = data.get(i);//每一行的监测数据 + if(detailList != null && detailList.size() > 0) { + int maxAlarmLevel = 99; + String maxShowNum = "" ; + detailList.add(0, "");//告警序号 + detailList.add(1, "");//告警级别 + detailList.add(2, "");//告警值 + if(alarmInfoList != null && alarmInfoList.size() > 0) { + for(AlarmInfo alarm : alarmInfoList) { + if (detailList.size() < alarm.getShowNum()) {// 得到的数据个数和告警列数比较 + continue; + } + String value = detailList.get(alarm.getShowNum() -1+3); + boolean alarmFlag = false; + /** + * 过滤标识判断 + * 1.指定了特定的标识: + * (1).当前标识非空:不在指定标识内,则不做告警判断;在,则做告警判断 + * (2).当前标识为空:空不在指定标识内,不做告警判断 + * 2.未指定特定的标识:所有标识都进行告警判断 + */ + String marker = alarm.getMarker(); + Integer markerShowNum = alarm.getMarkerFiledShowNum(); + String markerCurVal = ""; + //若未指定标识字段,则从DC传递到NC的json字符串中markerShowNum的值为0 + if(markerShowNum!=null && markerShowNum>0 && StringUtils.isNotBlank(marker)) { + markerCurVal = detailList.get(markerShowNum -1+3);//当前条详细监测数据的标识符 + String sperator = Config.getString("alarm.set.marker.separator", "|"); + if(StringUtils.isNotBlank(markerCurVal)) { + if(!(sperator+marker.trim()+sperator).toLowerCase().contains((sperator+markerCurVal.trim()+sperator).toLowerCase())) {//当前标识不在指定的标识里 + continue; + } + }else { + continue; + } + } + + if ("equals".equalsIgnoreCase(alarm.getPoliceSysmbols())) {//相同 + if(value.equals(alarm.getPoliceValue())){ + alarmFlag = true; + } + } else if ("include".equalsIgnoreCase(alarm.getPoliceSysmbols())) {//包含告警值内容 + if(value.contains(alarm.getPoliceValue())){ + alarmFlag = true; + } + } else if ("exclude".equalsIgnoreCase(alarm.getPoliceSysmbols())) {//不包含告警值内容 + if(!value.contains(alarm.getPoliceValue())){ + alarmFlag = true; + } + } else { + double result = Double.parseDouble(value) - Double.parseDouble(alarm.getPoliceValue()); + if ((">".equals(alarm.getPoliceSysmbols()) && result > 0) + || ("<".equals(alarm.getPoliceSysmbols()) && result < 0) + || ("=".equals(alarm.getPoliceSysmbols()) && result == 0) + || (">=".equals(alarm.getPoliceSysmbols()) && result >= 0) + || ("<=".equals(alarm.getPoliceSysmbols()) && result <=0) ) { + alarmFlag = true; + } + } + String sysmbol = getAlarmSymbol(alarm.getPoliceSysmbols(), alarmFlag); + if(alarmFlag){ + detectStatus = 0; + //性能信息 + if(StringUtils.isNotBlank(markerCurVal)) { + infoSb.append("
[").append(markerCurVal).append("]"); + } + infoSb.append(alarm.getFiledCommonts()).append(":") + .append(detailList.get(alarm.getShowNum()-1+3)) + .append("(").append(alarm.getPoliceUnit()).append(") ") + .append(sysmbol).append("i18n_client.GetInfoRun.warningValue_n81i") + .append(alarm.getPoliceValue()).append("(").append(alarm.getPoliceUnit()).append(") ") + .append(" i18n_client.GetInfoRun.abnormal_n81i;"); + if (maxAlarmLevel > alarm.getPoliceLevel()) {// 保留本次最高告警级别,值越小级别越高 + maxAlarmLevel = alarm.getPoliceLevel(); + maxShowNum = alarm.getShowNum()+""; + } + detailList.set(0, maxShowNum);//告警序号 + detailList.set(1, maxAlarmLevel+"");//告警级别 + detailList.set(2, alarm.getPoliceValue());//告警值 + } + }//for end + } + } + } + pubData.set(9, detectStatus+""); + if(infoSb.length()>0) {//状态信息 + String perform = pubData.get(11); + if(StringUtils.isNotBlank(perform)) { + infoSb.insert(0, perform); + }else { + infoSb.delete(0, 5); + } + pubData.set(10, infoSb.toString()); + } + } + } + if(logger.isDebugEnabled()) { + logger.debug("告警判断-结果: " + Json.toJson(data, JsonFormat.tidy())); + } + return data; + } + + + public static String getAlarmSymbol(String oldSymbol, boolean alarmFlag){ + String symbol = ""; + if(alarmFlag){ + if(">".equals(oldSymbol)){ + symbol = "i18n_client.GetInfoRun.gt_n81i"; + }else if(">=".equals(oldSymbol)){ + symbol = "i18n_client.GetInfoRun.out_n81i"; + }else if("<".equals(oldSymbol)){ + symbol = "i18n_client.GetInfoRun.lt_n81i"; + }else if("<=".equals(oldSymbol)){ + symbol = "i18n_client.GetInfoRun.in_n81i"; + }else if("=".equals(oldSymbol)){ + symbol = "i18n_client.GetInfoRun.eq_n81i"; + }else{ + symbol = oldSymbol; + } + }else{ + if(">".equals(oldSymbol)){ + symbol = "i18n_client.GetInfoRun.in_n81i"; + }else if(">=".equals(oldSymbol)){ + symbol = "i18n_client.GetInfoRun.lt_n81i"; + }else if("<".equals(oldSymbol)){ + symbol = "i18n_client.GetInfoRun.out_n81i"; + }else if("<=".equals(oldSymbol)){ + symbol = "i18n_client.GetInfoRun.gt_n81i"; + }else if("=".equals(oldSymbol)){ + symbol = "i18n_client.GetInfoRun.notEquels_n81i"; + }else if("equals".equalsIgnoreCase(oldSymbol)){ + symbol = "not equals"; + }else if("include".equalsIgnoreCase(oldSymbol)){ + symbol = "exclude"; + }else if("exclude".equalsIgnoreCase(oldSymbol)){ + symbol = "include"; + } + } + return symbol; + } + + public static void main(String [] args){ diff --git a/src/com/nms/server/thread/detectDataHandler/DataResolveThread.java b/src/com/nms/server/thread/detectDataHandler/DataResolveThread.java index 6cfc9de..b4279da 100644 --- a/src/com/nms/server/thread/detectDataHandler/DataResolveThread.java +++ b/src/com/nms/server/thread/detectDataHandler/DataResolveThread.java @@ -397,7 +397,7 @@ public class DataResolveThread implements Runnable{ delyFlag = false; } Calendar arriveTime = Calendar.getInstance(); - detectInfo = new Object[33]; + detectInfo = new Object[DetectInfo.DETEC_ARR_SIZE]; //detectInfo[DetectInfo.null] = (CSVUtils.csvBytesPrinter1(strsList, Constants.COMMON_TEXT_CODING)); detectInfo[DetectInfo.SEQID] = (seqId); detectInfo[DetectInfo.SETINFOID] = (setInfoId); @@ -859,7 +859,7 @@ public class DataResolveThread implements Runnable{ //公共信息集合 Calendar arriveTime = Calendar.getInstance(); - detectInfo = new Object[33]; + detectInfo = new Object[DetectInfo.DETEC_ARR_SIZE]; //detectInfo[DetectInfo.null] = (CSVUtils.csvBytesPrinter1(strsList, Constants.COMMON_TEXT_CODING)); detectInfo[DetectInfo.SEQID] = (seqId); detectInfo[DetectInfo.SETINFOID] = (setInfoId); diff --git a/src/com/nms/server/thread/detectDataHandler/DetectInfoInsertThread.java b/src/com/nms/server/thread/detectDataHandler/DetectInfoInsertThread.java index f3bf869..180b020 100644 --- a/src/com/nms/server/thread/detectDataHandler/DetectInfoInsertThread.java +++ b/src/com/nms/server/thread/detectDataHandler/DetectInfoInsertThread.java @@ -108,7 +108,7 @@ public class DetectInfoInsertThread implements Runnable { } catch (Exception e) { logger.error("error", e); }finally { - db.closeQuiet(infoStmt,warnStmt,emailStmt,statusChangeStmt,conn,infoNewInsertStmt,infoNewUpdateStmt); + db.closeQuiet(infoStmt,warnStmt,emailStmt,statusChangeStmt,conn,infoNewInsertStmt,infoNewUpdateStmt,warnUpdateStmt); infoStmt = null; warnStmt = null; emailStmt = null; @@ -118,6 +118,7 @@ public class DetectInfoInsertThread implements Runnable { conn = null; infoNewInsertStmt=null; infoNewUpdateStmt=null; + warnUpdateStmt = null; } sw.end(); logger.info("监测数据info信息解析入库,耗时: " + U.StopWatch.toString(sw.total()) + " ,共 " + count + " 条"); @@ -223,8 +224,12 @@ public class DetectInfoInsertThread implements Runnable { // 入库 saveToNew(insertDataTonew, 0); + sw.tag("insertDataTonew"); + logger.debug("耗时统计: insertDataTonew " + sw.toString(sw.between("insertDataTonew",l + "e"))); + saveToNew(updateDataTonew, 1); - logger.info("info_new table update success! data size : "+(insertDataTonew.size()+updateDataTonew.size())); + sw.tag("updateDataTonew"); + logger.debug("耗时统计: updateDataTonew " + sw.toString(sw.between("updateDataTonew","insertDataTonew"))); saveInfo(params); sw.tag(l + "sa"); logger.debug("入库完成,耗时:" + U.StopWatch.toString(sw.between(l + "sa", l + "e")) ); @@ -243,10 +248,13 @@ public class DetectInfoInsertThread implements Runnable { */ private void saveInfo(List infoList) throws SQLException { Object[] temInfo = null; + StopWatch sw = new StopWatch(); + sw.tag("start"); try { int infoCount = infoList.size(); int warnCount = 0; int emailCount = 0; + int warnRecoveryCount = 0; Map statusChangeMap = U.newHashMap(); boolean emailFlag = Constants.flag_email == 1;// 是否启用 email logger.info(emailFlag?"邮件功能開啟" : "邮件功能已关闭"); @@ -388,17 +396,39 @@ public class DetectInfoInsertThread implements Runnable { } } } + + /** + * 状态恢复 + */ + if(temInfo[DetectInfo.WARN_2_OK] != null && temInfo[DetectInfo.WARN_2_OK].equals(1)) { + Object[] params = new Object[] {temInfo[DetectInfo.SEQID],temInfo[DetectInfo.SETINFOID]}; + addRecordToStatement(warnUpdateStmt, params); + warnRecoveryCount ++; + } + + ite.remove(); } + sw.tag("while"); + logger.debug("耗时统计: add statement " + sw.toString(sw.between("while","start"))); if(infoCount >0){ infoStmt.executeBatch(); } + sw.tag("info"); + logger.debug("耗时统计: info executeBatch " + sw.toString(sw.between("info","while"))); + if(warnCount >0){ warnStmt.executeBatch(); } + + sw.tag("warn"); + logger.debug("耗时统计: warnStmt executeBatch " + sw.toString(sw.between("warn","info"))); + if(emailCount >0){ emailStmt.executeBatch(); } + sw.tag("email"); + logger.debug("耗时统计: email executeBatch " + sw.toString(sw.between("email","warn"))); if(statusChangeMap.size() > 0){ if(statusChangeStmt == null){ @@ -412,10 +442,19 @@ public class DetectInfoInsertThread implements Runnable { } statusChangeStmt.executeBatch(); } - - warnUpdateStmt.executeBatch();//update warning + sw.tag("status"); + logger.debug("耗时统计: status executeBatch " + sw.toString(sw.between("status","email"))); + if(warnRecoveryCount > 0) { + warnUpdateStmt.executeBatch(); + } + //warnUpdateStmt.executeBatch();//update warning + sw.tag("warnUpdate"); + logger.debug("耗时统计: warnUpdate executeBatch " + sw.toString(sw.between("warnUpdate","status"))); conn.commit(); + sw.tag("commit"); + logger.debug("耗时统计: commit executeBatch " + sw.toString(sw.between("commit","warnUpdate"))); + logger.info("批量保存,info :" + infoCount + " , warn : " + warnCount + " ,email : "+ emailCount); } catch (Exception e) { logger.error("info save error ,temInfo : "+Arrays.toString(temInfo) ,e); @@ -433,6 +472,9 @@ public class DetectInfoInsertThread implements Runnable { if(statusChangeStmt != null){ statusChangeStmt.clearBatch(); } + if(warnUpdateStmt != null) { + warnUpdateStmt.clearBatch(); + } } } @@ -582,12 +624,12 @@ public class DetectInfoInsertThread implements Runnable { /* 判断状态变更 */ stateChange(newDetecInfo, oldDetecInfo); } else {// 监测时间小于数据库中监测数据的时间,说明当前需要入库的监测为延迟数据 - if (state != 1) {// 延迟数据监测状态没有成功,数据库入库的是正常数据,补录一条报警信息 + /*if (state != 1) {// 延迟数据监测状态没有成功,数据库入库的是正常数据,补录一条报警信息 if ((Integer) newDetecInfo[DetectInfo.STATE] == 1 && (Integer) oldDetecInfo[DetectInfo.PLEVEL] == 99) { newDetecInfo[DetectInfo.APPENDWARNINGINFO] = oldDetecInfo; } - } + }*/ } } else {// 大于两条数据时,排序之后判断数据库的数据是否为最接近的时间数据 // 未入库的数据排序 @@ -791,6 +833,7 @@ public class DetectInfoInsertThread implements Runnable { if (checkType.equalsIgnoreCase(Constants.DETEC_NMSC_STR)) { newDetecInfo[DetectInfo.STATUSCHANGTIME] = (checkTime); } + newDetecInfo[DetectInfo.WARN_2_OK] = 1;//告警恢复正常 // //update warning table // collectWarnUpdateInfo(newDetecInfo); } @@ -902,15 +945,14 @@ public class DetectInfoInsertThread implements Runnable { if((Long)newDeteInfo[DetectInfo.CHECKTIME]>(Long)oldDetecInfo[DetectInfo.CHECKTIME]){ newDataList.add(newDeteInfo); } - if((Integer)newDeteInfo[DetectInfo.STATE]==1){ + /*if((Integer)newDeteInfo[DetectInfo.STATE]==1 && (Integer)oldDetecInfo[DetectInfo.STATE] != 1){//状态恢复正常 Object[] params={newDeteInfo[DetectInfo.SEQID],newDeteInfo[DetectInfo.SETINFOID]}; try { addRecordToStatement(warnUpdateStmt, params); } catch (SQLException e) { - // TODO Auto-generated catch block e.printStackTrace(); } - } + }*/ } private void saveToNew(List dataList,int flag){ @@ -986,18 +1028,13 @@ public class DetectInfoInsertThread implements Runnable { infoNewUpdateStmt.executeBatch(); logger.info("info_new table update success! size : "+ dataList.size()); } catch (SQLException e) { - logger.error("update info to info_new table error"+e.getMessage()); + logger.error("update info to info_new table error",e); } } dataList.clear(); } } - private void collectWarnUpdateInfo(Object[] newDetectInfo){ - Object[] params={newDetectInfo[DetectInfo.SEQID],newDetectInfo[DetectInfo.SETINFOID]}; - try { - addRecordToStatement(warnUpdateStmt, params); - } catch (SQLException e) { - e.printStackTrace(); - } - } + + + } diff --git a/src/com/nms/server/thread/monitor/MonitorManagerThread.java b/src/com/nms/server/thread/monitor/MonitorManagerThread.java index 22ed282..b2b93c7 100644 --- a/src/com/nms/server/thread/monitor/MonitorManagerThread.java +++ b/src/com/nms/server/thread/monitor/MonitorManagerThread.java @@ -135,7 +135,7 @@ public class MonitorManagerThread implements Runnable{ //NMSC Common.runMonitorRunnable(new SystemDateThread(name,model.getNodeIp(),socketPort,setInfo,startTime)); }else{ //非服务器节点 - logger.info("监测目标:"+model.getNodeIp()+" 是非服务器节点,不进行"+Constants.DETEC_SYSTEMDATE_STR+"监测"); + logger.debug("监测目标:"+model.getNodeIp()+" 是非服务器节点,不进行"+Constants.DETEC_SYSTEMDATE_STR+"监测"); } } } @@ -151,7 +151,7 @@ public class MonitorManagerThread implements Runnable{ //交换机类型节点监测 SNMP校验监测 Common.runMonitorRunnable(new SwitchPortThread(name,model.getNodeIp(),setInfo,startTime)); }else{ //计算机类型校验 - logger.info("监测目标:"+model.getNodeIp()+" 不是交换机,无法进行监测"); + logger.debug("监测目标:"+model.getNodeIp()+" 不是交换机,无法进行监测"); } } } @@ -162,7 +162,7 @@ public class MonitorManagerThread implements Runnable{ if(model.getNodeType() != null && model.getNodeType().longValue() != 0l){ //非服务器节点 Common.runMonitorRunnable(new SNMP4JThread(name,model.getNodeIp(),setInfo,startTime)); }else{ //计算机类型校验 - logger.info("监测目标:"+model.getNodeIp()+" 是服务器节点,不进行该类监测"); + logger.debug("监测目标:"+model.getNodeIp()+" 是服务器节点,不进行该类监测"); } } } diff --git a/src/com/nms/server/thread/monitor/SNMP4JThread.java b/src/com/nms/server/thread/monitor/SNMP4JThread.java index 7b376c5..77d644d 100644 --- a/src/com/nms/server/thread/monitor/SNMP4JThread.java +++ b/src/com/nms/server/thread/monitor/SNMP4JThread.java @@ -119,14 +119,11 @@ public class SNMP4JThread implements Runnable{ nextTime.add(Calendar.MINUTE, info.getCheckGap().intValue()); pubDatas.add(nextTime.getTimeInMillis() + "");// 下次计划监测时间, - - //- DetecDatas 拼写 Body List> pubDatasList = new ArrayList>(); if(state != -1){ - pubDatasList = datasBody(retries,stateInfo.toString(),state,snmpDatasList); + pubDatasList = snmpDatasList;//datasBody(retries,stateInfo.toString(),state,snmpDatasList); } - pubDatas.add(state+""); // 执行状态 pubDatas.add(stateInfo.toString()); // 状态信息(描述信息), pubDatas.add(""); // 性能数据, @@ -139,6 +136,7 @@ public class SNMP4JThread implements Runnable{ //- 存入缓存 if(pubDatasList!=null && pubDatasList.size()>0){ try { + Common.alarmJudgement(pubDatasList);//告警判断 Common.addDeteData(CSVUtils.csvFilePrinter(pubDatasList, Constants.COMMON_TEXT_CODING)); logger.debug("监测数据以 CSV格式 保存完成"); } catch (Exception e) { diff --git a/src/com/nms/server/thread/monitor/SwitchPortThread.java b/src/com/nms/server/thread/monitor/SwitchPortThread.java index c59a41b..16a8c05 100644 --- a/src/com/nms/server/thread/monitor/SwitchPortThread.java +++ b/src/com/nms/server/thread/monitor/SwitchPortThread.java @@ -17,6 +17,8 @@ import java.util.concurrent.CountDownLatch; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; +import org.nutz.json.Json; +import org.nutz.json.JsonFormat; import org.snmp4j.mp.SnmpConstants; import com.nms.server.bean.SetInfo; @@ -518,8 +520,8 @@ public class SwitchPortThread implements Runnable{ //- DetecDatas 拼写 Body List> pubDatasList = new ArrayList>(); if(state != -1){//执行成功了 - pubDatasList = datasBody(retries,stateInfo.toString(),state,snmpDatasList2); - + pubDatasList =snmpDatasList2;// + //datasBody(retries,stateInfo.toString(),state,snmpDatasList2); //64位获取失败告警 if(!dataFlag64){ state=0; @@ -539,6 +541,8 @@ public class SwitchPortThread implements Runnable{ //- 存入缓存 if(pubDatasList!=null && pubDatasList.size()>0){ try { + logger.debug("switchDetection : " + Json.toJson(pubDatasList,JsonFormat.tidy())); + Common.alarmJudgement(pubDatasList);//告警判断 //添加监测数据到缓存,等待监测数据解析线程的解析入库 Common.addDeteData(CSVUtils.csvFilePrinter(pubDatasList, Constants.COMMON_TEXT_CODING)); logger.debug("监测数据以 CSV格式 保存完成"); @@ -949,22 +953,13 @@ public class SwitchPortThread implements Runnable{ //拼写监测信息的详细信息:对于switchport,就是每个端口的监测信息 private List> datasBody(int times,String stateInfo,int state,List> snmpDatas2)throws Exception{ - -// List> pubDatasList = new LinkedList>(); - logger.debug("监测数据主体拼写 state "+state+" size"+(snmpDatas2==null ? -1 :snmpDatas2.size())); - if(snmpDatas2!=null && snmpDatas2.size()!=0){ - for (List snmpDatas : snmpDatas2) { -// List pubDatas0 = new LinkedList(); -// 执行状态是否成功是否正常, 第三方脚本监测任务执行结果(用于报警 -1执行失败 0不正常,1正常)-1时可保留后续数据为空,但是数据个数需要对应 + for (List snmpDatas : snmpDatas2) { // -- 执行状态是否成功,记录的状态是否正常(用于报警), String [] datas0 = new String[0]; datas0 = snmpDatas.toArray(datas0); -// logger.debug("snmpDatas>>>> "+Arrays.toString(snmpDatas.toArray(datas0))); -// logger.debug("Common.getAlarmInfoMap()>>>> "+Common.getAlarmInfoMap().size()); String[] pArray = Common.getAlarmState(Common.getAlarmInfoMap().get(info.getId()+""), datas0); -// logger.debug("pArray>>>> "+Arrays.toString(pArray)); if (pArray == null || pArray.length==0) {//无告警信息 snmpDatas.add(0, "");//插入后,列表之后的信息顺序往后移 snmpDatas.add(1, ""); @@ -975,13 +970,19 @@ public class SwitchPortThread implements Runnable{ snmpDatas.add(1, pArray == null ? "" : pArray[1]); snmpDatas.add(2, pArray == null ? "" : pArray[2]); stateInfo+=Common.getStateInfo(info.getCheckTypeName(),Common.getAlarmInfoMap().get(info.getId()+""), datas0); + logger.debug("swtich stateInfo : " + stateInfo); } -// logger.debug("pArray>>>> "+Arrays.toString(pubDatas0.toArray())); - } + if(logger.isDebugEnabled()) { + logger.debug(String.format("snmpData : %s , stateInfo : %s ", Json.toJson(snmpDatas,JsonFormat.tidy()),Json.toJson(stateInfo,JsonFormat.tidy()))); + } + } } return snmpDatas2; } + + + /* class Switch{ diff --git a/src/com/nms/server/util/ConnectionOracle.java b/src/com/nms/server/util/ConnectionOracle.java index 320bfea..cbd8a88 100644 --- a/src/com/nms/server/util/ConnectionOracle.java +++ b/src/com/nms/server/util/ConnectionOracle.java @@ -935,7 +935,7 @@ public class ConnectionOracle { fields.add(idName); fields.add(pidName); Set temp = new HashSet(); - ArrayList> list = this.dbSelect(sql, fields); + ArrayList> list = this.dbSelect(sb.toString(), fields); if(list != null){ for(Map map : list){ String id = map.get(idName); diff --git a/src/com/nms/server/util/SNMP4JUtils.java b/src/com/nms/server/util/SNMP4JUtils.java index 25303d0..4a70dd8 100644 --- a/src/com/nms/server/util/SNMP4JUtils.java +++ b/src/com/nms/server/util/SNMP4JUtils.java @@ -411,14 +411,15 @@ public class SNMP4JUtils { OID oid = vb.getOid(); String index = oid.last()+"";//索引 String oidStr = oid.toString(); - if (rootOid.equals("1.3.6.1.4.1.5000000.1.4.1.1.3")) { - logger.info("对5000000.1.4.1.1.3进行特殊处理"); + if (rootOid.startsWith("1.3.6.1.4.1.5000000.1.4.1.1")) { + logger.debug("对5000000.1.4.1.1进行特殊处理"); String[] p = oidStr.substring(rootOid.length()).split("[.]"); - if (p.length == 3) { - oidStr = rootOid + "." + p[1]; + if (p.length == 4) { + oidStr = rootOid + "." + p[1]+"."+p[3]; } } oidStr = oidStr.substring(0, oidStr.lastIndexOf(".")); + System.out.println(oid.toString() + " --> " + oidStr); if(oidModel.contains(oidStr)){ Map map = mapInstance.get(index); if(map == null){ @@ -532,8 +533,8 @@ public class SNMP4JUtils { oidModel.add("1.3.6.1.4.1.1000.4.3.1.10");*/ oidModel.add("1.3.6.1.4.1.5000000.1.4.1.1.3"); //String oid = "1.3.6.1.2.1.1"; - String oid = "1.3.6.1.4.1.5000000.1.4.1.1.3"; - String host = "10.3.2.9"; + String oid = "1.3.6.1.4.1.5000000.1.4.1.1"; + String host = "10.4.2.5"; String port = "161"; String community = "public"; int retries = 3;