Commit 1ce365d8df83521ee64f88375d89f7f1719b96f0

Authored by Yevhen Bondarenko
Committed by GitHub
1 parent 4b0aae89

Improvements RestJsonConverter (#2452)

* Improvements RestJsonConverter

* Refactored RestJsonConverter
@@ -93,6 +93,7 @@ public class BaseRuleChainTransactionService implements RuleChainTransactionServ @@ -93,6 +93,7 @@ public class BaseRuleChainTransactionService implements RuleChainTransactionServ
93 TbTransactionTask transactionTask = new TbTransactionTask(msg, onStart, onEnd, onFailure, System.currentTimeMillis() + duration); 93 TbTransactionTask transactionTask = new TbTransactionTask(msg, onStart, onEnd, onFailure, System.currentTimeMillis() + duration);
94 int queueSize = queue.size(); 94 int queueSize = queue.size();
95 if (queueSize >= finalQueueSize) { 95 if (queueSize >= finalQueueSize) {
  96 + log.trace("Queue has no space: {}", transactionTask);
96 executeOnFailure(transactionTask.getOnFailure(), "Queue has no space!"); 97 executeOnFailure(transactionTask.getOnFailure(), "Queue has no space!");
97 } else { 98 } else {
98 addMsgToQueues(queue, transactionTask); 99 addMsgToQueues(queue, transactionTask);
@@ -250,9 +250,9 @@ actors: @@ -250,9 +250,9 @@ actors:
250 error_persist_frequency: "${ACTORS_RULE_NODE_ERROR_FREQUENCY:3000}" 250 error_persist_frequency: "${ACTORS_RULE_NODE_ERROR_FREQUENCY:3000}"
251 transaction: 251 transaction:
252 # Size of queues which store messages for transaction rule nodes 252 # Size of queues which store messages for transaction rule nodes
253 - queue_size: "${ACTORS_RULE_TRANSACTION_QUEUE_SIZE:20}" 253 + queue_size: "${ACTORS_RULE_TRANSACTION_QUEUE_SIZE:15000}"
254 # Time in milliseconds for transaction to complete 254 # Time in milliseconds for transaction to complete
255 - duration: "${ACTORS_RULE_TRANSACTION_DURATION:15000}" 255 + duration: "${ACTORS_RULE_TRANSACTION_DURATION:60000}"
256 statistics: 256 statistics:
257 # Enable/disable actor statistics 257 # Enable/disable actor statistics
258 enabled: "${ACTORS_STATISTICS_ENABLED:true}" 258 enabled: "${ACTORS_STATISTICS_ENABLED:true}"
@@ -22,6 +22,7 @@ import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry; @@ -22,6 +22,7 @@ import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry;
22 import org.thingsboard.server.common.data.kv.BasicTsKvEntry; 22 import org.thingsboard.server.common.data.kv.BasicTsKvEntry;
23 import org.thingsboard.server.common.data.kv.BooleanDataEntry; 23 import org.thingsboard.server.common.data.kv.BooleanDataEntry;
24 import org.thingsboard.server.common.data.kv.DoubleDataEntry; 24 import org.thingsboard.server.common.data.kv.DoubleDataEntry;
  25 +import org.thingsboard.server.common.data.kv.JsonDataEntry;
25 import org.thingsboard.server.common.data.kv.KvEntry; 26 import org.thingsboard.server.common.data.kv.KvEntry;
26 import org.thingsboard.server.common.data.kv.LongDataEntry; 27 import org.thingsboard.server.common.data.kv.LongDataEntry;
27 import org.thingsboard.server.common.data.kv.StringDataEntry; 28 import org.thingsboard.server.common.data.kv.StringDataEntry;
@@ -73,15 +74,28 @@ public class RestJsonConverter { @@ -73,15 +74,28 @@ public class RestJsonConverter {
73 if (!value.isObject()) { 74 if (!value.isObject()) {
74 if (value.isBoolean()) { 75 if (value.isBoolean()) {
75 return new BooleanDataEntry(key, value.asBoolean()); 76 return new BooleanDataEntry(key, value.asBoolean());
76 - } else if (value.isDouble()) {  
77 - return new DoubleDataEntry(key, value.asDouble());  
78 - } else if (value.isLong()) {  
79 - return new LongDataEntry(key, value.asLong());  
80 - } else { 77 + } else if (value.isNumber()) {
  78 + return parseNumericValue(key, value);
  79 + } else if (value.isTextual()) {
81 return new StringDataEntry(key, value.asText()); 80 return new StringDataEntry(key, value.asText());
  81 + } else {
  82 + throw new RuntimeException(CAN_T_PARSE_VALUE + value);
82 } 83 }
83 } else { 84 } else {
84 - throw new RuntimeException(CAN_T_PARSE_VALUE + value); 85 + return new JsonDataEntry(key, value.toString());
  86 + }
  87 + }
  88 +
  89 + private static KvEntry parseNumericValue(String key, JsonNode value) {
  90 + if (value.isFloatingPointNumber()) {
  91 + return new DoubleDataEntry(key, value.asDouble());
  92 + } else {
  93 + try {
  94 + long longValue = Long.parseLong(value.toString());
  95 + return new LongDataEntry(key, longValue);
  96 + } catch (NumberFormatException e) {
  97 + throw new IllegalArgumentException("Big integer values are not supported!");
  98 + }
85 } 99 }
86 } 100 }
87 } 101 }