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

Loading…
Cancel
Save