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

Loading…
Cancel
Save