|
@@ -26,6 +26,7 @@ import org.quartz.JobDataMap;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.util.StopWatch;
|
|
|
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
@@ -89,8 +90,11 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
}
|
|
|
|
|
|
log.info("接收到采集值:[{}]", msg);
|
|
|
+ StopWatch stopWatch = new StopWatch("handleIotMsg");
|
|
|
+ stopWatch.start("validateIotMsg");
|
|
|
|
|
|
boolean validateIotMsgResult = validateIotMsg(msg);
|
|
|
+ stopWatch.stop();
|
|
|
if (!validateIotMsgResult) {
|
|
|
log.error("采集值校验未通过");
|
|
|
return;
|
|
@@ -101,6 +105,7 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
|
|
|
int groupCount = 4;
|
|
|
int dataCounts = split.length / groupCount;
|
|
|
+ stopWatch.start("for dataCounts");
|
|
|
for (int i = 0; i < dataCounts; i++) {
|
|
|
int startIndex = i * groupCount;
|
|
|
String dataTime = split[startIndex];
|
|
@@ -113,6 +118,8 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
handleIotData(dataTime, meterId, funcId, value);
|
|
|
}
|
|
|
}
|
|
|
+ stopWatch.stop();
|
|
|
+ log.info(stopWatch.prettyPrint());
|
|
|
}
|
|
|
|
|
|
|
|
@@ -135,10 +142,12 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
* @version: V1.0
|
|
|
*/
|
|
|
private void handleIotData(String dataTime, String meterId, String funcIdStr, String valueStr) throws Exception {
|
|
|
+ StopWatch stopWatch = new StopWatch("handleIotData");
|
|
|
|
|
|
String funcIdSeparator = ",";
|
|
|
String[] funcIdArray = funcIdStr.split(funcIdSeparator);
|
|
|
String[] values = valueStr.split(funcIdSeparator);
|
|
|
+ stopWatch.start("currentDataCache.putCurrentData");
|
|
|
|
|
|
for (int i = 0; i < funcIdArray.length; i++) {
|
|
|
|
|
@@ -148,6 +157,7 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
log.info("未获取到对应的报警定义, meterId:{}, funcId:{}", meterId, funcIdArray[i]);
|
|
|
}
|
|
|
}
|
|
|
+ stopWatch.stop();
|
|
|
|
|
|
|
|
|
|
|
@@ -159,11 +169,14 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
|
|
|
|
|
|
String funcId = funcIdArray[0];
|
|
|
+ stopWatch.start("handleSingleIotData");
|
|
|
if (alarmInfoCache.hasKey(meterId, funcId)) {
|
|
|
handleSingleIotData(dataTime, meterId, funcId);
|
|
|
} else {
|
|
|
log.info("未获取到对应的报警定义, meterId:{}, funcId:{}", meterId, funcId);
|
|
|
}
|
|
|
+ stopWatch.stop();
|
|
|
+ log.info(stopWatch.prettyPrint());
|
|
|
|
|
|
}
|
|
|
|
|
@@ -180,21 +193,26 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
* @version: V1.0
|
|
|
*/
|
|
|
private void handleSingleIotData(String dataTime, String meterId, String funcId) throws Exception {
|
|
|
+ StopWatch stopWatch = new StopWatch("handleSingleIotData");
|
|
|
|
|
|
+ stopWatch.start("getAlarmDefinitionsByMeterFuncId");
|
|
|
List<AlarmDefine> alarmDefines = alarmInfoCache.getAlarmDefinitionsByMeterFuncId(meterId, funcId);
|
|
|
+ stopWatch.stop();
|
|
|
for (AlarmDefine alarmDefine : alarmDefines) {
|
|
|
+ StopWatch stopWatch1 = new StopWatch("for alarmDefines");
|
|
|
+ stopWatch1.start("infoCodesFullFill");
|
|
|
Condition condition = alarmDefine.getCondition();
|
|
|
String defineId = AlarmInfoCache.getAlarmDefineId(alarmDefine);
|
|
|
log.info("defineId: [{}]", defineId);
|
|
|
-
|
|
|
|
|
|
List<JSONObject> infoCodes = condition.getInfoCodes();
|
|
|
boolean infoCodesFullFill = infoCodes.stream().allMatch(
|
|
|
p -> currentDataCache.hasKey(p.getString("meterId"), p.getString("funcId"))
|
|
|
);
|
|
|
-
|
|
|
+ stopWatch1.stop();
|
|
|
|
|
|
if (infoCodesFullFill) {
|
|
|
+ stopWatch1.start("triggerResult endResult");
|
|
|
|
|
|
String trigger = condition.getTrigger();
|
|
|
Expression triggerExp = AviatorEvaluator.compile(trigger, true);
|
|
@@ -229,6 +247,8 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
if (triggerResult && endResult) {
|
|
|
log.error("报警触发条件和报警恢复条件同时满足,请检查,报警定义详情【{}】", alarmDefine);
|
|
|
}
|
|
|
+ stopWatch1.stop();
|
|
|
+ stopWatch1.start("handleAlarmTriggerData, handlerNormalData");
|
|
|
synchronized (defineId.intern()) {
|
|
|
|
|
|
if (triggerResult) {
|
|
@@ -241,10 +261,13 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
handlerNormalData(alarmDefine, dataTime, endResult, paramMap);
|
|
|
}
|
|
|
}
|
|
|
+ stopWatch1.stop();
|
|
|
} else {
|
|
|
log.warn("部分信息点没有数值");
|
|
|
}
|
|
|
+ log.info(stopWatch1.prettyPrint());
|
|
|
}
|
|
|
+ log.info(stopWatch.prettyPrint());
|
|
|
}
|
|
|
|
|
|
|
|
@@ -381,9 +404,11 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
private void handlerNormalData(
|
|
|
AlarmDefine alarmDefine, String dataTime,
|
|
|
Boolean endResult, HashMap<String, Object> paramMap) throws InterruptedException {
|
|
|
+ StopWatch stopWatch = new StopWatch("handlerNormalData");
|
|
|
+ stopWatch.start("getAlarmDefineStateFromCacheOrDb");
|
|
|
String defineId = AlarmInfoCache.getAlarmDefineId(alarmDefine);
|
|
|
AlarmDefineState alarmDefineState = getAlarmDefineStateFromCacheOrDb(defineId);
|
|
|
-
|
|
|
+ stopWatch.stop();
|
|
|
Condition condition = alarmDefine.getCondition();
|
|
|
|
|
|
if (AlarmDefineState.State.NORMAL.getType().equals(alarmDefineState.getState())) {
|
|
@@ -393,6 +418,7 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
if (!endResult) {
|
|
|
return;
|
|
|
}
|
|
|
+ stopWatch.start("alarmSuspendLastTime");
|
|
|
|
|
|
String alarmSuspendStartTime = alarmDefineState.getAlarmSuspendStartTime();
|
|
|
if (StringUtil.isEmpty(alarmSuspendStartTime)) {
|
|
@@ -404,37 +430,46 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
long alarmSuspendLastTime = DateUtils.betweenTwoTimeSecond(alarmSuspendStartTime, dataTime);
|
|
|
|
|
|
int uphold = condition.getEndUphold();
|
|
|
+ stopWatch.stop();
|
|
|
if (alarmSuspendLastTime < uphold) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
|
|
|
log.info("报警恢复持续时间大于设定时间:[{}]>[{}]", alarmSuspendLastTime, uphold);
|
|
|
-
|
|
|
+ stopWatch.start("getZktAlarmRecordDOWhenAlarmSuspend");
|
|
|
ZktAlarmRecordDO alarmRecordDO = getZktAlarmRecordDOWhenAlarmSuspend(defineId, dataTime, paramMap);
|
|
|
String alarmId = alarmRecordDO.getAlarmId();
|
|
|
+ stopWatch.stop();
|
|
|
|
|
|
alarmLastTimeCache.setDeleteAvailable(defineId);
|
|
|
|
|
|
if (createdAlarmIdsCache.contains(alarmId)) {
|
|
|
+ stopWatch.start("sendAlarmRecoverMessage");
|
|
|
deleteZktAlarmRecordWhenAlarmSuspend(defineId);
|
|
|
log.info("发送报警恢复消息,报警id: [{}]", alarmId);
|
|
|
|
|
|
sendAlarmRecoverMessage(alarmDefine.getProjectId(), dataTime, paramMap, alarmId);
|
|
|
|
|
|
createdAlarmIdsCache.remove(alarmId);
|
|
|
+ stopWatch.stop();
|
|
|
} else {
|
|
|
+ stopWatch.start("createAlarmRecoverTimingJob");
|
|
|
log.info("已创建的报警id中不包含[{}], 3分钟后重试发送报警恢复消息", alarmId);
|
|
|
|
|
|
createAlarmRecoverTimingJob(dataTime, paramMap, alarmRecordDO);
|
|
|
+ stopWatch.stop();
|
|
|
}
|
|
|
+ stopWatch.start("cancelRelatedExpireJob");
|
|
|
|
|
|
cancelRelatedExpireJob(alarmId);
|
|
|
|
|
|
alarmDefineState.reset();
|
|
|
+ stopWatch.stop();
|
|
|
}
|
|
|
|
|
|
alarmInfoCache.setAlarmState(defineId, alarmDefineState);
|
|
|
+ log.info(stopWatch.prettyPrint());
|
|
|
}
|
|
|
|
|
|
|
|
@@ -598,17 +633,22 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
private void handleAlarmTriggerData(
|
|
|
AlarmDefine alarmDefine, String dataTime,
|
|
|
HashMap<String, Object> paramMap) throws Exception {
|
|
|
+ StopWatch stopWatch = new StopWatch();
|
|
|
+ stopWatch.start("getAlarmDefineStateFromCacheOrDb");
|
|
|
|
|
|
String defineId = AlarmInfoCache.getAlarmDefineId(alarmDefine);
|
|
|
AlarmDefineState alarmDefineState = getAlarmDefineStateFromCacheOrDb(defineId);
|
|
|
-
|
|
|
+ stopWatch.stop();
|
|
|
+ stopWatch.start("inEffectTime");
|
|
|
Condition condition = alarmDefine.getCondition();
|
|
|
|
|
|
boolean inEffectTime = ConditionUtils.inEffectiveTime(condition, dataTime);
|
|
|
+ stopWatch.stop();
|
|
|
|
|
|
if (inEffectTime) {
|
|
|
|
|
|
if (AlarmDefineState.State.NOT_DEAL.getType().equals(alarmDefineState.getState())) {
|
|
|
+ stopWatch.start("alarmContinue");
|
|
|
|
|
|
String alarmStartTime = alarmDefineState.getAlarmStartTime();
|
|
|
long lastTime = DateUtils.betweenTwoTimeSecond(alarmStartTime, dataTime);
|
|
@@ -618,9 +658,11 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
log.info("开始拼装报警持续消息");
|
|
|
initAlarmContinueMsg(alarmId, lastTime, paramMap, alarmDefine.getProjectId());
|
|
|
}
|
|
|
+ stopWatch.stop();
|
|
|
}
|
|
|
|
|
|
if (AlarmDefineState.State.NORMAL.getType().equals(alarmDefineState.getState())) {
|
|
|
+ stopWatch.start("getTriggerUphold");
|
|
|
|
|
|
long alarmLastTime = 0;
|
|
|
if (StringUtil.isNotEmpty(alarmDefineState.getAlarmStartTime())) {
|
|
@@ -634,7 +676,9 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
LocalDateTime expireDateTime = getExpireLocalDateTime(dataTime, condition);
|
|
|
log.info("报警持续时间:[{}]", alarmLastTime);
|
|
|
log.info("设定的持续时间:[{}]", condition.getTriggerUphold());
|
|
|
+ stopWatch.stop();
|
|
|
if (alarmLastTime >= condition.getTriggerUphold()) {
|
|
|
+ stopWatch.start("saveZktAlarmRecordWhenAlarmStart");
|
|
|
String alarmId = StringUtil.getUUID();
|
|
|
log.info("报警持续时间大于设定的持续时间,产生一条报警: [{}]", alarmId);
|
|
|
|
|
@@ -644,16 +688,20 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
saveZktAlarmRecordWhenAlarmStart(alarmId, alarmDefine, dataTime);
|
|
|
|
|
|
alarmDefineState.setState(AlarmDefineState.State.NOT_DEAL.getType());
|
|
|
+ stopWatch.stop();
|
|
|
+ stopWatch.start("sendCreateAlarmRecordMessage");
|
|
|
|
|
|
sendCreateAlarmRecordMessage(alarmId, alarmDefine, dataTime, paramMap,
|
|
|
DateUtils.localDateTime2Date(expireDateTime));
|
|
|
-
|
|
|
+ stopWatch.stop();
|
|
|
|
|
|
if (expireDateTime != null) {
|
|
|
+ stopWatch.start("createExpireJob");
|
|
|
|
|
|
log.info("产生一条定时过期报警消息, 过期时间为:{}", expireDateTime);
|
|
|
|
|
|
createExpireJob(alarmId, alarmDefine, alarmDefineState, expireDateTime);
|
|
|
+ stopWatch.stop();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -664,6 +712,7 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
alarmDefineState.reset();
|
|
|
}
|
|
|
alarmInfoCache.setAlarmState(defineId, alarmDefineState);
|
|
|
+ log.info(stopWatch.prettyPrint());
|
|
|
}
|
|
|
|
|
|
|