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