thingsboard-memoizeit
Changes
application/src/main/java/org/thingsboard/server/service/script/AbstractNashornJsSandboxService.java 133(+133 -0)
application/src/main/java/org/thingsboard/server/service/script/NashornJsSandboxService.java 40(+10 -30)
application/src/main/java/org/thingsboard/server/service/script/RuleNodeJsScriptEngine.java 77(+23 -54)
application/src/main/java/org/thingsboard/server/service/script/RuleNodeScriptFactory.java 53(+53 -0)
application/src/test/java/org/thingsboard/server/service/script/RuleNodeJsScriptEngineTest.java 29(+17 -12)
application/src/test/java/org/thingsboard/server/service/script/TestNashornJsSandboxService.java 35(+18 -17)
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbAbstractAlarmNode.java 2(+1 -1)
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbLogNode.java 2(+1 -1)
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/debug/TbMsgGeneratorNode.java 2(+1 -1)
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsFilterNode.java 2(+1 -1)
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsSwitchNode.java 2(+1 -1)
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbTransformMsgNode.java 2(+1 -1)
rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbAlarmNodeTest.java 6(+3 -3)
rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbJsFilterNodeTest.java 2(+1 -1)
Details
diff --git a/application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java b/application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java
index a8b66dc..c1a2c17 100644
--- a/application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java
+++ b/application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java
@@ -44,7 +44,7 @@ import org.thingsboard.server.dao.relation.RelationService;
import org.thingsboard.server.dao.rule.RuleChainService;
import org.thingsboard.server.dao.timeseries.TimeseriesService;
import org.thingsboard.server.dao.user.UserService;
-import org.thingsboard.server.service.script.JsScriptEngine;
+import org.thingsboard.server.service.script.RuleNodeJsScriptEngine;
import scala.concurrent.duration.Duration;
import java.util.Collections;
@@ -151,8 +151,8 @@ class DefaultTbContext implements TbContext {
}
@Override
- public ScriptEngine createJsScriptEngine(String script, String functionName, String... argNames) {
- return new JsScriptEngine(mainCtx.getJsSandbox(), script, functionName, argNames);
+ public ScriptEngine createJsScriptEngine(String script, String... argNames) {
+ return new RuleNodeJsScriptEngine(mainCtx.getJsSandbox(), script, argNames);
}
@Override
diff --git a/application/src/main/java/org/thingsboard/server/controller/RuleChainController.java b/application/src/main/java/org/thingsboard/server/controller/RuleChainController.java
index e8a5f8d..86b8fda 100644
--- a/application/src/main/java/org/thingsboard/server/controller/RuleChainController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/RuleChainController.java
@@ -50,9 +50,8 @@ import org.thingsboard.server.common.data.rule.RuleChainMetaData;
import org.thingsboard.server.common.msg.TbMsg;
import org.thingsboard.server.common.msg.TbMsgMetaData;
import org.thingsboard.server.dao.event.EventService;
-import org.thingsboard.server.service.script.JsExecutorService;
import org.thingsboard.server.service.script.JsSandboxService;
-import org.thingsboard.server.service.script.JsScriptEngine;
+import org.thingsboard.server.service.script.RuleNodeJsScriptEngine;
import java.util.List;
import java.util.Map;
@@ -266,7 +265,6 @@ public class RuleChainController extends BaseController {
try {
String script = inputParams.get("script").asText();
String scriptType = inputParams.get("scriptType").asText();
- String functionName = inputParams.get("functionName").asText();
JsonNode argNamesJson = inputParams.get("argNames");
String[] argNames = objectMapper.treeToValue(argNamesJson, String[].class);
@@ -278,7 +276,7 @@ public class RuleChainController extends BaseController {
String errorText = "";
ScriptEngine engine = null;
try {
- engine = new JsScriptEngine(jsSandboxService, script, functionName, argNames);
+ engine = new RuleNodeJsScriptEngine(jsSandboxService, script, argNames);
TbMsg inMsg = new TbMsg(UUIDs.timeBased(), msgType, null, new TbMsgMetaData(metadata), data, null, null, 0L);
switch (scriptType) {
case "update":
diff --git a/application/src/main/java/org/thingsboard/server/service/script/AbstractNashornJsSandboxService.java b/application/src/main/java/org/thingsboard/server/service/script/AbstractNashornJsSandboxService.java
new file mode 100644
index 0000000..58ad84c
--- /dev/null
+++ b/application/src/main/java/org/thingsboard/server/service/script/AbstractNashornJsSandboxService.java
@@ -0,0 +1,133 @@
+/**
+ * Copyright © 2016-2018 The Thingsboard Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.thingsboard.server.service.script;
+
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import delight.nashornsandbox.NashornSandbox;
+import delight.nashornsandbox.NashornSandboxes;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.script.ScriptException;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.atomic.AtomicInteger;
+
+@Slf4j
+public abstract class AbstractNashornJsSandboxService implements JsSandboxService {
+
+ private NashornSandbox sandbox = NashornSandboxes.create();
+ private ExecutorService monitorExecutorService;
+
+ private Map<UUID, String> functionsMap = new ConcurrentHashMap<>();
+
+ private Map<UUID,AtomicInteger> blackListedFunctions = new ConcurrentHashMap<>();
+
+ @PostConstruct
+ public void init() {
+ monitorExecutorService = Executors.newFixedThreadPool(getMonitorThreadPoolSize());
+ sandbox.setExecutor(monitorExecutorService);
+ sandbox.setMaxCPUTime(getMaxCpuTime());
+ sandbox.allowNoBraces(false);
+ sandbox.setMaxPreparedStatements(30);
+ }
+
+ @PreDestroy
+ public void stop() {
+ if (monitorExecutorService != null) {
+ monitorExecutorService.shutdownNow();
+ }
+ }
+
+ protected abstract int getMonitorThreadPoolSize();
+
+ protected abstract long getMaxCpuTime();
+
+ protected abstract int getMaxErrors();
+
+ @Override
+ public ListenableFuture<UUID> eval(JsScriptType scriptType, String scriptBody, String... argNames) {
+ UUID scriptId = UUID.randomUUID();
+ String functionName = "invokeInternal_" + scriptId.toString().replace('-','_');
+ String jsScript = generateJsScript(scriptType, functionName, scriptBody, argNames);
+ try {
+ sandbox.eval(jsScript);
+ functionsMap.put(scriptId, functionName);
+ } catch (Exception e) {
+ log.warn("Failed to compile JS script: {}", e.getMessage(), e);
+ return Futures.immediateFailedFuture(e);
+ }
+ return Futures.immediateFuture(scriptId);
+ }
+
+ @Override
+ public ListenableFuture<Object> invokeFunction(UUID scriptId, Object... args) {
+ String functionName = functionsMap.get(scriptId);
+ if (functionName == null) {
+ return Futures.immediateFailedFuture(new RuntimeException("No compiled script found for scriptId: [" + scriptId + "]!"));
+ }
+ if (!isBlackListed(scriptId)) {
+ try {
+ return Futures.immediateFuture(sandbox.getSandboxedInvocable().invokeFunction(functionName, args));
+ } catch (Exception e) {
+ blackListedFunctions.computeIfAbsent(scriptId, key -> new AtomicInteger(0)).incrementAndGet();
+ return Futures.immediateFailedFuture(e);
+ }
+ } else {
+ return Futures.immediateFailedFuture(
+ new RuntimeException("Script is blacklisted due to maximum error count " + getMaxErrors() + "!"));
+ }
+ }
+
+ @Override
+ public ListenableFuture<Void> release(UUID scriptId) {
+ String functionName = functionsMap.get(scriptId);
+ if (functionName != null) {
+ try {
+ sandbox.eval(functionName + " = undefined;");
+ functionsMap.remove(scriptId);
+ blackListedFunctions.remove(scriptId);
+ } catch (ScriptException e) {
+ return Futures.immediateFailedFuture(e);
+ }
+ }
+ return Futures.immediateFuture(null);
+ }
+
+ private boolean isBlackListed(UUID scriptId) {
+ if (blackListedFunctions.containsKey(scriptId)) {
+ AtomicInteger errorCount = blackListedFunctions.get(scriptId);
+ return errorCount.get() >= getMaxErrors();
+ } else {
+ return false;
+ }
+ }
+
+ private String generateJsScript(JsScriptType scriptType, String functionName, String scriptBody, String... argNames) {
+ switch (scriptType) {
+ case RULE_NODE_SCRIPT:
+ return RuleNodeScriptFactory.generateRuleNodeScript(functionName, scriptBody, argNames);
+ default:
+ throw new RuntimeException("No script factory implemented for scriptType: " + scriptType);
+ }
+ }
+}
diff --git a/application/src/main/java/org/thingsboard/server/service/script/JsSandboxService.java b/application/src/main/java/org/thingsboard/server/service/script/JsSandboxService.java
index d250857..ee86c62 100644
--- a/application/src/main/java/org/thingsboard/server/service/script/JsSandboxService.java
+++ b/application/src/main/java/org/thingsboard/server/service/script/JsSandboxService.java
@@ -16,12 +16,16 @@
package org.thingsboard.server.service.script;
-import javax.script.ScriptException;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.util.UUID;
public interface JsSandboxService {
- Object eval(String js) throws ScriptException;
+ ListenableFuture<UUID> eval(JsScriptType scriptType, String scriptBody, String... argNames);
+
+ ListenableFuture<Object> invokeFunction(UUID scriptId, Object... args);
- Object invokeFunction(String name, Object... args) throws ScriptException, NoSuchMethodException;
+ ListenableFuture<Void> release(UUID scriptId);
}
diff --git a/application/src/main/java/org/thingsboard/server/service/script/JsScriptType.java b/application/src/main/java/org/thingsboard/server/service/script/JsScriptType.java
new file mode 100644
index 0000000..f7a4748
--- /dev/null
+++ b/application/src/main/java/org/thingsboard/server/service/script/JsScriptType.java
@@ -0,0 +1,21 @@
+/**
+ * Copyright © 2016-2018 The Thingsboard Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.thingsboard.server.service.script;
+
+public enum JsScriptType {
+ RULE_NODE_SCRIPT
+}
diff --git a/application/src/main/java/org/thingsboard/server/service/script/NashornJsSandboxService.java b/application/src/main/java/org/thingsboard/server/service/script/NashornJsSandboxService.java
index 576e149..a08a1a8 100644
--- a/application/src/main/java/org/thingsboard/server/service/script/NashornJsSandboxService.java
+++ b/application/src/main/java/org/thingsboard/server/service/script/NashornJsSandboxService.java
@@ -16,21 +16,13 @@
package org.thingsboard.server.service.script;
-import delight.nashornsandbox.NashornSandbox;
-import delight.nashornsandbox.NashornSandboxes;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.script.ScriptException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
@Slf4j
@Service
-public class NashornJsSandboxService implements JsSandboxService {
+public class NashornJsSandboxService extends AbstractNashornJsSandboxService {
@Value("${actors.rule.js_sandbox.monitor_thread_pool_size}")
private int monitorThreadPoolSize;
@@ -38,33 +30,21 @@ public class NashornJsSandboxService implements JsSandboxService {
@Value("${actors.rule.js_sandbox.max_cpu_time}")
private long maxCpuTime;
- private NashornSandbox sandbox = NashornSandboxes.create();
- private ExecutorService monitorExecutorService;
-
- @PostConstruct
- public void init() {
- monitorExecutorService = Executors.newFixedThreadPool(monitorThreadPoolSize);
- sandbox.setExecutor(monitorExecutorService);
- sandbox.setMaxCPUTime(maxCpuTime);
- sandbox.allowNoBraces(false);
- sandbox.setMaxPreparedStatements(30);
- }
+ @Value("${actors.rule.js_sandbox.max_errors}")
+ private int maxErrors;
- @PreDestroy
- public void stop() {
- if (monitorExecutorService != null) {
- monitorExecutorService.shutdownNow();
- }
+ @Override
+ protected int getMonitorThreadPoolSize() {
+ return monitorThreadPoolSize;
}
@Override
- public Object eval(String js) throws ScriptException {
- return sandbox.eval(js);
+ protected long getMaxCpuTime() {
+ return maxCpuTime;
}
@Override
- public Object invokeFunction(String name, Object... args) throws ScriptException, NoSuchMethodException {
- return sandbox.getSandboxedInvocable().invokeFunction(name, args);
+ protected int getMaxErrors() {
+ return maxErrors;
}
-
}
diff --git a/application/src/main/java/org/thingsboard/server/service/script/RuleNodeScriptFactory.java b/application/src/main/java/org/thingsboard/server/service/script/RuleNodeScriptFactory.java
new file mode 100644
index 0000000..5cc9c55
--- /dev/null
+++ b/application/src/main/java/org/thingsboard/server/service/script/RuleNodeScriptFactory.java
@@ -0,0 +1,53 @@
+/**
+ * Copyright © 2016-2018 The Thingsboard Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.thingsboard.server.service.script;
+
+public class RuleNodeScriptFactory {
+
+ public static final String MSG = "msg";
+ public static final String METADATA = "metadata";
+ public static final String MSG_TYPE = "msgType";
+ public static final String RULE_NODE_FUNCTION_NAME = "ruleNodeFunc";
+
+ private static final String JS_WRAPPER_PREFIX_TEMPLATE = "function %s(msgStr, metadataStr, msgType) { " +
+ " var msg = JSON.parse(msgStr); " +
+ " var metadata = JSON.parse(metadataStr); " +
+ " return JSON.stringify(%s(msg, metadata, msgType));" +
+ " function %s(%s, %s, %s) {";
+ private static final String JS_WRAPPER_SUFFIX = "}" +
+ "\n}";
+
+
+ public static String generateRuleNodeScript(String functionName, String scriptBody, String... argNames) {
+ String msgArg;
+ String metadataArg;
+ String msgTypeArg;
+ if (argNames != null && argNames.length == 3) {
+ msgArg = argNames[0];
+ metadataArg = argNames[1];
+ msgTypeArg = argNames[2];
+ } else {
+ msgArg = MSG;
+ metadataArg = METADATA;
+ msgTypeArg = MSG_TYPE;
+ }
+ String jsWrapperPrefix = String.format(JS_WRAPPER_PREFIX_TEMPLATE, functionName,
+ RULE_NODE_FUNCTION_NAME, RULE_NODE_FUNCTION_NAME, msgArg, metadataArg, msgTypeArg);
+ return jsWrapperPrefix + scriptBody + JS_WRAPPER_SUFFIX;
+ }
+
+}
diff --git a/application/src/main/resources/thingsboard.yml b/application/src/main/resources/thingsboard.yml
index 50f6e3e..018b47e 100644
--- a/application/src/main/resources/thingsboard.yml
+++ b/application/src/main/resources/thingsboard.yml
@@ -243,6 +243,8 @@ actors:
monitor_thread_pool_size: "${ACTORS_RULE_JS_SANDBOX_MONITOR_THREAD_POOL_SIZE:4}"
# Maximum CPU time in milliseconds allowed for script execution
max_cpu_time: "${ACTORS_RULE_JS_SANDBOX_MAX_CPU_TIME:100}"
+ # Maximum allowed JavaScript execution errors before JavaScript will be blacklisted
+ max_errors: "${ACTORS_RULE_JS_SANDBOX_MAX_ERRORS:3}"
chain:
# Errors for particular actor are persisted once per specified amount of milliseconds
error_persist_frequency: "${ACTORS_RULE_CHAIN_ERROR_FREQUENCY:3000}"
diff --git a/application/src/test/java/org/thingsboard/server/service/script/TestNashornJsSandboxService.java b/application/src/test/java/org/thingsboard/server/service/script/TestNashornJsSandboxService.java
index 84cca0c..f5f49e0 100644
--- a/application/src/test/java/org/thingsboard/server/service/script/TestNashornJsSandboxService.java
+++ b/application/src/test/java/org/thingsboard/server/service/script/TestNashornJsSandboxService.java
@@ -16,39 +16,40 @@
package org.thingsboard.server.service.script;
+import com.google.common.util.concurrent.ListenableFuture;
import delight.nashornsandbox.NashornSandbox;
import delight.nashornsandbox.NashornSandboxes;
import javax.script.ScriptException;
+import java.util.UUID;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
-public class TestNashornJsSandboxService implements JsSandboxService {
+public class TestNashornJsSandboxService extends AbstractNashornJsSandboxService {
- private NashornSandbox sandbox = NashornSandboxes.create();
- private ExecutorService monitorExecutorService;
+ private final int monitorThreadPoolSize;
+ private final long maxCpuTime;
+ private final int maxErrors;
- public TestNashornJsSandboxService(int monitorThreadPoolSize, long maxCpuTime) {
- monitorExecutorService = Executors.newFixedThreadPool(monitorThreadPoolSize);
- sandbox.setExecutor(monitorExecutorService);
- sandbox.setMaxCPUTime(maxCpuTime);
- sandbox.allowNoBraces(false);
- sandbox.setMaxPreparedStatements(30);
+ public TestNashornJsSandboxService(int monitorThreadPoolSize, long maxCpuTime, int maxErrors) {
+ this.monitorThreadPoolSize = monitorThreadPoolSize;
+ this.maxCpuTime = maxCpuTime;
+ this.maxErrors = maxErrors;
+ init();
}
@Override
- public Object eval(String js) throws ScriptException {
- return sandbox.eval(js);
+ protected int getMonitorThreadPoolSize() {
+ return monitorThreadPoolSize;
}
@Override
- public Object invokeFunction(String name, Object... args) throws ScriptException, NoSuchMethodException {
- return sandbox.getSandboxedInvocable().invokeFunction(name, args);
+ protected long getMaxCpuTime() {
+ return maxCpuTime;
}
- public void destroy() {
- if (monitorExecutorService != null) {
- monitorExecutorService.shutdownNow();
- }
+ @Override
+ protected int getMaxErrors() {
+ return maxErrors;
}
}
diff --git a/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/TbContext.java b/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/TbContext.java
index 31b7913..7349176 100644
--- a/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/TbContext.java
+++ b/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/TbContext.java
@@ -90,6 +90,6 @@ public interface TbContext {
MailService getMailService();
- ScriptEngine createJsScriptEngine(String script, String functionName, String... argNames);
+ ScriptEngine createJsScriptEngine(String script, String... argNames);
}
diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbAbstractAlarmNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbAbstractAlarmNode.java
index adb861b..8cf00cc 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbAbstractAlarmNode.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbAbstractAlarmNode.java
@@ -43,7 +43,7 @@ public abstract class TbAbstractAlarmNode<C extends TbAbstractAlarmNodeConfigura
@Override
public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException {
this.config = loadAlarmNodeConfig(configuration);
- this.buildDetailsJsEngine = ctx.createJsScriptEngine(config.getAlarmDetailsBuildJs(), "Details");
+ this.buildDetailsJsEngine = ctx.createJsScriptEngine(config.getAlarmDetailsBuildJs());
}
protected abstract C loadAlarmNodeConfig(TbNodeConfiguration configuration) throws TbNodeException;
diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbLogNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbLogNode.java
index 595826f..892b4d7 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbLogNode.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbLogNode.java
@@ -46,7 +46,7 @@ public class TbLogNode implements TbNode {
@Override
public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException {
this.config = TbNodeUtils.convert(configuration, TbLogNodeConfiguration.class);
- this.jsEngine = ctx.createJsScriptEngine(config.getJsScript(), "ToString");
+ this.jsEngine = ctx.createJsScriptEngine(config.getJsScript());
}
@Override
diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/debug/TbMsgGeneratorNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/debug/TbMsgGeneratorNode.java
index 9ad08c1..5de3dff 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/debug/TbMsgGeneratorNode.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/debug/TbMsgGeneratorNode.java
@@ -65,7 +65,7 @@ public class TbMsgGeneratorNode implements TbNode {
} else {
originatorId = ctx.getSelfId();
}
- this.jsEngine = ctx.createJsScriptEngine(config.getJsScript(), "Generate", "prevMsg", "prevMetadata", "prevMsgType");
+ this.jsEngine = ctx.createJsScriptEngine(config.getJsScript(), "prevMsg", "prevMetadata", "prevMsgType");
sentTickMsg(ctx);
}
diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsFilterNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsFilterNode.java
index c77d122..5075578 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsFilterNode.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsFilterNode.java
@@ -45,7 +45,7 @@ public class TbJsFilterNode implements TbNode {
@Override
public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException {
this.config = TbNodeUtils.convert(configuration, TbJsFilterNodeConfiguration.class);
- this.jsEngine = ctx.createJsScriptEngine(config.getJsScript(), "Filter");
+ this.jsEngine = ctx.createJsScriptEngine(config.getJsScript());
}
@Override
diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsSwitchNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsSwitchNode.java
index 8d60dd3..ac39eb5 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsSwitchNode.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsSwitchNode.java
@@ -47,7 +47,7 @@ public class TbJsSwitchNode implements TbNode {
@Override
public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException {
this.config = TbNodeUtils.convert(configuration, TbJsSwitchNodeConfiguration.class);
- this.jsEngine = ctx.createJsScriptEngine(config.getJsScript(), "Switch");
+ this.jsEngine = ctx.createJsScriptEngine(config.getJsScript());
}
@Override
diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbTransformMsgNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbTransformMsgNode.java
index 6edea6b..0334c3d 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbTransformMsgNode.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbTransformMsgNode.java
@@ -43,7 +43,7 @@ public class TbTransformMsgNode extends TbAbstractTransformNode {
@Override
public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException {
this.config = TbNodeUtils.convert(configuration, TbTransformMsgNodeConfiguration.class);
- this.jsEngine = ctx.createJsScriptEngine(config.getJsScript(), "Transform");
+ this.jsEngine = ctx.createJsScriptEngine(config.getJsScript());
setConfig(config);
}
diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbAlarmNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbAlarmNodeTest.java
index d5e594a..bdc61e9 100644
--- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbAlarmNodeTest.java
+++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbAlarmNodeTest.java
@@ -152,7 +152,7 @@ public class TbAlarmNodeTest {
verifyError(msg, "message", NotImplementedException.class);
- verify(ctx).createJsScriptEngine("DETAILS", "Details");
+ verify(ctx).createJsScriptEngine("DETAILS");
verify(ctx, times(1)).getJsExecutor();
verify(ctx).getAlarmService();
verify(ctx, times(2)).getDbCallbackExecutor();
@@ -314,7 +314,7 @@ public class TbAlarmNodeTest {
ObjectMapper mapper = new ObjectMapper();
TbNodeConfiguration nodeConfiguration = new TbNodeConfiguration(mapper.valueToTree(config));
- when(ctx.createJsScriptEngine("DETAILS", "Details")).thenReturn(detailsJs);
+ when(ctx.createJsScriptEngine("DETAILS")).thenReturn(detailsJs);
when(ctx.getTenantId()).thenReturn(tenantId);
when(ctx.getJsExecutor()).thenReturn(executor);
@@ -338,7 +338,7 @@ public class TbAlarmNodeTest {
ObjectMapper mapper = new ObjectMapper();
TbNodeConfiguration nodeConfiguration = new TbNodeConfiguration(mapper.valueToTree(config));
- when(ctx.createJsScriptEngine("DETAILS", "Details")).thenReturn(detailsJs);
+ when(ctx.createJsScriptEngine("DETAILS")).thenReturn(detailsJs);
when(ctx.getTenantId()).thenReturn(tenantId);
when(ctx.getJsExecutor()).thenReturn(executor);
diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbJsFilterNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbJsFilterNodeTest.java
index 50dd869..aeb20bb 100644
--- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbJsFilterNodeTest.java
+++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbJsFilterNodeTest.java
@@ -97,7 +97,7 @@ public class TbJsFilterNodeTest {
ObjectMapper mapper = new ObjectMapper();
TbNodeConfiguration nodeConfiguration = new TbNodeConfiguration(mapper.valueToTree(config));
- when(ctx.createJsScriptEngine("scr", "Filter")).thenReturn(scriptEngine);
+ when(ctx.createJsScriptEngine("scr")).thenReturn(scriptEngine);
node = new TbJsFilterNode();
node.init(ctx, nodeConfiguration);
diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbJsSwitchNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbJsSwitchNodeTest.java
index cc4c297..6d62009 100644
--- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbJsSwitchNodeTest.java
+++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbJsSwitchNodeTest.java
@@ -79,7 +79,7 @@ public class TbJsSwitchNodeTest {
ObjectMapper mapper = new ObjectMapper();
TbNodeConfiguration nodeConfiguration = new TbNodeConfiguration(mapper.valueToTree(config));
- when(ctx.createJsScriptEngine("scr", "Switch")).thenReturn(scriptEngine);
+ when(ctx.createJsScriptEngine("scr")).thenReturn(scriptEngine);
node = new TbJsSwitchNode();
node.init(ctx, nodeConfiguration);
diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbTransformMsgNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbTransformMsgNodeTest.java
index 5a71b7c..48e6353 100644
--- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbTransformMsgNodeTest.java
+++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbTransformMsgNodeTest.java
@@ -97,7 +97,7 @@ public class TbTransformMsgNodeTest {
ObjectMapper mapper = new ObjectMapper();
TbNodeConfiguration nodeConfiguration = new TbNodeConfiguration(mapper.valueToTree(config));
- when(ctx.createJsScriptEngine("scr", "Transform")).thenReturn(scriptEngine);
+ when(ctx.createJsScriptEngine("scr")).thenReturn(scriptEngine);
node = new TbTransformMsgNode();
node.init(ctx, nodeConfiguration);