From e5753c036076fbc73ce74d8f1bf4333491b66b20 Mon Sep 17 00:00:00 2001 From: Volodymyr Babak Date: Tue, 29 Dec 2020 10:18:42 +0200 Subject: [PATCH] Refactored edge rule chains storage --- .../rule_chains/edge_root_rule_chain.json | 0 .../rule_chains/edge_root_rule_chain.json | 0 .../server/controller/TenantController.java | 3 ++ .../service/install/InstallScripts.java | 38 +++++++++++++------ .../install/PsqlTsDatabaseUpgradeService.java | 2 +- .../server/dao/rule/BaseRuleChainService.java | 2 +- 6 files changed, 32 insertions(+), 13 deletions(-) rename application/src/main/data/json/demo/{ => edge_management}/rule_chains/edge_root_rule_chain.json (100%) rename application/src/main/data/json/tenant/{ => edge_management}/rule_chains/edge_root_rule_chain.json (100%) diff --git a/application/src/main/data/json/demo/rule_chains/edge_root_rule_chain.json b/application/src/main/data/json/demo/edge_management/rule_chains/edge_root_rule_chain.json similarity index 100% rename from application/src/main/data/json/demo/rule_chains/edge_root_rule_chain.json rename to application/src/main/data/json/demo/edge_management/rule_chains/edge_root_rule_chain.json diff --git a/application/src/main/data/json/tenant/rule_chains/edge_root_rule_chain.json b/application/src/main/data/json/tenant/edge_management/rule_chains/edge_root_rule_chain.json similarity index 100% rename from application/src/main/data/json/tenant/rule_chains/edge_root_rule_chain.json rename to application/src/main/data/json/tenant/edge_management/rule_chains/edge_root_rule_chain.json diff --git a/application/src/main/java/org/thingsboard/server/controller/TenantController.java b/application/src/main/java/org/thingsboard/server/controller/TenantController.java index ca87e08c96..450c994a38 100644 --- a/application/src/main/java/org/thingsboard/server/controller/TenantController.java +++ b/application/src/main/java/org/thingsboard/server/controller/TenantController.java @@ -77,6 +77,9 @@ public class TenantController extends BaseController { tenant = checkNotNull(tenantService.saveTenant(tenant)); if (newTenant) { installScripts.createDefaultRuleChains(tenant.getId()); + if (edgesEnabled) { + installScripts.createDefaultEdgeRuleChains(tenant.getId()); + } } return tenant; } catch (Exception e) { diff --git a/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java b/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java index 27423259cd..ae5bcd13fa 100644 --- a/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java +++ b/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java @@ -28,7 +28,6 @@ import org.thingsboard.server.common.data.id.RuleChainId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.rule.RuleChain; import org.thingsboard.server.common.data.rule.RuleChainMetaData; -import org.thingsboard.server.common.data.rule.RuleChainType; import org.thingsboard.server.common.data.widget.WidgetType; import org.thingsboard.server.common.data.widget.WidgetsBundle; import org.thingsboard.server.dao.dashboard.DashboardService; @@ -36,7 +35,6 @@ import org.thingsboard.server.dao.rule.RuleChainService; import org.thingsboard.server.dao.widget.WidgetTypeService; import org.thingsboard.server.dao.widget.WidgetsBundleService; -import java.io.File; import java.io.IOException; import java.nio.file.DirectoryStream; import java.nio.file.Files; @@ -64,6 +62,8 @@ public class InstallScripts { public static final String WIDGET_BUNDLES_DIR = "widget_bundles"; public static final String DASHBOARDS_DIR = "dashboards"; + public static final String EDGE_MANAGEMENT = "edge_management"; + public static final String JSON_EXT = ".json"; @Value("${install.data_dir:}") @@ -81,10 +81,14 @@ public class InstallScripts { @Autowired private WidgetsBundleService widgetsBundleService; - public Path getTenantRuleChainsDir() { + private Path getTenantRuleChainsDir() { return Paths.get(getDataDir(), JSON_DIR, TENANT_DIR, RULE_CHAINS_DIR); } + private Path getEdgeRuleChainsDir() { + return Paths.get(getDataDir(), JSON_DIR, TENANT_DIR, EDGE_MANAGEMENT, RULE_CHAINS_DIR); + } + public String getDataDir() { if (!StringUtils.isEmpty(dataDir)) { if (!Paths.get(this.dataDir).toFile().isDirectory()) { @@ -108,18 +112,22 @@ public class InstallScripts { public void createDefaultRuleChains(TenantId tenantId) throws IOException { Path tenantChainsDir = getTenantRuleChainsDir(); - try (DirectoryStream dirStream = Files.newDirectoryStream(tenantChainsDir, path -> path.toString().endsWith(InstallScripts.JSON_EXT))) { + loadRuleChainsFromPath(tenantId, tenantChainsDir); + } + + public void createDefaultEdgeRuleChains(TenantId tenantId) throws IOException { + Path edgeChainsDir = getEdgeRuleChainsDir(); + loadRuleChainsFromPath(tenantId, edgeChainsDir); + } + + private void loadRuleChainsFromPath(TenantId tenantId, Path ruleChainsPath) throws IOException { + try (DirectoryStream dirStream = Files.newDirectoryStream(ruleChainsPath, path -> path.toString().endsWith(InstallScripts.JSON_EXT))) { dirStream.forEach( path -> loadRuleChainFromFile(tenantId, path) ); } } - public void createDefaultEdgeRuleChains(TenantId tenantId) { - Path tenantChainsDir = getTenantRuleChainsDir(); - loadRuleChainFromFile(tenantId, tenantChainsDir.resolve("edge_root_rule_chain.json")); - } - public void loadSystemWidgets() throws Exception { Path widgetBundlesDir = Paths.get(getDataDir(), JSON_DIR, SYSTEM_DIR, WIDGET_BUNDLES_DIR); try (DirectoryStream dirStream = Files.newDirectoryStream(widgetBundlesDir, path -> path.toString().endsWith(JSON_EXT))) { @@ -174,7 +182,6 @@ public class InstallScripts { } } - public void loadDemoRuleChains(TenantId tenantId) throws Exception { Path ruleChainsDir = Paths.get(getDataDir(), JSON_DIR, DEMO_DIR, RULE_CHAINS_DIR); try { @@ -196,8 +203,17 @@ public class InstallScripts { rootChain = ruleChainService.saveRuleChain(rootChain); rootChainMetaData.setRuleChainId(rootChain.getId()); ruleChainService.saveRuleChainMetaData(new TenantId(EntityId.NULL_UUID), rootChainMetaData); + } catch (Exception e) { + log.error("Unable to load dashboard from json", e); + throw new RuntimeException("Unable to load dashboard from json", e); + } + loadEdgeDemoRuleChains(tenantId); + } - loadRuleChainFromFile(tenantId, ruleChainsDir.resolve("edge_root_rule_chain.json")); + private void loadEdgeDemoRuleChains(TenantId tenantId) throws Exception { + Path edgeRuleChainsDir = Paths.get(getDataDir(), JSON_DIR, DEMO_DIR, EDGE_MANAGEMENT, RULE_CHAINS_DIR); + try { + loadRuleChainFromFile(tenantId, edgeRuleChainsDir.resolve("edge_root_rule_chain.json")); } catch (Exception e) { log.error("Unable to load dashboard from json", e); throw new RuntimeException("Unable to load dashboard from json", e); diff --git a/application/src/main/java/org/thingsboard/server/service/install/PsqlTsDatabaseUpgradeService.java b/application/src/main/java/org/thingsboard/server/service/install/PsqlTsDatabaseUpgradeService.java index 0bfa28e03a..8d954cb460 100644 --- a/application/src/main/java/org/thingsboard/server/service/install/PsqlTsDatabaseUpgradeService.java +++ b/application/src/main/java/org/thingsboard/server/service/install/PsqlTsDatabaseUpgradeService.java @@ -203,7 +203,7 @@ public class PsqlTsDatabaseUpgradeService extends AbstractSqlTsDatabaseUpgradeSe break; case "2.5.5": try (Connection conn = DriverManager.getConnection(dbUrl, dbUserName, dbPassword)) { - log.info("Load TTL functions ..."); + log.info("Load Edge TTL functions ..."); loadSql(conn, "2.6.0", LOAD_TTL_FUNCTIONS_SQL); } break; diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java index cc832c0826..3e1e418bc2 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java @@ -91,7 +91,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC EntityRelation.CONTAINS_TYPE, RelationTypeGroup.RULE_CHAIN)); } catch (Exception e) { log.warn("[{}] Failed to create tenant to root rule chain relation. from: [{}], to: [{}]", - savedRuleChain.getTenantId(), savedRuleChain.getId()); + savedRuleChain.getTenantId(), savedRuleChain.getTenantId(), savedRuleChain.getId(), e); throw new RuntimeException(e); } }