Browse Source

Refactor: refactor upgrade script

pull/8661/head
Dmytro Skarzhynets 3 years ago
parent
commit
e00a29761e
  1. 147
      application/src/main/java/org/thingsboard/server/service/install/update/DefaultDataUpdateService.java

147
application/src/main/java/org/thingsboard/server/service/install/update/DefaultDataUpdateService.java

@ -29,15 +29,6 @@ import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.rule.engine.flow.TbRuleChainInputNode;
import org.thingsboard.rule.engine.flow.TbRuleChainInputNodeConfiguration;
import org.thingsboard.rule.engine.metadata.FetchTo;
import org.thingsboard.rule.engine.metadata.TbFetchDeviceCredentialsNode;
import org.thingsboard.rule.engine.metadata.TbGetAttributesNode;
import org.thingsboard.rule.engine.metadata.TbGetCustomerAttributeNode;
import org.thingsboard.rule.engine.metadata.TbGetCustomerDetailsNode;
import org.thingsboard.rule.engine.metadata.TbGetOriginatorFieldsNode;
import org.thingsboard.rule.engine.metadata.TbGetRelatedAttributeNode;
import org.thingsboard.rule.engine.metadata.TbGetDeviceAttrNode;
import org.thingsboard.rule.engine.metadata.TbGetTenantAttributeNode;
import org.thingsboard.rule.engine.metadata.TbGetTenantDetailsNode;
import org.thingsboard.rule.engine.profile.TbDeviceProfileNode;
import org.thingsboard.rule.engine.profile.TbDeviceProfileNodeConfiguration;
import org.thingsboard.server.common.data.DataConstants;
@ -228,20 +219,18 @@ public class DefaultDataUpdateService implements DataUpdateService {
private void updateEnrichmentRuleNodes() {
try {
var fetchToDataNodes = List.of(TbGetAttributesNode.class.getName(), TbGetDeviceAttrNode.class.getName());
var addToMetadataNodes = List.of(TbGetCustomerDetailsNode.class.getName(), TbGetTenantDetailsNode.class.getName());
var fetchToMetadataNodes = List.of(TbFetchDeviceCredentialsNode.class.getName());
var hardCodeMetadataNodes = List.of(
TbGetOriginatorFieldsNode.class.getName(),
TbGetRelatedAttributeNode.class.getName(),
TbGetTenantAttributeNode.class.getName(),
TbGetCustomerAttributeNode.class.getName()
);
var allNodesToUpdate = new ArrayList<>(hardCodeMetadataNodes);
allNodesToUpdate.addAll(fetchToDataNodes);
allNodesToUpdate.addAll(addToMetadataNodes);
allNodesToUpdate.addAll(fetchToMetadataNodes);
var ruleChainIdToTenantId = new HashMap<RuleChainId, TenantId>();
var allNodesToUpdate = List.of(
"org.thingsboard.rule.engine.metadata.TbGetOriginatorFieldsNode",
"org.thingsboard.rule.engine.metadata.TbGetRelatedAttributeNode",
"org.thingsboard.rule.engine.metadata.TbGetTenantAttributeNode",
"org.thingsboard.rule.engine.metadata.TbGetCustomerAttributeNode",
"org.thingsboard.rule.engine.metadata.TbGetAttributesNode",
"org.thingsboard.rule.engine.metadata.TbGetDeviceAttrNode",
"org.thingsboard.rule.engine.metadata.TbGetCustomerDetailsNode",
"org.thingsboard.rule.engine.metadata.TbGetTenantDetailsNode",
"org.thingsboard.rule.engine.metadata.TbFetchDeviceCredentialsNode"
);
allNodesToUpdate.forEach(ruleNodeType -> {
var ruleNodes = new PageDataIterable<>(
pageLink -> ruleChainService.findAllRuleNodesByType(ruleNodeType, pageLink), 1024
@ -259,74 +248,35 @@ public class DefaultDataUpdateService implements DataUpdateService {
continue;
}
var configObjectNode = (ObjectNode) configuration;
var fetchTo = FetchTo.METADATA;
if (fetchToDataNodes.contains(ruleNodeType)) {
configObjectNode.remove("fetchToMetadata");
configObjectNode.remove("addToMetadata");
if (configObjectNode.has("fetchToData")) {
var fetchToData = configObjectNode.get("fetchToData").asText();
if ("true".equals(fetchToData)) {
fetchTo = FetchTo.DATA;
} else if ("false".equals(fetchToData)) {
fetchTo = FetchTo.METADATA;
} else {
log.error("Failed to updated rule node: [{}] with id: [{}] " +
"Reason: fetchToData property has unexpected value: {} Allowed values: true or false!",
ruleNodeType, ruleNode.getId(), fetchToData);
continue;
}
configObjectNode.remove("fetchToData");
} else {
log.error("Failed to updated rule node: [{}] with id: [{}] " +
"Reason: fetchToData property is not present!", ruleNodeType, ruleNode.getId());
continue;
}
} else if (fetchToMetadataNodes.contains(ruleNodeType)) {
configObjectNode.remove("fetchToData");
configObjectNode.remove("addToMetadata");
if (configObjectNode.has("fetchToMetadata")) {
var fetchToMetadata = configObjectNode.get("fetchToMetadata").asText();
if ("true".equals(fetchToMetadata)) {
fetchTo = FetchTo.METADATA;
} else if ("false".equals(fetchToMetadata)) {
fetchTo = FetchTo.DATA;
} else {
log.error("Failed to updated rule node: [{}] with id: [{}] " +
"Reason: fetchToMetadata property has unexpected value: {} Allowed values: true or false!",
ruleNodeType, ruleNode.getId(), fetchToMetadata);
continue;
}
configObjectNode.remove("fetchToMetadata");
} else {
log.error("Failed to updated rule node: [{}] with id: [{}] " +
"Reason: fetchToMetadata property is not present!", ruleNodeType, ruleNode.getId());
continue;
}
} else if (addToMetadataNodes.contains(ruleNodeType)) {
configObjectNode.remove("fetchToData");
configObjectNode.remove("fetchToMetadata");
if (configObjectNode.has("addToMetadata")) {
var addToMetadata = configObjectNode.get("addToMetadata").asText();
if ("true".equals(addToMetadata)) {
fetchTo = FetchTo.METADATA;
} else if ("false".equals(addToMetadata)) {
fetchTo = FetchTo.DATA;
} else {
log.error("Failed to updated rule node: [{}] with id: [{}] " +
"Reason: addToMetadata property has unexpected value: {} Allowed values: true or false!",
ruleNodeType, ruleNode.getId(), addToMetadata);
continue;
}
configObjectNode.remove("addToMetadata");
} else {
log.error("Failed to updated rule node: [{}] with id: [{}] " +
"Reason: addToMetadata property is not present!", ruleNodeType, ruleNode.getId());
FetchTo fetchTo;
switch (ruleNodeType) {
case "org.thingsboard.rule.engine.metadata.TbGetAttributesNode":
case "org.thingsboard.rule.engine.metadata.TbGetDeviceAttrNode":
fetchTo = checkEnrichmentNodeFetchProperty(configObjectNode, "fetchToData", FetchTo.DATA, FetchTo.METADATA);
break;
case "org.thingsboard.rule.engine.metadata.TbGetCustomerDetailsNode":
case "org.thingsboard.rule.engine.metadata.TbGetTenantDetailsNode":
fetchTo = checkEnrichmentNodeFetchProperty(configObjectNode, "addToMetadata", FetchTo.METADATA, FetchTo.DATA);
break;
case "org.thingsboard.rule.engine.metadata.TbFetchDeviceCredentialsNode":
fetchTo = checkEnrichmentNodeFetchProperty(configObjectNode, "fetchToMetadata", FetchTo.METADATA, FetchTo.DATA);
break;
case "org.thingsboard.rule.engine.metadata.TbGetOriginatorFieldsNode":
case "org.thingsboard.rule.engine.metadata.TbGetRelatedAttributeNode":
case "org.thingsboard.rule.engine.metadata.TbGetTenantAttributeNode":
case "org.thingsboard.rule.engine.metadata.TbGetCustomerAttributeNode":
fetchTo = FetchTo.METADATA;
break;
default:
log.error("Failed to update rule node: [{}] with id: [{}] " +
"Reason: Unexpected rule node type!", ruleNodeType, ruleNode.getId());
continue;
}
} else {
log.error("Failed to updated rule node: [{}] with id: [{}] " +
"Reason: Unexpected rule node type!", ruleNodeType, ruleNode.getId());
}
if (fetchTo == null) {
log.error("Failed to update rule node: [{}] with id: [{}]", ruleNodeType, ruleNode.getId());
continue;
}
@ -352,6 +302,25 @@ public class DefaultDataUpdateService implements DataUpdateService {
}
}
private FetchTo checkEnrichmentNodeFetchProperty(ObjectNode config, String property, FetchTo ifTrue, FetchTo ifFalse) {
if (config.has(property)) {
var value = config.get(property).asText();
if ("true".equals(value)) {
config.remove(property);
return ifTrue;
} else if ("false".equals(value)) {
config.remove(property);
return ifFalse;
} else {
log.error(property + " property has unexpected value: {} Allowed values: true or false!", value);
return null;
}
} else {
log.error(property + " property is not present!");
return null;
}
}
private final PaginatedUpdater<String, DeviceProfileEntity> deviceProfileEntityDynamicConditionsUpdater =
new PaginatedUpdater<>() {

Loading…
Cancel
Save