From addf0ede2789be19a53a51f0816ce6c56fe42c92 Mon Sep 17 00:00:00 2001 From: Dmytro Shvaika Date: Fri, 31 Jul 2020 16:29:49 +0300 Subject: [PATCH] added buildAlarmDetails for clearAlarmByAlarmOriginator method --- .../rule/engine/action/TbClearAlarmNode.java | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbClearAlarmNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbClearAlarmNode.java index a7d3c50e7a..d3c6429e34 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbClearAlarmNode.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbClearAlarmNode.java @@ -58,7 +58,7 @@ public class TbClearAlarmNode extends TbAbstractAlarmNode 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 latest = ctx.getAlarmService().findLatestByOriginatorAndType(ctx.getTenantId(), msg.getOriginator(), alarmType); return Futures.transformAsync(latest, a -> { @@ -70,21 +70,24 @@ public class TbClearAlarmNode extends TbAbstractAlarmNode clearAlarmFromOriginator(TbContext ctx, TbMsg msg) { + private ListenableFuture clearAlarmByAlarmOriginator(TbContext ctx, TbMsg msg) { ListenableFuture 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 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 asyncDetails = buildAlarmDetails(ctx, msg, alarm.getDetails()); + return Futures.transformAsync(asyncDetails, details -> { + ctx.logJsEvalRequest(); + long clearTs = System.currentTimeMillis(); + ListenableFuture 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));