Commit 86779276cc4f047a8cadd11b31b0e1233cc87131
Committed by
Andrew Shvayka
1 parent
e318b193
Use metadata keys in originator attribute/telemetry nodes
Showing
3 changed files
with
23 additions
and
10 deletions
... | ... | @@ -17,11 +17,15 @@ package org.thingsboard.rule.engine.api.util; |
17 | 17 | |
18 | 18 | import com.fasterxml.jackson.core.JsonProcessingException; |
19 | 19 | import com.fasterxml.jackson.databind.ObjectMapper; |
20 | +import org.springframework.util.CollectionUtils; | |
20 | 21 | import org.thingsboard.rule.engine.api.TbNodeConfiguration; |
21 | 22 | import org.thingsboard.rule.engine.api.TbNodeException; |
22 | 23 | import org.thingsboard.server.common.msg.TbMsgMetaData; |
23 | 24 | |
25 | +import java.util.Collections; | |
26 | +import java.util.List; | |
24 | 27 | import java.util.Map; |
28 | +import java.util.stream.Collectors; | |
25 | 29 | |
26 | 30 | /** |
27 | 31 | * Created by ashvayka on 19.01.18. |
... | ... | @@ -41,6 +45,13 @@ public class TbNodeUtils { |
41 | 45 | } |
42 | 46 | } |
43 | 47 | |
48 | + public static List<String> processPatterns(List<String> patterns, TbMsgMetaData metaData) { | |
49 | + if (!CollectionUtils.isEmpty(patterns)) { | |
50 | + return patterns.stream().map(p -> processPattern(p, metaData)).collect(Collectors.toList()); | |
51 | + } | |
52 | + return Collections.emptyList(); | |
53 | + } | |
54 | + | |
44 | 55 | public static String processPattern(String pattern, TbMsgMetaData metaData) { |
45 | 56 | String result = new String(pattern); |
46 | 57 | for (Map.Entry<String,String> keyVal : metaData.values().entrySet()) { | ... | ... |
... | ... | @@ -29,6 +29,7 @@ import org.thingsboard.rule.engine.api.TbContext; |
29 | 29 | import org.thingsboard.rule.engine.api.TbNode; |
30 | 30 | import org.thingsboard.rule.engine.api.TbNodeConfiguration; |
31 | 31 | import org.thingsboard.rule.engine.api.TbNodeException; |
32 | +import org.thingsboard.rule.engine.api.util.TbNodeUtils; | |
32 | 33 | import org.thingsboard.server.common.data.id.EntityId; |
33 | 34 | import org.thingsboard.server.common.data.kv.AttributeKvEntry; |
34 | 35 | import org.thingsboard.server.common.data.kv.KvEntry; |
... | ... | @@ -91,10 +92,10 @@ public abstract class TbAbstractGetAttributesNode<C extends TbGetAttributesNodeC |
91 | 92 | } |
92 | 93 | ConcurrentHashMap<String, List<String>> failuresMap = new ConcurrentHashMap<>(); |
93 | 94 | ListenableFuture<List<Void>> allFutures = Futures.allAsList( |
94 | - putLatestTelemetry(ctx, entityId, msg, LATEST_TS, config.getLatestTsKeyNames(), failuresMap), | |
95 | - putAttrAsync(ctx, entityId, msg, CLIENT_SCOPE, config.getClientAttributeNames(), failuresMap, "cs_"), | |
96 | - putAttrAsync(ctx, entityId, msg, SHARED_SCOPE, config.getSharedAttributeNames(), failuresMap, "shared_"), | |
97 | - putAttrAsync(ctx, entityId, msg, SERVER_SCOPE, config.getServerAttributeNames(), failuresMap, "ss_") | |
95 | + putLatestTelemetry(ctx, entityId, msg, LATEST_TS, TbNodeUtils.processPatterns(config.getLatestTsKeyNames(), msg.getMetaData()), failuresMap), | |
96 | + putAttrAsync(ctx, entityId, msg, CLIENT_SCOPE, TbNodeUtils.processPatterns(config.getClientAttributeNames(), msg.getMetaData()), failuresMap, "cs_"), | |
97 | + putAttrAsync(ctx, entityId, msg, SHARED_SCOPE, TbNodeUtils.processPatterns(config.getSharedAttributeNames(), msg.getMetaData()), failuresMap, "shared_"), | |
98 | + putAttrAsync(ctx, entityId, msg, SERVER_SCOPE, TbNodeUtils.processPatterns(config.getServerAttributeNames(), msg.getMetaData()), failuresMap, "ss_") | |
98 | 99 | ); |
99 | 100 | withCallback(allFutures, i -> { |
100 | 101 | if (!failuresMap.isEmpty()) { | ... | ... |
... | ... | @@ -103,9 +103,10 @@ public class TbGetTelemetryNode implements TbNode { |
103 | 103 | if (config.isUseMetadataIntervalPatterns()) { |
104 | 104 | checkMetadataKeyPatterns(msg); |
105 | 105 | } |
106 | - ListenableFuture<List<TsKvEntry>> list = ctx.getTimeseriesService().findAll(ctx.getTenantId(), msg.getOriginator(), buildQueries(msg)); | |
106 | + List<String> keys = TbNodeUtils.processPatterns(tsKeyNames, msg.getMetaData()); | |
107 | + ListenableFuture<List<TsKvEntry>> list = ctx.getTimeseriesService().findAll(ctx.getTenantId(), msg.getOriginator(), buildQueries(msg, keys)); | |
107 | 108 | DonAsynchron.withCallback(list, data -> { |
108 | - process(data, msg); | |
109 | + process(data, msg, keys); | |
109 | 110 | ctx.tellSuccess(ctx.transformMsg(msg, msg.getType(), msg.getOriginator(), msg.getMetaData(), msg.getData())); |
110 | 111 | }, error -> ctx.tellFailure(msg, error), ctx.getDbCallbackExecutor()); |
111 | 112 | } catch (Exception e) { |
... | ... | @@ -118,8 +119,8 @@ public class TbGetTelemetryNode implements TbNode { |
118 | 119 | public void destroy() { |
119 | 120 | } |
120 | 121 | |
121 | - private List<ReadTsKvQuery> buildQueries(TbMsg msg) { | |
122 | - return tsKeyNames.stream() | |
122 | + private List<ReadTsKvQuery> buildQueries(TbMsg msg, List<String> keys) { | |
123 | + return keys.stream() | |
123 | 124 | .map(key -> new BaseReadTsKvQuery(key, getInterval(msg).getStartTs(), getInterval(msg).getEndTs(), 1, limit, NONE, getOrderBy())) |
124 | 125 | .collect(Collectors.toList()); |
125 | 126 | } |
... | ... | @@ -135,7 +136,7 @@ public class TbGetTelemetryNode implements TbNode { |
135 | 136 | } |
136 | 137 | } |
137 | 138 | |
138 | - private void process(List<TsKvEntry> entries, TbMsg msg) { | |
139 | + private void process(List<TsKvEntry> entries, TbMsg msg, List<String> keys) { | |
139 | 140 | ObjectNode resultNode = mapper.createObjectNode(); |
140 | 141 | if (FETCH_MODE_ALL.equals(fetchMode)) { |
141 | 142 | entries.forEach(entry -> processArray(resultNode, entry)); |
... | ... | @@ -143,7 +144,7 @@ public class TbGetTelemetryNode implements TbNode { |
143 | 144 | entries.forEach(entry -> processSingle(resultNode, entry)); |
144 | 145 | } |
145 | 146 | |
146 | - for (String key : tsKeyNames) { | |
147 | + for (String key : keys) { | |
147 | 148 | if (resultNode.has(key)) { |
148 | 149 | msg.getMetaData().putValue(key, resultNode.get(key).toString()); |
149 | 150 | } | ... | ... |