Browse Source

Add cleanup of clear alarm state on non matching condition

pull/3719/head
Andrii Shvaika 6 years ago
parent
commit
cb41548b22
  1. 2
      common/data/src/main/java/org/thingsboard/server/common/data/plugin/ComponentLifecycleEvent.java
  2. 22
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/profile/AlarmState.java

2
common/data/src/main/java/org/thingsboard/server/common/data/plugin/ComponentLifecycleEvent.java

@ -21,5 +21,5 @@ import java.io.Serializable;
* @author Andrew Shvayka
*/
public enum ComponentLifecycleEvent implements Serializable {
CREATED, STARTED, ACTIVATED, SUSPENDED, UPDATED, STOPPED, DELETED, ADDED_TO_ALLOW_LIST, ADDED_TO_DENY_LIST
CREATED, STARTED, ACTIVATED, SUSPENDED, UPDATED, STOPPED, DELETED
}

22
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/profile/AlarmState.java

@ -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;

Loading…
Cancel
Save