Browse Source

added buildAlarmDetails for clearAlarmByAlarmOriginator method

pull/3242/head
Dmytro Shvaika 6 years ago
committed by Andrew Shvayka
parent
commit
addf0ede27
  1. 27
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbClearAlarmNode.java

27
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbClearAlarmNode.java

@ -58,7 +58,7 @@ public class TbClearAlarmNode extends TbAbstractAlarmNode<TbClearAlarmNodeConfig
protected ListenableFuture<AlarmResult> processAlarm(TbContext ctx, TbMsg msg) {
String alarmType = TbNodeUtils.processPattern(this.config.getAlarmType(), msg.getMetaData());
if (msg.getOriginator().getEntityType().equals(EntityType.ALARM)) {
return clearAlarmFromOriginator(ctx, msg);
return clearAlarmByAlarmOriginator(ctx, msg);
} else {
ListenableFuture<Alarm> latest = ctx.getAlarmService().findLatestByOriginatorAndType(ctx.getTenantId(), msg.getOriginator(), alarmType);
return Futures.transformAsync(latest, a -> {
@ -70,21 +70,24 @@ public class TbClearAlarmNode extends TbAbstractAlarmNode<TbClearAlarmNodeConfig
}
}
private ListenableFuture<AlarmResult> clearAlarmFromOriginator(TbContext ctx, TbMsg msg) {
private ListenableFuture<AlarmResult> clearAlarmByAlarmOriginator(TbContext ctx, TbMsg msg) {
ListenableFuture<Alarm> alarmByIdAsync = ctx.getAlarmService().findAlarmByIdAsync(ctx.getTenantId(), new AlarmId(msg.getOriginator().getId()));
return Futures.transformAsync(alarmByIdAsync, alarm -> {
if (alarm != null && !alarm.getStatus().isCleared()) {
long clearTs = System.currentTimeMillis();
ListenableFuture<Boolean> clearAlarmFuture = ctx.getAlarmService().clearAlarm(ctx.getTenantId(), alarm.getId(), alarm.getDetails(), clearTs);
return Futures.transformAsync(clearAlarmFuture, cleared -> {
if (cleared) {
alarm.setClearTs(clearTs);
AlarmStatus oldStatus = alarm.getStatus();
AlarmStatus newStatus = oldStatus.isAck() ? AlarmStatus.CLEARED_ACK : AlarmStatus.CLEARED_UNACK;
alarm.setStatus(newStatus);
ctx.logJsEvalRequest();
ListenableFuture<JsonNode> asyncDetails = buildAlarmDetails(ctx, msg, alarm.getDetails());
return Futures.transformAsync(asyncDetails, details -> {
ctx.logJsEvalRequest();
long clearTs = System.currentTimeMillis();
ListenableFuture<Boolean> clearAlarmFuture = ctx.getAlarmService().clearAlarm(ctx.getTenantId(), alarm.getId(), details, clearTs);
return Futures.transformAsync(clearAlarmFuture, cleared -> {
if (cleared) {
alarm.setClearTs(clearTs);
alarm.setDetails(details);
}
alarm.setStatus(alarm.getStatus().isAck() ? AlarmStatus.CLEARED_ACK : AlarmStatus.CLEARED_UNACK);
return Futures.immediateFuture(new AlarmResult(false, false, true, alarm));
}
return Futures.immediateFuture(new AlarmResult(false, false, false, alarm));
}, ctx.getDbCallbackExecutor());
}, ctx.getDbCallbackExecutor());
}
return Futures.immediateFuture(new AlarmResult(false, false, false, null));

Loading…
Cancel
Save