From 2fa861670ed898866411e69172491307eb5dfe27 Mon Sep 17 00:00:00 2001 From: ShvaykaD Date: Wed, 5 Jun 2019 13:54:07 +0300 Subject: [PATCH] Improvements/originator&device attributes node (#1733) * update rule-node-configurations * typo * backward compatibility --- .../metadata/TbAbstractGetAttributesNode.java | 26 ++++++++++++++----- .../TbGetAttributesNodeConfiguration.java | 3 +++ .../TbGetDeviceAttrNodeConfiguration.java | 1 + 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbAbstractGetAttributesNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbAbstractGetAttributesNode.java index 26e25da79f..1aa1af0f61 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbAbstractGetAttributesNode.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbAbstractGetAttributesNode.java @@ -18,6 +18,7 @@ package org.thingsboard.rule.engine.metadata; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.thingsboard.rule.engine.api.TbContext; import org.thingsboard.rule.engine.api.TbNode; import org.thingsboard.rule.engine.api.TbNodeConfiguration; @@ -80,11 +81,18 @@ public abstract class TbAbstractGetAttributesNode> latest = ctx.getAttributesService().find(ctx.getTenantId(), entityId, scope, keys); return Futures.transform(latest, l -> { l.forEach(r -> { - if (r.getValue() != null) { - msg.getMetaData().putValue(prefix + r.getKey(), r.getValueAsString()); + if (BooleanUtils.toBooleanDefaultIfNull(this.config.isTellFailureIfAbsent(), true)) { + if (r.getValue() != null) { + msg.getMetaData().putValue(prefix + r.getKey(), r.getValueAsString()); + } else { + throw new RuntimeException("[" + scope + "][" + r.getKey() + "] attribute value is not present in the DB!"); + } } else { - throw new RuntimeException("[" + scope + "][" + r.getKey() + "] attribute value is not present in the DB!"); + if (r.getValue() != null) { + msg.getMetaData().putValue(prefix + r.getKey(), r.getValueAsString()); + } } + }); return null; }); @@ -97,10 +105,16 @@ public abstract class TbAbstractGetAttributesNode> latest = ctx.getTimeseriesService().findLatest(ctx.getTenantId(), entityId, keys); return Futures.transform(latest, l -> { l.forEach(r -> { - if (r.getValue() != null) { - msg.getMetaData().putValue(r.getKey(), r.getValueAsString()); + if (BooleanUtils.toBooleanDefaultIfNull(this.config.isTellFailureIfAbsent(), true)) { + if (r.getValue() != null) { + msg.getMetaData().putValue(r.getKey(), r.getValueAsString()); + } else { + throw new RuntimeException("[" + r.getKey() + "] telemetry value is not present in the DB!"); + } } else { - throw new RuntimeException("[" + r.getKey() + "] telemetry value is not present in the DB!"); + if (r.getValue() != null) { + msg.getMetaData().putValue(r.getKey(), r.getValueAsString()); + } } }); return null; diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetAttributesNodeConfiguration.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetAttributesNodeConfiguration.java index 6588013a46..2b47b5264a 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetAttributesNodeConfiguration.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetAttributesNodeConfiguration.java @@ -33,6 +33,8 @@ public class TbGetAttributesNodeConfiguration implements NodeConfiguration latestTsKeyNames; + private boolean tellFailureIfAbsent; + @Override public TbGetAttributesNodeConfiguration defaultConfiguration() { TbGetAttributesNodeConfiguration configuration = new TbGetAttributesNodeConfiguration(); @@ -40,6 +42,7 @@ public class TbGetAttributesNodeConfiguration implements NodeConfiguration