|
|
|
@ -90,8 +90,7 @@ class AlarmState { |
|
|
|
resultState = state; |
|
|
|
break; |
|
|
|
} else if (AlarmEvalResult.FALSE.equals(evalResult)) { |
|
|
|
state.clear(); |
|
|
|
stateUpdate |= state.checkUpdate(); |
|
|
|
stateUpdate = clearAlarmState(stateUpdate, state); |
|
|
|
} |
|
|
|
} |
|
|
|
if (resultState != null) { |
|
|
|
@ -99,6 +98,7 @@ class AlarmState { |
|
|
|
if (result != null) { |
|
|
|
pushMsg(ctx, result); |
|
|
|
} |
|
|
|
stateUpdate = clearAlarmState(stateUpdate, clearState); |
|
|
|
} else if (currentAlarm != null && clearState != null) { |
|
|
|
if (!validateUpdate(update, clearState)) { |
|
|
|
log.debug("[{}] Update is not valid for current clear state", alarmDefinition.getId()); |
|
|
|
@ -106,23 +106,26 @@ class AlarmState { |
|
|
|
} |
|
|
|
AlarmEvalResult evalResult = evalFunction.apply(clearState, data); |
|
|
|
if (AlarmEvalResult.TRUE.equals(evalResult)) { |
|
|
|
clearState.clear(); |
|
|
|
stateUpdate |= clearState.checkUpdate(); |
|
|
|
stateUpdate = clearAlarmState(stateUpdate, clearState); |
|
|
|
for (AlarmRuleState state : createRulesSortedBySeverityDesc) { |
|
|
|
state.clear(); |
|
|
|
stateUpdate |= state.checkUpdate(); |
|
|
|
stateUpdate = clearAlarmState(stateUpdate, state); |
|
|
|
} |
|
|
|
ctx.getAlarmService().clearAlarm(ctx.getTenantId(), currentAlarm.getId(), JacksonUtil.OBJECT_MAPPER.createObjectNode(), System.currentTimeMillis()); |
|
|
|
pushMsg(ctx, new TbAlarmResult(false, false, true, currentAlarm)); |
|
|
|
currentAlarm = null; |
|
|
|
} else if (AlarmEvalResult.FALSE.equals(evalResult)) { |
|
|
|
clearState.clear(); |
|
|
|
stateUpdate |= clearState.checkUpdate(); |
|
|
|
stateUpdate = clearAlarmState(stateUpdate, clearState); |
|
|
|
} |
|
|
|
} |
|
|
|
return stateUpdate; |
|
|
|
} |
|
|
|
|
|
|
|
public boolean clearAlarmState(boolean stateUpdate, AlarmRuleState state) { |
|
|
|
state.clear(); |
|
|
|
stateUpdate |= state.checkUpdate(); |
|
|
|
return stateUpdate; |
|
|
|
} |
|
|
|
|
|
|
|
public boolean validateUpdate(SnapshotUpdate update, AlarmRuleState state) { |
|
|
|
if (update != null) { |
|
|
|
//Check that the update type and that keys match.
|
|
|
|
@ -273,8 +276,7 @@ class AlarmState { |
|
|
|
if (currentAlarm != null && currentAlarm.getId().equals(alarmNf.getId())) { |
|
|
|
currentAlarm = null; |
|
|
|
for (AlarmRuleState state : createRulesSortedBySeverityDesc) { |
|
|
|
state.clear(); |
|
|
|
updated |= state.checkUpdate(); |
|
|
|
updated = clearAlarmState(updated, state); |
|
|
|
} |
|
|
|
} |
|
|
|
return updated; |
|
|
|
|