Commit 80b850add88c4e08973103610deec3f27b959952
Merge branch 'master' of github.com:thingsboard/thingsboard
Showing
6 changed files
with
26 additions
and
37 deletions
... | ... | @@ -437,6 +437,7 @@ public class SqlDatabaseUpgradeService implements DatabaseEntitiesUpgradeService |
437 | 437 | case "3.2.1": |
438 | 438 | try (Connection conn = DriverManager.getConnection(dbUrl, dbUserName, dbPassword)) { |
439 | 439 | log.info("Updating schema ..."); |
440 | + conn.createStatement().execute("CREATE INDEX IF NOT EXISTS idx_audit_log_tenant_id_and_created_time ON audit_log(tenant_id, created_time);"); | |
440 | 441 | schemaUpdateFile = Paths.get(installScripts.getDataDir(), "upgrade", "3.2.1", SCHEMA_UPDATE_SQL); |
441 | 442 | loadSql(schemaUpdateFile, conn); |
442 | 443 | conn.createStatement().execute("UPDATE tb_schema_settings SET schema_version = 3002002;"); | ... | ... |
... | ... | @@ -22,9 +22,7 @@ import com.google.common.util.concurrent.ListenableFuture; |
22 | 22 | import lombok.extern.slf4j.Slf4j; |
23 | 23 | import org.checkerframework.checker.nullness.qual.Nullable; |
24 | 24 | import org.springframework.beans.factory.annotation.Autowired; |
25 | -import org.springframework.context.event.EventListener; | |
26 | 25 | import org.springframework.stereotype.Service; |
27 | -import org.thingsboard.common.util.ThingsBoardThreadFactory; | |
28 | 26 | import org.thingsboard.server.common.data.alarm.Alarm; |
29 | 27 | import org.thingsboard.server.common.data.alarm.AlarmInfo; |
30 | 28 | import org.thingsboard.server.common.data.alarm.AlarmQuery; |
... | ... | @@ -35,43 +33,22 @@ import org.thingsboard.server.common.data.id.AlarmId; |
35 | 33 | import org.thingsboard.server.common.data.id.CustomerId; |
36 | 34 | import org.thingsboard.server.common.data.id.EntityId; |
37 | 35 | import org.thingsboard.server.common.data.id.TenantId; |
38 | -import org.thingsboard.server.common.data.kv.AttributeKvEntry; | |
39 | -import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry; | |
40 | -import org.thingsboard.server.common.data.kv.BooleanDataEntry; | |
41 | -import org.thingsboard.server.common.data.kv.DoubleDataEntry; | |
42 | -import org.thingsboard.server.common.data.kv.LongDataEntry; | |
43 | -import org.thingsboard.server.common.data.kv.StringDataEntry; | |
44 | -import org.thingsboard.server.common.data.kv.TsKvEntry; | |
45 | 36 | import org.thingsboard.server.common.data.page.PageData; |
46 | 37 | import org.thingsboard.server.common.data.query.AlarmData; |
47 | -import org.thingsboard.server.common.data.query.AlarmDataPageLink; | |
48 | 38 | import org.thingsboard.server.common.data.query.AlarmDataQuery; |
49 | 39 | import org.thingsboard.server.common.msg.queue.ServiceType; |
50 | 40 | import org.thingsboard.server.common.msg.queue.TbCallback; |
51 | 41 | import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; |
52 | 42 | import org.thingsboard.server.dao.alarm.AlarmOperationResult; |
53 | 43 | import org.thingsboard.server.dao.alarm.AlarmService; |
54 | -import org.thingsboard.server.dao.attributes.AttributesService; | |
55 | -import org.thingsboard.server.dao.timeseries.TimeseriesService; | |
56 | 44 | import org.thingsboard.server.gen.transport.TransportProtos; |
57 | -import org.thingsboard.server.queue.discovery.PartitionChangeEvent; | |
58 | 45 | import org.thingsboard.server.queue.discovery.PartitionService; |
59 | 46 | import org.thingsboard.server.service.queue.TbClusterService; |
60 | 47 | import org.thingsboard.server.service.subscription.SubscriptionManagerService; |
61 | 48 | import org.thingsboard.server.service.subscription.TbSubscriptionUtils; |
62 | -import org.thingsboard.server.service.telemetry.sub.AlarmSubscriptionUpdate; | |
63 | 49 | |
64 | -import javax.annotation.PostConstruct; | |
65 | -import javax.annotation.PreDestroy; | |
66 | 50 | import java.util.Collection; |
67 | -import java.util.Collections; | |
68 | -import java.util.List; | |
69 | 51 | import java.util.Optional; |
70 | -import java.util.Set; | |
71 | -import java.util.concurrent.ConcurrentHashMap; | |
72 | -import java.util.concurrent.ExecutorService; | |
73 | -import java.util.concurrent.Executors; | |
74 | -import java.util.function.Consumer; | |
75 | 52 | |
76 | 53 | /** |
77 | 54 | * Created by ashvayka on 27.03.18. |
... | ... | @@ -124,9 +101,15 @@ public class DefaultAlarmSubscriptionService extends AbstractSubscriptionService |
124 | 101 | |
125 | 102 | @Override |
126 | 103 | public ListenableFuture<Boolean> clearAlarm(TenantId tenantId, AlarmId alarmId, JsonNode details, long clearTs) { |
104 | + ListenableFuture<AlarmOperationResult> result = clearAlarmForResult(tenantId, alarmId, details, clearTs); | |
105 | + return Futures.transform(result, AlarmOperationResult::isSuccessful, wsCallBackExecutor); | |
106 | + } | |
107 | + | |
108 | + @Override | |
109 | + public ListenableFuture<AlarmOperationResult> clearAlarmForResult(TenantId tenantId, AlarmId alarmId, JsonNode details, long clearTs) { | |
127 | 110 | ListenableFuture<AlarmOperationResult> result = alarmService.clearAlarm(tenantId, alarmId, details, clearTs); |
128 | 111 | Futures.addCallback(result, new AlarmUpdateCallback(), wsCallBackExecutor); |
129 | - return Futures.transform(result, AlarmOperationResult::isSuccessful, wsCallBackExecutor); | |
112 | + return result; | |
130 | 113 | } |
131 | 114 | |
132 | 115 | @Override | ... | ... |
... | ... | @@ -43,3 +43,5 @@ CREATE INDEX IF NOT EXISTS idx_asset_customer_id_and_type ON asset(tenant_id, cu |
43 | 43 | CREATE INDEX IF NOT EXISTS idx_asset_type ON asset(tenant_id, type); |
44 | 44 | |
45 | 45 | CREATE INDEX IF NOT EXISTS idx_attribute_kv_by_key_and_last_update_ts ON attribute_kv(entity_id, attribute_key, last_update_ts desc); |
46 | + | |
47 | +CREATE INDEX IF NOT EXISTS idx_audit_log_tenant_id_and_created_time ON audit_log(tenant_id, created_time); | ... | ... |
... | ... | @@ -16,7 +16,6 @@ |
16 | 16 | package org.thingsboard.rule.engine.api; |
17 | 17 | |
18 | 18 | import com.fasterxml.jackson.databind.JsonNode; |
19 | -import com.google.common.util.concurrent.FutureCallback; | |
20 | 19 | import com.google.common.util.concurrent.ListenableFuture; |
21 | 20 | import org.thingsboard.server.common.data.alarm.Alarm; |
22 | 21 | import org.thingsboard.server.common.data.alarm.AlarmInfo; |
... | ... | @@ -28,15 +27,12 @@ import org.thingsboard.server.common.data.id.AlarmId; |
28 | 27 | import org.thingsboard.server.common.data.id.CustomerId; |
29 | 28 | import org.thingsboard.server.common.data.id.EntityId; |
30 | 29 | import org.thingsboard.server.common.data.id.TenantId; |
31 | -import org.thingsboard.server.common.data.kv.AttributeKvEntry; | |
32 | -import org.thingsboard.server.common.data.kv.TsKvEntry; | |
33 | 30 | import org.thingsboard.server.common.data.page.PageData; |
34 | 31 | import org.thingsboard.server.common.data.query.AlarmData; |
35 | -import org.thingsboard.server.common.data.query.AlarmDataPageLink; | |
36 | 32 | import org.thingsboard.server.common.data.query.AlarmDataQuery; |
33 | +import org.thingsboard.server.dao.alarm.AlarmOperationResult; | |
37 | 34 | |
38 | 35 | import java.util.Collection; |
39 | -import java.util.List; | |
40 | 36 | |
41 | 37 | /** |
42 | 38 | * Created by ashvayka on 02.04.18. |
... | ... | @@ -51,6 +47,8 @@ public interface RuleEngineAlarmService { |
51 | 47 | |
52 | 48 | ListenableFuture<Boolean> clearAlarm(TenantId tenantId, AlarmId alarmId, JsonNode details, long clearTs); |
53 | 49 | |
50 | + ListenableFuture<AlarmOperationResult> clearAlarmForResult(TenantId tenantId, AlarmId alarmId, JsonNode details, long clearTs); | |
51 | + | |
54 | 52 | ListenableFuture<Alarm> findAlarmByIdAsync(TenantId tenantId, AlarmId alarmId); |
55 | 53 | |
56 | 54 | ListenableFuture<Alarm> findLatestByOriginatorAndType(TenantId tenantId, EntityId originator, String type); | ... | ... |
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/profile/AlarmState.java
... | ... | @@ -17,28 +17,26 @@ package org.thingsboard.rule.engine.profile; |
17 | 17 | |
18 | 18 | import com.fasterxml.jackson.databind.JsonNode; |
19 | 19 | import com.fasterxml.jackson.databind.node.ObjectNode; |
20 | +import com.google.common.util.concurrent.ListenableFuture; | |
20 | 21 | import lombok.Data; |
21 | 22 | import lombok.extern.slf4j.Slf4j; |
22 | 23 | import org.apache.commons.lang3.StringUtils; |
24 | +import org.thingsboard.common.util.DonAsynchron; | |
23 | 25 | import org.thingsboard.rule.engine.action.TbAlarmResult; |
24 | 26 | import org.thingsboard.rule.engine.api.TbContext; |
25 | 27 | import org.thingsboard.rule.engine.profile.state.PersistedAlarmRuleState; |
26 | 28 | import org.thingsboard.rule.engine.profile.state.PersistedAlarmState; |
27 | 29 | import org.thingsboard.server.common.data.DataConstants; |
28 | -import org.thingsboard.server.common.data.Tenant; | |
29 | 30 | import org.thingsboard.server.common.data.alarm.Alarm; |
30 | 31 | import org.thingsboard.server.common.data.alarm.AlarmSeverity; |
31 | 32 | import org.thingsboard.server.common.data.alarm.AlarmStatus; |
32 | 33 | import org.thingsboard.server.common.data.device.profile.AlarmConditionKeyType; |
33 | 34 | import org.thingsboard.server.common.data.device.profile.DeviceProfileAlarm; |
34 | -import org.thingsboard.server.common.data.id.CustomerId; | |
35 | 35 | import org.thingsboard.server.common.data.id.EntityId; |
36 | -import org.thingsboard.server.common.data.id.TenantId; | |
37 | -import org.thingsboard.server.common.data.query.EntityKeyType; | |
38 | -import org.thingsboard.server.common.data.query.KeyFilter; | |
39 | 36 | import org.thingsboard.server.common.msg.TbMsg; |
40 | 37 | import org.thingsboard.server.common.msg.TbMsgMetaData; |
41 | 38 | import org.thingsboard.server.common.msg.queue.ServiceQueue; |
39 | +import org.thingsboard.server.dao.alarm.AlarmOperationResult; | |
42 | 40 | import org.thingsboard.server.dao.util.mapping.JacksonUtil; |
43 | 41 | |
44 | 42 | import java.util.ArrayList; |
... | ... | @@ -118,8 +116,16 @@ class AlarmState { |
118 | 116 | for (AlarmRuleState state : createRulesSortedBySeverityDesc) { |
119 | 117 | stateUpdate = clearAlarmState(stateUpdate, state); |
120 | 118 | } |
121 | - ctx.getAlarmService().clearAlarm(ctx.getTenantId(), currentAlarm.getId(), createDetails(clearState), System.currentTimeMillis()); | |
122 | - pushMsg(ctx, new TbAlarmResult(false, false, true, currentAlarm)); | |
119 | + ListenableFuture<AlarmOperationResult> alarmClearOperationResult = ctx.getAlarmService().clearAlarmForResult( | |
120 | + ctx.getTenantId(), currentAlarm.getId(), createDetails(clearState), System.currentTimeMillis() | |
121 | + ); | |
122 | + DonAsynchron.withCallback(alarmClearOperationResult, | |
123 | + result -> { | |
124 | + pushMsg(ctx, new TbAlarmResult(false, false, true, result.getAlarm())); | |
125 | + }, | |
126 | + throwable -> { | |
127 | + throw new RuntimeException(throwable); | |
128 | + }); | |
123 | 129 | currentAlarm = null; |
124 | 130 | } else if (AlarmEvalResult.FALSE.equals(evalResult)) { |
125 | 131 | stateUpdate = clearAlarmState(stateUpdate, clearState); | ... | ... |