Commit 2b95d6cbaed06d6c1f752abb4b728ceffa61ac23
Committed by
Andrew Shvayka
1 parent
fea2f879
changed logic to report activity & improvements for clear alarm node
Showing
3 changed files
with
36 additions
and
10 deletions
... | ... | @@ -197,15 +197,15 @@ public class DefaultDeviceStateService implements DeviceStateService { |
197 | 197 | if (lastReportedActivity > 0 && lastReportedActivity > lastSavedActivity) { |
198 | 198 | DeviceStateData stateData = getOrFetchDeviceStateData(deviceId); |
199 | 199 | if (stateData != null) { |
200 | - DeviceState state = stateData.getState(); | |
201 | - stateData.getState().setLastActivityTime(lastReportedActivity); | |
202 | - stateData.getMetaData().putValue("scope", SERVER_SCOPE); | |
203 | - pushRuleEngineMessage(stateData, ACTIVITY_EVENT); | |
204 | 200 | save(deviceId, LAST_ACTIVITY_TIME, lastReportedActivity); |
205 | 201 | deviceLastSavedActivity.put(deviceId, lastReportedActivity); |
202 | + DeviceState state = stateData.getState(); | |
206 | 203 | if (!state.isActive()) { |
207 | 204 | state.setActive(true); |
208 | 205 | save(deviceId, ACTIVITY_STATE, state.isActive()); |
206 | + state.setLastActivityTime(lastReportedActivity); | |
207 | + stateData.getMetaData().putValue("scope", SERVER_SCOPE); | |
208 | + pushRuleEngineMessage(stateData, ACTIVITY_EVENT); | |
209 | 209 | } |
210 | 210 | } |
211 | 211 | } | ... | ... |
... | ... | @@ -41,7 +41,7 @@ public abstract class TbAbstractAlarmNode<C extends TbAbstractAlarmNodeConfigura |
41 | 41 | static final String IS_EXISTING_ALARM = "isExistingAlarm"; |
42 | 42 | static final String IS_CLEARED_ALARM = "isClearedAlarm"; |
43 | 43 | |
44 | - private final ObjectMapper mapper = new ObjectMapper(); | |
44 | + protected final ObjectMapper mapper = new ObjectMapper(); | |
45 | 45 | |
46 | 46 | protected C config; |
47 | 47 | private ScriptEngine buildDetailsJsEngine; | ... | ... |
... | ... | @@ -18,15 +18,16 @@ package org.thingsboard.rule.engine.action; |
18 | 18 | import com.fasterxml.jackson.databind.JsonNode; |
19 | 19 | import com.google.common.util.concurrent.Futures; |
20 | 20 | import com.google.common.util.concurrent.ListenableFuture; |
21 | -import com.google.common.util.concurrent.MoreExecutors; | |
22 | 21 | import lombok.extern.slf4j.Slf4j; |
23 | 22 | import org.thingsboard.rule.engine.api.RuleNode; |
24 | 23 | import org.thingsboard.rule.engine.api.TbContext; |
25 | 24 | import org.thingsboard.rule.engine.api.TbNodeConfiguration; |
26 | 25 | import org.thingsboard.rule.engine.api.TbNodeException; |
27 | 26 | import org.thingsboard.rule.engine.api.util.TbNodeUtils; |
27 | +import org.thingsboard.server.common.data.EntityType; | |
28 | 28 | import org.thingsboard.server.common.data.alarm.Alarm; |
29 | 29 | import org.thingsboard.server.common.data.alarm.AlarmStatus; |
30 | +import org.thingsboard.server.common.data.id.AlarmId; | |
30 | 31 | import org.thingsboard.server.common.data.plugin.ComponentType; |
31 | 32 | import org.thingsboard.server.common.msg.TbMsg; |
32 | 33 | |
... | ... | @@ -56,10 +57,35 @@ public class TbClearAlarmNode extends TbAbstractAlarmNode<TbClearAlarmNodeConfig |
56 | 57 | @Override |
57 | 58 | protected ListenableFuture<AlarmResult> processAlarm(TbContext ctx, TbMsg msg) { |
58 | 59 | String alarmType = TbNodeUtils.processPattern(this.config.getAlarmType(), msg.getMetaData()); |
59 | - ListenableFuture<Alarm> latest = ctx.getAlarmService().findLatestByOriginatorAndType(ctx.getTenantId(), msg.getOriginator(), alarmType); | |
60 | - return Futures.transformAsync(latest, a -> { | |
61 | - if (a != null && !a.getStatus().isCleared()) { | |
62 | - return clearAlarm(ctx, msg, a); | |
60 | + if (msg.getOriginator().getEntityType().equals(EntityType.ALARM)) { | |
61 | + return clearAlarmFromOriginator(ctx, msg); | |
62 | + } else { | |
63 | + ListenableFuture<Alarm> latest = ctx.getAlarmService().findLatestByOriginatorAndType(ctx.getTenantId(), msg.getOriginator(), alarmType); | |
64 | + return Futures.transformAsync(latest, a -> { | |
65 | + if (a != null && !a.getStatus().isCleared()) { | |
66 | + return clearAlarm(ctx, msg, a); | |
67 | + } | |
68 | + return Futures.immediateFuture(new AlarmResult(false, false, false, null)); | |
69 | + }, ctx.getDbCallbackExecutor()); | |
70 | + } | |
71 | + } | |
72 | + | |
73 | + private ListenableFuture<AlarmResult> clearAlarmFromOriginator(TbContext ctx, TbMsg msg) { | |
74 | + ListenableFuture<Alarm> alarmByIdAsync = ctx.getAlarmService().findAlarmByIdAsync(ctx.getTenantId(), new AlarmId(msg.getOriginator().getId())); | |
75 | + return Futures.transformAsync(alarmByIdAsync, alarm -> { | |
76 | + if (alarm != null && !alarm.getStatus().isCleared()) { | |
77 | + long clearTs = System.currentTimeMillis(); | |
78 | + ListenableFuture<Boolean> clearAlarmFuture = ctx.getAlarmService().clearAlarm(ctx.getTenantId(), alarm.getId(), alarm.getDetails(), clearTs); | |
79 | + return Futures.transformAsync(clearAlarmFuture, cleared -> { | |
80 | + if (cleared) { | |
81 | + alarm.setClearTs(clearTs); | |
82 | + AlarmStatus oldStatus = alarm.getStatus(); | |
83 | + AlarmStatus newStatus = oldStatus.isAck() ? AlarmStatus.CLEARED_ACK : AlarmStatus.CLEARED_UNACK; | |
84 | + alarm.setStatus(newStatus); | |
85 | + return Futures.immediateFuture(new AlarmResult(false, false, true, alarm)); | |
86 | + } | |
87 | + return Futures.immediateFuture(new AlarmResult(false, false, false, alarm)); | |
88 | + }, ctx.getDbCallbackExecutor()); | |
63 | 89 | } |
64 | 90 | return Futures.immediateFuture(new AlarmResult(false, false, false, null)); |
65 | 91 | }, ctx.getDbCallbackExecutor()); | ... | ... |