Commit c98a2d18a1fd3ae2cb50454539b734b873828071

Authored by Viacheslav Klimov
Committed by Andrew Shvayka
1 parent 22ada62f

Refactor

... ... @@ -101,12 +101,12 @@ public class DefaultAlarmSubscriptionService extends AbstractSubscriptionService
101 101
102 102 @Override
103 103 public ListenableFuture<Boolean> clearAlarm(TenantId tenantId, AlarmId alarmId, JsonNode details, long clearTs) {
104   - ListenableFuture<AlarmOperationResult> result = clearAlarmAndGetOperationResult(tenantId, alarmId, details, clearTs);
  104 + ListenableFuture<AlarmOperationResult> result = clearAlarmForResult(tenantId, alarmId, details, clearTs);
105 105 return Futures.transform(result, AlarmOperationResult::isSuccessful, wsCallBackExecutor);
106 106 }
107 107
108 108 @Override
109   - public ListenableFuture<AlarmOperationResult> clearAlarmAndGetOperationResult(TenantId tenantId, AlarmId alarmId, JsonNode details, long clearTs) {
  109 + public ListenableFuture<AlarmOperationResult> clearAlarmForResult(TenantId tenantId, AlarmId alarmId, JsonNode details, long clearTs) {
110 110 ListenableFuture<AlarmOperationResult> result = alarmService.clearAlarm(tenantId, alarmId, details, clearTs);
111 111 Futures.addCallback(result, new AlarmUpdateCallback(), wsCallBackExecutor);
112 112 return result;
... ...
... ... @@ -47,7 +47,7 @@ public interface RuleEngineAlarmService {
47 47
48 48 ListenableFuture<Boolean> clearAlarm(TenantId tenantId, AlarmId alarmId, JsonNode details, long clearTs);
49 49
50   - ListenableFuture<AlarmOperationResult> clearAlarmAndGetOperationResult(TenantId tenantId, AlarmId alarmId, JsonNode details, long clearTs);
  50 + ListenableFuture<AlarmOperationResult> clearAlarmForResult(TenantId tenantId, AlarmId alarmId, JsonNode details, long clearTs);
51 51
52 52 ListenableFuture<Alarm> findAlarmByIdAsync(TenantId tenantId, AlarmId alarmId);
53 53
... ...
... ... @@ -18,6 +18,7 @@ package org.thingsboard.rule.engine.profile;
18 18 import com.fasterxml.jackson.databind.JsonNode;
19 19 import com.fasterxml.jackson.databind.node.ObjectNode;
20 20 import com.google.common.util.concurrent.ListenableFuture;
  21 +import com.google.common.util.concurrent.MoreExecutors;
21 22 import lombok.Data;
22 23 import lombok.extern.slf4j.Slf4j;
23 24 import org.apache.commons.lang3.StringUtils;
... ... @@ -26,17 +27,12 @@ import org.thingsboard.rule.engine.api.TbContext;
26 27 import org.thingsboard.rule.engine.profile.state.PersistedAlarmRuleState;
27 28 import org.thingsboard.rule.engine.profile.state.PersistedAlarmState;
28 29 import org.thingsboard.server.common.data.DataConstants;
29   -import org.thingsboard.server.common.data.Tenant;
30 30 import org.thingsboard.server.common.data.alarm.Alarm;
31 31 import org.thingsboard.server.common.data.alarm.AlarmSeverity;
32 32 import org.thingsboard.server.common.data.alarm.AlarmStatus;
33 33 import org.thingsboard.server.common.data.device.profile.AlarmConditionKeyType;
34 34 import org.thingsboard.server.common.data.device.profile.DeviceProfileAlarm;
35   -import org.thingsboard.server.common.data.id.CustomerId;
36 35 import org.thingsboard.server.common.data.id.EntityId;
37   -import org.thingsboard.server.common.data.id.TenantId;
38   -import org.thingsboard.server.common.data.query.EntityKeyType;
39   -import org.thingsboard.server.common.data.query.KeyFilter;
40 36 import org.thingsboard.server.common.msg.TbMsg;
41 37 import org.thingsboard.server.common.msg.TbMsgMetaData;
42 38 import org.thingsboard.server.common.msg.queue.ServiceQueue;
... ... @@ -120,15 +116,17 @@ class AlarmState {
120 116 for (AlarmRuleState state : createRulesSortedBySeverityDesc) {
121 117 stateUpdate = clearAlarmState(stateUpdate, state);
122 118 }
123   - Alarm clearedAlarm;
124   - try {
125   - clearedAlarm = ctx.getAlarmService().clearAlarmAndGetOperationResult(
126   - ctx.getTenantId(), currentAlarm.getId(), createDetails(clearState), System.currentTimeMillis()
127   - ).get().getAlarm();
128   - } catch (InterruptedException | ExecutionException e) {
129   - throw new RuntimeException(e);
130   - }
131   - pushMsg(ctx, new TbAlarmResult(false, false, true, clearedAlarm));
  119 + ListenableFuture<AlarmOperationResult> alarmClearOperationResult = ctx.getAlarmService().clearAlarmForResult(
  120 + ctx.getTenantId(), currentAlarm.getId(), createDetails(clearState), System.currentTimeMillis()
  121 + );
  122 + alarmClearOperationResult.addListener(() -> {
  123 + try {
  124 + Alarm clearedAlarm = alarmClearOperationResult.get().getAlarm();
  125 + pushMsg(ctx, new TbAlarmResult(false, false, true, clearedAlarm));
  126 + } catch (Exception e) {
  127 + throw new RuntimeException(e);
  128 + }
  129 + }, MoreExecutors.directExecutor());
132 130 currentAlarm = null;
133 131 } else if (AlarmEvalResult.FALSE.equals(evalResult)) {
134 132 stateUpdate = clearAlarmState(stateUpdate, clearState);
... ...