Commit c32a2ac06476aae36c15a8b36fcbae9078d8c14d

Authored by YevhenBondarenko
Committed by Andrew Shvayka
1 parent e19bd433

load demo rule chains improvements

1 -{  
2 - "ruleChain": {  
3 - "additionalInfo": null,  
4 - "name": "Root Rule Chain",  
5 - "firstRuleNodeId": null,  
6 - "root": true,  
7 - "debugMode": false,  
8 - "configuration": null  
9 - },  
10 - "metadata": {  
11 - "firstNodeIndex": 6,  
12 - "nodes": [  
13 - {  
14 - "additionalInfo": {  
15 - "layoutX": 824,  
16 - "layoutY": 156  
17 - },  
18 - "type": "org.thingsboard.rule.engine.telemetry.TbMsgTimeseriesNode",  
19 - "name": "Save Timeseries",  
20 - "debugMode": false,  
21 - "configuration": {  
22 - "defaultTTL": 0  
23 - }  
24 - },  
25 - {  
26 - "additionalInfo": {  
27 - "layoutX": 825,  
28 - "layoutY": 52  
29 - },  
30 - "type": "org.thingsboard.rule.engine.telemetry.TbMsgAttributesNode",  
31 - "name": "Save Client Attributes",  
32 - "debugMode": false,  
33 - "configuration": {  
34 - "scope": "CLIENT_SCOPE",  
35 - "notifyDevice": "false"  
36 - }  
37 - },  
38 - {  
39 - "additionalInfo": {  
40 - "layoutX": 347,  
41 - "layoutY": 149  
42 - },  
43 - "type": "org.thingsboard.rule.engine.filter.TbMsgTypeSwitchNode",  
44 - "name": "Message Type Switch",  
45 - "debugMode": false,  
46 - "configuration": {  
47 - "version": 0  
48 - }  
49 - },  
50 - {  
51 - "additionalInfo": {  
52 - "layoutX": 825,  
53 - "layoutY": 266  
54 - },  
55 - "type": "org.thingsboard.rule.engine.action.TbLogNode",  
56 - "name": "Log RPC from Device",  
57 - "debugMode": false,  
58 - "configuration": {  
59 - "jsScript": "return '\\nIncoming message:\\n' + JSON.stringify(msg) + '\\nIncoming metadata:\\n' + JSON.stringify(metadata);"  
60 - }  
61 - },  
62 - {  
63 - "additionalInfo": {  
64 - "layoutX": 825,  
65 - "layoutY": 379  
66 - },  
67 - "type": "org.thingsboard.rule.engine.action.TbLogNode",  
68 - "name": "Log Other",  
69 - "debugMode": false,  
70 - "configuration": {  
71 - "jsScript": "return '\\nIncoming message:\\n' + JSON.stringify(msg) + '\\nIncoming metadata:\\n' + JSON.stringify(metadata);"  
72 - }  
73 - },  
74 - {  
75 - "additionalInfo": {  
76 - "layoutX": 825,  
77 - "layoutY": 468  
78 - },  
79 - "type": "org.thingsboard.rule.engine.rpc.TbSendRPCRequestNode",  
80 - "name": "RPC Call Request",  
81 - "debugMode": false,  
82 - "configuration": {  
83 - "timeoutInSeconds": 60  
84 - }  
85 - },  
86 - {  
87 - "additionalInfo": {  
88 - "description": "Process incoming messages from devices with the alarm rules defined in the device profile. Dispatch all incoming messages with \"Success\" relation type.",  
89 - "layoutX": 204,  
90 - "layoutY": 240  
91 - },  
92 - "type": "org.thingsboard.rule.engine.profile.TbDeviceProfileNode",  
93 - "name": "Device Profile Node",  
94 - "debugMode": false,  
95 - "configuration": {  
96 - "persistAlarmRulesState": false,  
97 - "fetchAlarmRulesStateOnStart": false  
98 - }  
99 - }  
100 - ],  
101 - "connections": [  
102 - {  
103 - "fromIndex": 6,  
104 - "toIndex": 2,  
105 - "type": "Success"  
106 - },  
107 - {  
108 - "fromIndex": 2,  
109 - "toIndex": 4,  
110 - "type": "Other"  
111 - },  
112 - {  
113 - "fromIndex": 2,  
114 - "toIndex": 1,  
115 - "type": "Post attributes"  
116 - },  
117 - {  
118 - "fromIndex": 2,  
119 - "toIndex": 0,  
120 - "type": "Post telemetry"  
121 - },  
122 - {  
123 - "fromIndex": 2,  
124 - "toIndex": 3,  
125 - "type": "RPC Request from Device"  
126 - },  
127 - {  
128 - "fromIndex": 2,  
129 - "toIndex": 5,  
130 - "type": "RPC Request to Device"  
131 - }  
132 - ],  
133 - "ruleChainConnections": null  
134 - }  
135 -}  
1 -{  
2 - "ruleChain": {  
3 - "additionalInfo": null,  
4 - "name": "Thermostat",  
5 - "firstRuleNodeId": null,  
6 - "root": false,  
7 - "debugMode": false,  
8 - "configuration": null  
9 - },  
10 - "metadata": {  
11 - "firstNodeIndex": 6,  
12 - "nodes": [  
13 - {  
14 - "additionalInfo": {  
15 - "layoutX": 824,  
16 - "layoutY": 156  
17 - },  
18 - "type": "org.thingsboard.rule.engine.telemetry.TbMsgTimeseriesNode",  
19 - "name": "Save Timeseries",  
20 - "debugMode": false,  
21 - "configuration": {  
22 - "defaultTTL": 0  
23 - }  
24 - },  
25 - {  
26 - "additionalInfo": {  
27 - "layoutX": 825,  
28 - "layoutY": 52  
29 - },  
30 - "type": "org.thingsboard.rule.engine.telemetry.TbMsgAttributesNode",  
31 - "name": "Save Client Attributes",  
32 - "debugMode": false,  
33 - "configuration": {  
34 - "scope": "CLIENT_SCOPE",  
35 - "notifyDevice": "false"  
36 - }  
37 - },  
38 - {  
39 - "additionalInfo": {  
40 - "layoutX": 347,  
41 - "layoutY": 149  
42 - },  
43 - "type": "org.thingsboard.rule.engine.filter.TbMsgTypeSwitchNode",  
44 - "name": "Message Type Switch",  
45 - "debugMode": false,  
46 - "configuration": {  
47 - "version": 0  
48 - }  
49 - },  
50 - {  
51 - "additionalInfo": {  
52 - "layoutX": 825,  
53 - "layoutY": 266  
54 - },  
55 - "type": "org.thingsboard.rule.engine.action.TbLogNode",  
56 - "name": "Log RPC from Device",  
57 - "debugMode": false,  
58 - "configuration": {  
59 - "jsScript": "return '\\nIncoming message:\\n' + JSON.stringify(msg) + '\\nIncoming metadata:\\n' + JSON.stringify(metadata);"  
60 - }  
61 - },  
62 - {  
63 - "additionalInfo": {  
64 - "layoutX": 825,  
65 - "layoutY": 379  
66 - },  
67 - "type": "org.thingsboard.rule.engine.action.TbLogNode",  
68 - "name": "Log Other",  
69 - "debugMode": false,  
70 - "configuration": {  
71 - "jsScript": "return '\\nIncoming message:\\n' + JSON.stringify(msg) + '\\nIncoming metadata:\\n' + JSON.stringify(metadata);"  
72 - }  
73 - },  
74 - {  
75 - "additionalInfo": {  
76 - "layoutX": 825,  
77 - "layoutY": 468  
78 - },  
79 - "type": "org.thingsboard.rule.engine.rpc.TbSendRPCRequestNode",  
80 - "name": "RPC Call Request",  
81 - "debugMode": false,  
82 - "configuration": {  
83 - "timeoutInSeconds": 60  
84 - }  
85 - },  
86 - {  
87 - "additionalInfo": {  
88 - "description": "Process incoming messages from devices with the alarm rules defined in the device profile. Dispatch all incoming messages with \"Success\" relation type.",  
89 - "layoutX": 204,  
90 - "layoutY": 240  
91 - },  
92 - "type": "org.thingsboard.rule.engine.profile.TbDeviceProfileNode",  
93 - "name": "Device Profile Node",  
94 - "debugMode": false,  
95 - "configuration": {  
96 - "persistAlarmRulesState": false,  
97 - "fetchAlarmRulesStateOnStart": false  
98 - }  
99 - }  
100 - ],  
101 - "connections": [  
102 - {  
103 - "fromIndex": 6,  
104 - "toIndex": 2,  
105 - "type": "Success"  
106 - },  
107 - {  
108 - "fromIndex": 2,  
109 - "toIndex": 4,  
110 - "type": "Other"  
111 - },  
112 - {  
113 - "fromIndex": 2,  
114 - "toIndex": 1,  
115 - "type": "Post attributes"  
116 - },  
117 - {  
118 - "fromIndex": 2,  
119 - "toIndex": 0,  
120 - "type": "Post telemetry"  
121 - },  
122 - {  
123 - "fromIndex": 2,  
124 - "toIndex": 3,  
125 - "type": "RPC Request from Device"  
126 - },  
127 - {  
128 - "fromIndex": 2,  
129 - "toIndex": 5,  
130 - "type": "RPC Request to Device"  
131 - }  
132 - ],  
133 - "ruleChainConnections": null  
134 - }  
135 -}  
@@ -33,6 +33,7 @@ import org.thingsboard.server.common.data.asset.Asset; @@ -33,6 +33,7 @@ import org.thingsboard.server.common.data.asset.Asset;
33 import org.thingsboard.server.common.data.asset.AssetInfo; 33 import org.thingsboard.server.common.data.asset.AssetInfo;
34 import org.thingsboard.server.common.data.asset.AssetSearchQuery; 34 import org.thingsboard.server.common.data.asset.AssetSearchQuery;
35 import org.thingsboard.server.common.data.audit.ActionType; 35 import org.thingsboard.server.common.data.audit.ActionType;
  36 +import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
36 import org.thingsboard.server.common.data.exception.ThingsboardException; 37 import org.thingsboard.server.common.data.exception.ThingsboardException;
37 import org.thingsboard.server.common.data.id.AssetId; 38 import org.thingsboard.server.common.data.id.AssetId;
38 import org.thingsboard.server.common.data.id.CustomerId; 39 import org.thingsboard.server.common.data.id.CustomerId;
@@ -51,6 +52,8 @@ import java.util.ArrayList; @@ -51,6 +52,8 @@ import java.util.ArrayList;
51 import java.util.List; 52 import java.util.List;
52 import java.util.stream.Collectors; 53 import java.util.stream.Collectors;
53 54
  55 +import static org.thingsboard.server.dao.asset.BaseAssetService.TB_SERVICE_QUEUE;
  56 +
54 @RestController 57 @RestController
55 @TbCoreComponent 58 @TbCoreComponent
56 @RequestMapping("/api") 59 @RequestMapping("/api")
@@ -89,6 +92,10 @@ public class AssetController extends BaseController { @@ -89,6 +92,10 @@ public class AssetController extends BaseController {
89 @ResponseBody 92 @ResponseBody
90 public Asset saveAsset(@RequestBody Asset asset) throws ThingsboardException { 93 public Asset saveAsset(@RequestBody Asset asset) throws ThingsboardException {
91 try { 94 try {
  95 + if (TB_SERVICE_QUEUE.equals(asset.getType())) {
  96 + throw new ThingsboardException("Unable to save asset with type " + TB_SERVICE_QUEUE, ThingsboardErrorCode.BAD_REQUEST_PARAMS);
  97 + }
  98 +
92 asset.setTenantId(getCurrentUser().getTenantId()); 99 asset.setTenantId(getCurrentUser().getTenantId());
93 100
94 checkEntity(asset.getId(), asset, Resource.ASSET); 101 checkEntity(asset.getId(), asset, Resource.ASSET);
@@ -210,23 +210,9 @@ public class InstallScripts { @@ -210,23 +210,9 @@ public class InstallScripts {
210 210
211 211
212 public void loadDemoRuleChains(TenantId tenantId) throws Exception { 212 public void loadDemoRuleChains(TenantId tenantId) throws Exception {
213 - Path ruleChainsDir = Paths.get(getDataDir(), JSON_DIR, DEMO_DIR, RULE_CHAINS_DIR);  
214 try { 213 try {
215 - JsonNode thermostatRuleChainJson = objectMapper.readTree(ruleChainsDir.resolve("thermostat_rule_chain.json").toFile());  
216 - RuleChain thermostatRuleChain = objectMapper.treeToValue(thermostatRuleChainJson.get("ruleChain"), RuleChain.class);  
217 - RuleChainMetaData ruleChainMetaData = objectMapper.treeToValue(thermostatRuleChainJson.get("metadata"), RuleChainMetaData.class);  
218 - thermostatRuleChain.setTenantId(tenantId);  
219 - thermostatRuleChain = ruleChainService.saveRuleChain(thermostatRuleChain);  
220 - ruleChainMetaData.setRuleChainId(thermostatRuleChain.getId());  
221 - ruleChainService.saveRuleChainMetaData(new TenantId(EntityId.NULL_UUID), ruleChainMetaData);  
222 -  
223 - JsonNode rootChainJson = objectMapper.readTree(ruleChainsDir.resolve("root_rule_chain.json").toFile());  
224 - RuleChain rootChain = objectMapper.treeToValue(rootChainJson.get("ruleChain"), RuleChain.class);  
225 - RuleChainMetaData rootChainMetaData = objectMapper.treeToValue(rootChainJson.get("metadata"), RuleChainMetaData.class);  
226 - rootChain.setTenantId(tenantId);  
227 - rootChain = ruleChainService.saveRuleChain(rootChain);  
228 - rootChainMetaData.setRuleChainId(rootChain.getId());  
229 - ruleChainService.saveRuleChainMetaData(new TenantId(EntityId.NULL_UUID), rootChainMetaData); 214 + createDefaultRuleChains(tenantId);
  215 + createDefaultRuleChain(tenantId, "Thermostat");
230 } catch (Exception e) { 216 } catch (Exception e) {
231 log.error("Unable to load dashboard from json", e); 217 log.error("Unable to load dashboard from json", e);
232 throw new RuntimeException("Unable to load dashboard from json", e); 218 throw new RuntimeException("Unable to load dashboard from json", e);