thingsboard-memoizeit

Changes

common/queue/src/main/java/org/thingsboard/server/kafka/TbJsEvaluator.java 68(+0 -68)

common/queue/src/main/java/org/thingsboard/server/kafka/TbRuleEngineEmulator.java 114(+0 -114)

Details

diff --git a/application/src/main/java/org/thingsboard/server/service/script/RemoteJsInvokeService.java b/application/src/main/java/org/thingsboard/server/service/script/RemoteJsInvokeService.java
index da8d62a..3507397 100644
--- a/application/src/main/java/org/thingsboard/server/service/script/RemoteJsInvokeService.java
+++ b/application/src/main/java/org/thingsboard/server/service/script/RemoteJsInvokeService.java
@@ -47,9 +47,6 @@ public class RemoteJsInvokeService extends AbstractJsInvokeService {
     @Autowired
     private TbKafkaSettings kafkaSettings;
 
-    @Value("${js.remote.use_js_sandbox}")
-    private boolean useJsSandbox;
-
     @Value("${js.remote.request_topic}")
     private String requestTopic;
 
@@ -99,8 +96,8 @@ public class RemoteJsInvokeService extends AbstractJsInvokeService {
     }
 
     @PreDestroy
-    public void destroy(){
-        if(kafkaTemplate != null){
+    public void destroy() {
+        if (kafkaTemplate != null) {
             kafkaTemplate.stop();
         }
     }
@@ -138,14 +135,19 @@ public class RemoteJsInvokeService extends AbstractJsInvokeService {
         if (scriptBody == null) {
             return Futures.immediateFailedFuture(new RuntimeException("No script body found for scriptId: [" + scriptId + "]!"));
         }
-        JsInvokeProtos.JsInvokeRequest jsRequest = JsInvokeProtos.JsInvokeRequest.newBuilder()
+        JsInvokeProtos.JsInvokeRequest.Builder jsRequestBuilder = JsInvokeProtos.JsInvokeRequest.newBuilder()
                 .setScriptIdMSB(scriptId.getMostSignificantBits())
                 .setScriptIdLSB(scriptId.getLeastSignificantBits())
                 .setFunctionName(functionName)
-                .setScriptBody(scriptIdToBodysMap.get(scriptId)).build();
+                .setTimeout((int) maxRequestsTimeout)
+                .setScriptBody(scriptIdToBodysMap.get(scriptId));
+
+        for (int i = 0; i < args.length; i++) {
+            jsRequestBuilder.setArgs(i, args[i].toString());
+        }
 
         JsInvokeProtos.RemoteJsRequest jsRequestWrapper = JsInvokeProtos.RemoteJsRequest.newBuilder()
-                .setInvokeRequest(jsRequest)
+                .setInvokeRequest(jsRequestBuilder.build())
                 .build();
 
         ListenableFuture<JsInvokeProtos.RemoteJsResponse> future = kafkaTemplate.post(scriptId.toString(), jsRequestWrapper);
diff --git a/application/src/main/proto/jsinvoke.proto b/application/src/main/proto/jsinvoke.proto
index 475c7bd..d85c353 100644
--- a/application/src/main/proto/jsinvoke.proto
+++ b/application/src/main/proto/jsinvoke.proto
@@ -19,10 +19,10 @@ package js;
 option java_package = "org.thingsboard.server.gen.js";
 option java_outer_classname = "JsInvokeProtos";
 
-enum JsInvokeErrorCode{
+enum JsInvokeErrorCode {
   COMPILATION_ERROR = 0;
   RUNTIME_ERROR = 1;
-  CPU_USAGE_ERROR = 2;
+  TIMEOUT_ERROR = 2;
 }
 
 message RemoteJsRequest {
@@ -69,7 +69,8 @@ message JsInvokeRequest {
   int64 scriptIdLSB = 2;
   string functionName = 3;
   string scriptBody = 4;
-  repeated string args = 5;
+  int32 timeout = 5;
+  repeated string args = 6;
 }
 
 message JsInvokeResponse {
diff --git a/application/src/main/resources/thingsboard.yml b/application/src/main/resources/thingsboard.yml
index eb40ac5..37fd6cf 100644
--- a/application/src/main/resources/thingsboard.yml
+++ b/application/src/main/resources/thingsboard.yml
@@ -415,7 +415,7 @@ kafka:
   buffer.memory: "${TB_BUFFER_MEMORY:33554432}"
 
 js:
-  evaluator: "${JS_EVALUATOR:local}" # local/external
+  evaluator: "${JS_EVALUATOR:local}" # local/remote
   # Built-in JVM JavaScript environment properties
   local:
     # Use Sandboxed (secured) JVM JavaScript environment
@@ -428,8 +428,6 @@ js:
     max_errors: "${LOCAL_JS_SANDBOX_MAX_ERRORS:3}"
   # Remote JavaScript environment properties
   remote:
-    # Use Sandboxed (secured) JVM JavaScript environment
-    use_js_sandbox: "${USE_REMOTE_JS_SANDBOX:true}"
     # JS Eval request topic
     request_topic: "${REMOTE_JS_EVAL_REQUEST_TOPIC:js.eval.requests}"
     # JS Eval responses topic prefix that is combined with node id
@@ -437,7 +435,7 @@ js:
     # JS Eval max pending requests
     max_pending_requests: "${REMOTE_JS_MAX_PENDING_REQUESTS:10000}"
     # JS Eval max request timeout
-    max_requests_timeout: "${REMOTE_JS_MAX_REQUEST_TIMEOUT:20000}"
+    max_requests_timeout: "${REMOTE_JS_MAX_REQUEST_TIMEOUT:10000}"
     # JS response poll interval
     response_poll_interval: "${REMOTE_JS_RESPONSE_POLL_INTERVAL_MS:25}"
     # Maximum allowed JavaScript execution errors before JavaScript will be blacklisted