Merge pull request #11194 from irynamatveieva/improvements/device-profile-node
Device profile node: improvements
This commit is contained in:
commit
a687e28324
@ -36,6 +36,7 @@ import org.thingsboard.server.common.data.page.PageData;
|
|||||||
import org.thingsboard.server.common.data.page.PageLink;
|
import org.thingsboard.server.common.data.page.PageLink;
|
||||||
import org.thingsboard.server.common.data.plugin.ComponentType;
|
import org.thingsboard.server.common.data.plugin.ComponentType;
|
||||||
import org.thingsboard.server.common.data.rule.RuleNodeState;
|
import org.thingsboard.server.common.data.rule.RuleNodeState;
|
||||||
|
import org.thingsboard.server.common.data.util.TbPair;
|
||||||
import org.thingsboard.server.common.msg.TbMsg;
|
import org.thingsboard.server.common.msg.TbMsg;
|
||||||
import org.thingsboard.server.common.msg.TbMsgMetaData;
|
import org.thingsboard.server.common.msg.TbMsgMetaData;
|
||||||
import org.thingsboard.server.common.msg.queue.PartitionChangeMsg;
|
import org.thingsboard.server.common.msg.queue.PartitionChangeMsg;
|
||||||
@ -52,6 +53,7 @@ import java.util.concurrent.TimeUnit;
|
|||||||
name = "device profile",
|
name = "device profile",
|
||||||
customRelations = true,
|
customRelations = true,
|
||||||
relationTypes = {"Alarm Created", "Alarm Updated", "Alarm Severity Updated", "Alarm Cleared", "Success", "Failure"},
|
relationTypes = {"Alarm Created", "Alarm Updated", "Alarm Severity Updated", "Alarm Cleared", "Success", "Failure"},
|
||||||
|
version = 1,
|
||||||
configClazz = TbDeviceProfileNodeConfiguration.class,
|
configClazz = TbDeviceProfileNodeConfiguration.class,
|
||||||
nodeDescription = "Process device messages based on device profile settings",
|
nodeDescription = "Process device messages based on device profile settings",
|
||||||
nodeDetails = "Create and clear alarms based on alarm rules defined in device profile. The output relation type is either " +
|
nodeDetails = "Create and clear alarms based on alarm rules defined in device profile. The output relation type is either " +
|
||||||
@ -241,4 +243,25 @@ public class TbDeviceProfileNode implements TbNode {
|
|||||||
ctx.removeRuleNodeStateForEntity(deviceId);
|
ctx.removeRuleNodeStateForEntity(deviceId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TbPair<Boolean, JsonNode> upgrade(int fromVersion, JsonNode oldConfiguration) throws TbNodeException {
|
||||||
|
boolean hasChanges = false;
|
||||||
|
switch (fromVersion) {
|
||||||
|
case 0:
|
||||||
|
String persistAlarmRulesState = "persistAlarmRulesState";
|
||||||
|
String fetchAlarmRulesStateOnStart = "fetchAlarmRulesStateOnStart";
|
||||||
|
if (oldConfiguration.has(persistAlarmRulesState)) {
|
||||||
|
if (!oldConfiguration.get(persistAlarmRulesState).asBoolean()) {
|
||||||
|
hasChanges = true;
|
||||||
|
((ObjectNode) oldConfiguration).put(fetchAlarmRulesStateOnStart, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return new TbPair<>(hasChanges, oldConfiguration);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,13 +20,17 @@ import com.google.common.util.concurrent.Futures;
|
|||||||
import com.google.common.util.concurrent.ListenableFuture;
|
import com.google.common.util.concurrent.ListenableFuture;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
import org.junit.jupiter.params.provider.Arguments;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.Mockito;
|
import org.mockito.Mockito;
|
||||||
|
import org.mockito.Spy;
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
import org.thingsboard.common.util.JacksonUtil;
|
import org.thingsboard.common.util.JacksonUtil;
|
||||||
|
import org.thingsboard.rule.engine.AbstractRuleNodeUpgradeTest;
|
||||||
import org.thingsboard.rule.engine.api.RuleEngineAlarmService;
|
import org.thingsboard.rule.engine.api.RuleEngineAlarmService;
|
||||||
import org.thingsboard.rule.engine.api.RuleEngineDeviceProfileCache;
|
import org.thingsboard.rule.engine.api.RuleEngineDeviceProfileCache;
|
||||||
import org.thingsboard.rule.engine.api.TbContext;
|
import org.thingsboard.rule.engine.api.TbContext;
|
||||||
|
import org.thingsboard.rule.engine.api.TbNode;
|
||||||
import org.thingsboard.rule.engine.api.TbNodeConfiguration;
|
import org.thingsboard.rule.engine.api.TbNodeConfiguration;
|
||||||
import org.thingsboard.rule.engine.api.TbNodeException;
|
import org.thingsboard.rule.engine.api.TbNodeException;
|
||||||
import org.thingsboard.server.common.data.AttributeScope;
|
import org.thingsboard.server.common.data.AttributeScope;
|
||||||
@ -80,6 +84,7 @@ import java.util.Optional;
|
|||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
@ -87,8 +92,9 @@ import static org.mockito.Mockito.verify;
|
|||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
@ExtendWith(MockitoExtension.class)
|
||||||
public class TbDeviceProfileNodeTest {
|
public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
||||||
|
|
||||||
|
@Spy
|
||||||
private TbDeviceProfileNode node;
|
private TbDeviceProfileNode node;
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
@ -1723,4 +1729,35 @@ public class TbDeviceProfileNodeTest {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Stream<Arguments> givenFromVersionAndConfig_whenUpgrade_thenVerifyHasChangesAndConfig() {
|
||||||
|
return Stream.of(
|
||||||
|
// default config for version 1 with upgrade from version 0
|
||||||
|
Arguments.of(0,
|
||||||
|
"{\"persistAlarmRulesState\":false,\"fetchAlarmRulesStateOnStart\":false}",
|
||||||
|
true,
|
||||||
|
"{\"persistAlarmRulesState\":false,\"fetchAlarmRulesStateOnStart\":false}"),
|
||||||
|
// config for version 1 with upgrade from version 0 (persistAlarmRulesState and fetchAlarmRulesStateOnStart - true)
|
||||||
|
Arguments.of(0,
|
||||||
|
"{\"persistAlarmRulesState\":true,\"fetchAlarmRulesStateOnStart\":true}",
|
||||||
|
false,
|
||||||
|
"{\"persistAlarmRulesState\":true,\"fetchAlarmRulesStateOnStart\":true}"),
|
||||||
|
// config for version 1 with upgrade from version 0 (persistAlarmRulesState - true, fetchAlarmRulesStateOnStart - false)
|
||||||
|
Arguments.of(0,
|
||||||
|
"{\"persistAlarmRulesState\":true,\"fetchAlarmRulesStateOnStart\":false}",
|
||||||
|
false,
|
||||||
|
"{\"persistAlarmRulesState\":true,\"fetchAlarmRulesStateOnStart\":false}"),
|
||||||
|
// config for version 1 with upgrade from version 0 (persistAlarmRulesState - false, fetchAlarmRulesStateOnStart - true)
|
||||||
|
Arguments.of(0,
|
||||||
|
"{\"persistAlarmRulesState\":false,\"fetchAlarmRulesStateOnStart\":true}",
|
||||||
|
true,
|
||||||
|
"{\"persistAlarmRulesState\":false,\"fetchAlarmRulesStateOnStart\":false}")
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected TbNode getTestNode() {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user