removed check for timeseries keys existence
This commit is contained in:
parent
61254a6850
commit
a5ce56fe4c
@ -88,12 +88,6 @@ class AlarmRuleState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean validateAttrUpdate(Set<AlarmConditionFilterKey> changedKeys) {
|
public boolean validateAttrUpdate(Set<AlarmConditionFilterKey> changedKeys) {
|
||||||
//If the attribute was updated, but no new telemetry arrived - we ignore this until new telemetry is there.
|
|
||||||
for (AlarmConditionFilterKey key : entityKeys) {
|
|
||||||
if (key.getType().equals(AlarmConditionKeyType.TIME_SERIES)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (AlarmConditionFilterKey key : changedKeys) {
|
for (AlarmConditionFilterKey key : changedKeys) {
|
||||||
if (entityKeys.contains(key)) {
|
if (entityKeys.contains(key)) {
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -58,6 +58,8 @@ import org.thingsboard.server.common.data.id.DeviceId;
|
|||||||
import org.thingsboard.server.common.data.id.DeviceProfileId;
|
import org.thingsboard.server.common.data.id.DeviceProfileId;
|
||||||
import org.thingsboard.server.common.data.id.TenantId;
|
import org.thingsboard.server.common.data.id.TenantId;
|
||||||
import org.thingsboard.server.common.data.kv.AttributeKvEntry;
|
import org.thingsboard.server.common.data.kv.AttributeKvEntry;
|
||||||
|
import org.thingsboard.server.common.data.kv.TsKvEntry;
|
||||||
|
import org.thingsboard.server.common.data.kv.TsKvEntryAggWrapper;
|
||||||
import org.thingsboard.server.common.data.msg.TbMsgType;
|
import org.thingsboard.server.common.data.msg.TbMsgType;
|
||||||
import org.thingsboard.server.common.data.query.BooleanFilterPredicate;
|
import org.thingsboard.server.common.data.query.BooleanFilterPredicate;
|
||||||
import org.thingsboard.server.common.data.query.DynamicValue;
|
import org.thingsboard.server.common.data.query.DynamicValue;
|
||||||
@ -65,6 +67,7 @@ import org.thingsboard.server.common.data.query.DynamicValueSourceType;
|
|||||||
import org.thingsboard.server.common.data.query.EntityKeyValueType;
|
import org.thingsboard.server.common.data.query.EntityKeyValueType;
|
||||||
import org.thingsboard.server.common.data.query.FilterPredicateValue;
|
import org.thingsboard.server.common.data.query.FilterPredicateValue;
|
||||||
import org.thingsboard.server.common.data.query.NumericFilterPredicate;
|
import org.thingsboard.server.common.data.query.NumericFilterPredicate;
|
||||||
|
import org.thingsboard.server.common.data.query.NumericFilterPredicate.NumericOperation;
|
||||||
import org.thingsboard.server.common.msg.TbMsg;
|
import org.thingsboard.server.common.msg.TbMsg;
|
||||||
import org.thingsboard.server.common.msg.TbMsgDataType;
|
import org.thingsboard.server.common.msg.TbMsgDataType;
|
||||||
import org.thingsboard.server.common.msg.TbMsgMetaData;
|
import org.thingsboard.server.common.msg.TbMsgMetaData;
|
||||||
@ -72,6 +75,7 @@ import org.thingsboard.server.dao.attributes.AttributesService;
|
|||||||
import org.thingsboard.server.dao.device.DeviceService;
|
import org.thingsboard.server.dao.device.DeviceService;
|
||||||
import org.thingsboard.server.dao.model.sql.AttributeKvCompositeKey;
|
import org.thingsboard.server.dao.model.sql.AttributeKvCompositeKey;
|
||||||
import org.thingsboard.server.dao.model.sql.AttributeKvEntity;
|
import org.thingsboard.server.dao.model.sql.AttributeKvEntity;
|
||||||
|
import org.thingsboard.server.dao.model.sqlts.ts.TsKvEntity;
|
||||||
import org.thingsboard.server.dao.timeseries.TimeseriesService;
|
import org.thingsboard.server.dao.timeseries.TimeseriesService;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
@ -81,15 +85,22 @@ import java.util.Arrays;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
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 java.util.stream.Stream;
|
||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyLong;
|
||||||
|
import static org.mockito.ArgumentMatchers.anySet;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
import static org.thingsboard.server.common.data.device.profile.AlarmConditionKeyType.ATTRIBUTE;
|
||||||
|
import static org.thingsboard.server.common.data.device.profile.AlarmConditionKeyType.TIME_SERIES;
|
||||||
|
import static org.thingsboard.server.common.data.query.NumericFilterPredicate.NumericOperation.GREATER;
|
||||||
|
import static org.thingsboard.server.common.data.query.NumericFilterPredicate.NumericOperation.LESS;
|
||||||
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
@ExtendWith(MockitoExtension.class)
|
||||||
public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
||||||
@ -170,32 +181,16 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
|||||||
DeviceProfile deviceProfile = new DeviceProfile();
|
DeviceProfile deviceProfile = new DeviceProfile();
|
||||||
DeviceProfileData deviceProfileData = new DeviceProfileData();
|
DeviceProfileData deviceProfileData = new DeviceProfileData();
|
||||||
|
|
||||||
AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
|
AlarmCondition alarmCreateCondition = getNumericAlarmCondition(TIME_SERIES, "temperature", GREATER, 30.0);
|
||||||
highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
|
|
||||||
highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
|
||||||
NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
|
|
||||||
highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
|
|
||||||
highTemperaturePredicate.setValue(new FilterPredicateValue<>(30.0));
|
|
||||||
highTempFilter.setPredicate(highTemperaturePredicate);
|
|
||||||
AlarmCondition alarmCondition = new AlarmCondition();
|
|
||||||
alarmCondition.setCondition(Collections.singletonList(highTempFilter));
|
|
||||||
AlarmRule alarmRule = new AlarmRule();
|
AlarmRule alarmRule = new AlarmRule();
|
||||||
alarmRule.setCondition(alarmCondition);
|
alarmRule.setCondition(alarmCreateCondition);
|
||||||
DeviceProfileAlarm dpa = new DeviceProfileAlarm();
|
DeviceProfileAlarm dpa = new DeviceProfileAlarm();
|
||||||
dpa.setId("highTemperatureAlarmID");
|
dpa.setId("highTemperatureAlarmID");
|
||||||
dpa.setAlarmType("highTemperatureAlarm");
|
dpa.setAlarmType("highTemperatureAlarm");
|
||||||
dpa.setCreateRules(new TreeMap<>(Collections.singletonMap(AlarmSeverity.CRITICAL, alarmRule)));
|
dpa.setCreateRules(new TreeMap<>(Collections.singletonMap(AlarmSeverity.CRITICAL, alarmRule)));
|
||||||
|
|
||||||
AlarmConditionFilter lowTempFilter = new AlarmConditionFilter();
|
|
||||||
lowTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
|
|
||||||
lowTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
|
||||||
NumericFilterPredicate lowTemperaturePredicate = new NumericFilterPredicate();
|
|
||||||
lowTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.LESS);
|
|
||||||
lowTemperaturePredicate.setValue(new FilterPredicateValue<>(10.0));
|
|
||||||
lowTempFilter.setPredicate(lowTemperaturePredicate);
|
|
||||||
AlarmRule clearRule = new AlarmRule();
|
AlarmRule clearRule = new AlarmRule();
|
||||||
AlarmCondition clearCondition = new AlarmCondition();
|
AlarmCondition clearCondition = getNumericAlarmCondition(TIME_SERIES, "temperature", LESS, 10.0);
|
||||||
clearCondition.setCondition(Collections.singletonList(lowTempFilter));
|
|
||||||
clearRule.setCondition(clearCondition);
|
clearRule.setCondition(clearCondition);
|
||||||
dpa.setClearRule(clearRule);
|
dpa.setClearRule(clearRule);
|
||||||
|
|
||||||
@ -261,25 +256,11 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
|||||||
DeviceProfile deviceProfile = new DeviceProfile();
|
DeviceProfile deviceProfile = new DeviceProfile();
|
||||||
DeviceProfileData deviceProfileData = new DeviceProfileData();
|
DeviceProfileData deviceProfileData = new DeviceProfileData();
|
||||||
|
|
||||||
AlarmConditionFilter tempFilter = new AlarmConditionFilter();
|
AlarmCondition alarmTempCondition = getNumericAlarmCondition(TIME_SERIES, "temperature", GREATER, 30.0);
|
||||||
tempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
|
|
||||||
tempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
|
||||||
NumericFilterPredicate temperaturePredicate = new NumericFilterPredicate();
|
|
||||||
temperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
|
|
||||||
temperaturePredicate.setValue(new FilterPredicateValue<>(30.0));
|
|
||||||
tempFilter.setPredicate(temperaturePredicate);
|
|
||||||
AlarmCondition alarmTempCondition = new AlarmCondition();
|
|
||||||
alarmTempCondition.setCondition(Collections.singletonList(tempFilter));
|
|
||||||
AlarmRule alarmTempRule = new AlarmRule();
|
AlarmRule alarmTempRule = new AlarmRule();
|
||||||
alarmTempRule.setCondition(alarmTempCondition);
|
alarmTempRule.setCondition(alarmTempCondition);
|
||||||
|
|
||||||
AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
|
AlarmConditionFilter highTempFilter = getAlarmConditionFilter(TIME_SERIES, "temperature", GREATER, 50.0);
|
||||||
highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
|
|
||||||
highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
|
||||||
NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
|
|
||||||
highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
|
|
||||||
highTemperaturePredicate.setValue(new FilterPredicateValue<>(50.0));
|
|
||||||
highTempFilter.setPredicate(highTemperaturePredicate);
|
|
||||||
AlarmCondition alarmHighTempCondition = new AlarmCondition();
|
AlarmCondition alarmHighTempCondition = new AlarmCondition();
|
||||||
alarmHighTempCondition.setCondition(Collections.singletonList(highTempFilter));
|
alarmHighTempCondition.setCondition(Collections.singletonList(highTempFilter));
|
||||||
AlarmRule alarmHighTempRule = new AlarmRule();
|
AlarmRule alarmHighTempRule = new AlarmRule();
|
||||||
@ -401,10 +382,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
|||||||
alarmEnabledFilter.setPredicate(alarmEnabledPredicate);
|
alarmEnabledFilter.setPredicate(alarmEnabledPredicate);
|
||||||
|
|
||||||
AlarmConditionFilter temperatureFilter = new AlarmConditionFilter();
|
AlarmConditionFilter temperatureFilter = new AlarmConditionFilter();
|
||||||
temperatureFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
|
temperatureFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
|
||||||
temperatureFilter.setValueType(EntityKeyValueType.NUMERIC);
|
temperatureFilter.setValueType(EntityKeyValueType.NUMERIC);
|
||||||
NumericFilterPredicate temperaturePredicate = new NumericFilterPredicate();
|
NumericFilterPredicate temperaturePredicate = new NumericFilterPredicate();
|
||||||
temperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
|
temperaturePredicate.setOperation(GREATER);
|
||||||
temperaturePredicate.setValue(new FilterPredicateValue<>(20.0, null, null));
|
temperaturePredicate.setValue(new FilterPredicateValue<>(20.0, null, null));
|
||||||
temperatureFilter.setPredicate(temperaturePredicate);
|
temperatureFilter.setPredicate(temperaturePredicate);
|
||||||
|
|
||||||
@ -494,10 +475,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
|||||||
alarmEnabledFilter.setPredicate(alarmEnabledPredicate);
|
alarmEnabledFilter.setPredicate(alarmEnabledPredicate);
|
||||||
|
|
||||||
AlarmConditionFilter temperatureFilter = new AlarmConditionFilter();
|
AlarmConditionFilter temperatureFilter = new AlarmConditionFilter();
|
||||||
temperatureFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
|
temperatureFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
|
||||||
temperatureFilter.setValueType(EntityKeyValueType.NUMERIC);
|
temperatureFilter.setValueType(EntityKeyValueType.NUMERIC);
|
||||||
NumericFilterPredicate temperaturePredicate = new NumericFilterPredicate();
|
NumericFilterPredicate temperaturePredicate = new NumericFilterPredicate();
|
||||||
temperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
|
temperaturePredicate.setOperation(GREATER);
|
||||||
temperaturePredicate.setValue(new FilterPredicateValue<>(20.0, null, null));
|
temperaturePredicate.setValue(new FilterPredicateValue<>(20.0, null, null));
|
||||||
temperatureFilter.setPredicate(temperaturePredicate);
|
temperatureFilter.setPredicate(temperaturePredicate);
|
||||||
|
|
||||||
@ -576,10 +557,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
|||||||
Futures.immediateFuture(Collections.singletonList(entry));
|
Futures.immediateFuture(Collections.singletonList(entry));
|
||||||
|
|
||||||
AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
|
AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
|
||||||
highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
|
highTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
|
||||||
highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
||||||
NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
|
NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
|
||||||
highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
|
highTemperaturePredicate.setOperation(GREATER);
|
||||||
highTemperaturePredicate.setValue(new FilterPredicateValue<>(
|
highTemperaturePredicate.setValue(new FilterPredicateValue<>(
|
||||||
0.0,
|
0.0,
|
||||||
null,
|
null,
|
||||||
@ -670,10 +651,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
|||||||
Futures.immediateFuture(Arrays.asList(entry, alarmDelayAttributeKvEntry));
|
Futures.immediateFuture(Arrays.asList(entry, alarmDelayAttributeKvEntry));
|
||||||
|
|
||||||
AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
|
AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
|
||||||
highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
|
highTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
|
||||||
highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
||||||
NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
|
NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
|
||||||
highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
|
highTemperaturePredicate.setOperation(GREATER);
|
||||||
highTemperaturePredicate.setValue(new FilterPredicateValue<>(
|
highTemperaturePredicate.setValue(new FilterPredicateValue<>(
|
||||||
0.0,
|
0.0,
|
||||||
null,
|
null,
|
||||||
@ -805,10 +786,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
|||||||
Futures.immediateFuture(Optional.empty());
|
Futures.immediateFuture(Optional.empty());
|
||||||
|
|
||||||
AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
|
AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
|
||||||
highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
|
highTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
|
||||||
highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
||||||
NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
|
NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
|
||||||
highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
|
highTemperaturePredicate.setOperation(GREATER);
|
||||||
highTemperaturePredicate.setValue(new FilterPredicateValue<>(
|
highTemperaturePredicate.setValue(new FilterPredicateValue<>(
|
||||||
0.0,
|
0.0,
|
||||||
null,
|
null,
|
||||||
@ -937,10 +918,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
|||||||
Futures.immediateFuture(Arrays.asList(entry, alarmDelayAttributeKvEntry));
|
Futures.immediateFuture(Arrays.asList(entry, alarmDelayAttributeKvEntry));
|
||||||
|
|
||||||
AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
|
AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
|
||||||
highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
|
highTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
|
||||||
highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
||||||
NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
|
NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
|
||||||
highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
|
highTemperaturePredicate.setOperation(GREATER);
|
||||||
highTemperaturePredicate.setValue(new FilterPredicateValue<>(
|
highTemperaturePredicate.setValue(new FilterPredicateValue<>(
|
||||||
0.0,
|
0.0,
|
||||||
null,
|
null,
|
||||||
@ -1065,10 +1046,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
|||||||
Futures.immediateFuture(Optional.empty());
|
Futures.immediateFuture(Optional.empty());
|
||||||
|
|
||||||
AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
|
AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
|
||||||
highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
|
highTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
|
||||||
highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
||||||
NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
|
NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
|
||||||
highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
|
highTemperaturePredicate.setOperation(GREATER);
|
||||||
highTemperaturePredicate.setValue(new FilterPredicateValue<>(
|
highTemperaturePredicate.setValue(new FilterPredicateValue<>(
|
||||||
0.0,
|
0.0,
|
||||||
null,
|
null,
|
||||||
@ -1182,10 +1163,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
|||||||
Futures.immediateFuture(Collections.singletonList(entry));
|
Futures.immediateFuture(Collections.singletonList(entry));
|
||||||
|
|
||||||
AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
|
AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
|
||||||
highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
|
highTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
|
||||||
highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
||||||
NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
|
NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
|
||||||
highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
|
highTemperaturePredicate.setOperation(GREATER);
|
||||||
highTemperaturePredicate.setValue(new FilterPredicateValue<>(
|
highTemperaturePredicate.setValue(new FilterPredicateValue<>(
|
||||||
0.0,
|
0.0,
|
||||||
null,
|
null,
|
||||||
@ -1299,10 +1280,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
|||||||
Futures.immediateFuture(Collections.singletonList(entry));
|
Futures.immediateFuture(Collections.singletonList(entry));
|
||||||
|
|
||||||
AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
|
AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
|
||||||
highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
|
highTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
|
||||||
highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
||||||
NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
|
NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
|
||||||
highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
|
highTemperaturePredicate.setOperation(GREATER);
|
||||||
highTemperaturePredicate.setValue(new FilterPredicateValue<>(
|
highTemperaturePredicate.setValue(new FilterPredicateValue<>(
|
||||||
0.0,
|
0.0,
|
||||||
null,
|
null,
|
||||||
@ -1395,10 +1376,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
|||||||
Futures.immediateFuture(Collections.singletonList(entryActiveSchedule));
|
Futures.immediateFuture(Collections.singletonList(entryActiveSchedule));
|
||||||
|
|
||||||
AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
|
AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
|
||||||
highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
|
highTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
|
||||||
highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
||||||
NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
|
NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
|
||||||
highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
|
highTemperaturePredicate.setOperation(GREATER);
|
||||||
highTemperaturePredicate.setValue(new FilterPredicateValue<>(
|
highTemperaturePredicate.setValue(new FilterPredicateValue<>(
|
||||||
0.0,
|
0.0,
|
||||||
null,
|
null,
|
||||||
@ -1492,10 +1473,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
|||||||
Futures.immediateFuture(Collections.singletonList(entryInactiveSchedule));
|
Futures.immediateFuture(Collections.singletonList(entryInactiveSchedule));
|
||||||
|
|
||||||
AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
|
AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
|
||||||
highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
|
highTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
|
||||||
highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
||||||
NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
|
NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
|
||||||
highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
|
highTemperaturePredicate.setOperation(GREATER);
|
||||||
highTemperaturePredicate.setValue(new FilterPredicateValue<>(
|
highTemperaturePredicate.setValue(new FilterPredicateValue<>(
|
||||||
0.0,
|
0.0,
|
||||||
null,
|
null,
|
||||||
@ -1593,10 +1574,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
|||||||
Futures.immediateFuture(Optional.of(entry));
|
Futures.immediateFuture(Optional.of(entry));
|
||||||
|
|
||||||
AlarmConditionFilter lowTempFilter = new AlarmConditionFilter();
|
AlarmConditionFilter lowTempFilter = new AlarmConditionFilter();
|
||||||
lowTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
|
lowTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
|
||||||
lowTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
lowTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
||||||
NumericFilterPredicate lowTempPredicate = new NumericFilterPredicate();
|
NumericFilterPredicate lowTempPredicate = new NumericFilterPredicate();
|
||||||
lowTempPredicate.setOperation(NumericFilterPredicate.NumericOperation.LESS);
|
lowTempPredicate.setOperation(LESS);
|
||||||
lowTempPredicate.setValue(
|
lowTempPredicate.setValue(
|
||||||
new FilterPredicateValue<>(
|
new FilterPredicateValue<>(
|
||||||
20.0,
|
20.0,
|
||||||
@ -1679,10 +1660,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
|||||||
Futures.immediateFuture(Optional.of(entry));
|
Futures.immediateFuture(Optional.of(entry));
|
||||||
|
|
||||||
AlarmConditionFilter lowTempFilter = new AlarmConditionFilter();
|
AlarmConditionFilter lowTempFilter = new AlarmConditionFilter();
|
||||||
lowTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
|
lowTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
|
||||||
lowTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
lowTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
||||||
NumericFilterPredicate lowTempPredicate = new NumericFilterPredicate();
|
NumericFilterPredicate lowTempPredicate = new NumericFilterPredicate();
|
||||||
lowTempPredicate.setOperation(NumericFilterPredicate.NumericOperation.LESS);
|
lowTempPredicate.setOperation(LESS);
|
||||||
lowTempPredicate.setValue(
|
lowTempPredicate.setValue(
|
||||||
new FilterPredicateValue<>(
|
new FilterPredicateValue<>(
|
||||||
32.0,
|
32.0,
|
||||||
@ -1769,10 +1750,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
|||||||
Futures.immediateFuture(Optional.of(entry));
|
Futures.immediateFuture(Optional.of(entry));
|
||||||
|
|
||||||
AlarmConditionFilter lowTempFilter = new AlarmConditionFilter();
|
AlarmConditionFilter lowTempFilter = new AlarmConditionFilter();
|
||||||
lowTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
|
lowTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
|
||||||
lowTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
lowTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
||||||
NumericFilterPredicate lowTempPredicate = new NumericFilterPredicate();
|
NumericFilterPredicate lowTempPredicate = new NumericFilterPredicate();
|
||||||
lowTempPredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
|
lowTempPredicate.setOperation(GREATER);
|
||||||
lowTempPredicate.setValue(
|
lowTempPredicate.setValue(
|
||||||
new FilterPredicateValue<>(
|
new FilterPredicateValue<>(
|
||||||
0.0,
|
0.0,
|
||||||
@ -1865,10 +1846,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
|||||||
Futures.immediateFuture(Optional.of(entry));
|
Futures.immediateFuture(Optional.of(entry));
|
||||||
|
|
||||||
AlarmConditionFilter lowTempFilter = new AlarmConditionFilter();
|
AlarmConditionFilter lowTempFilter = new AlarmConditionFilter();
|
||||||
lowTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
|
lowTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
|
||||||
lowTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
lowTempFilter.setValueType(EntityKeyValueType.NUMERIC);
|
||||||
NumericFilterPredicate lowTempPredicate = new NumericFilterPredicate();
|
NumericFilterPredicate lowTempPredicate = new NumericFilterPredicate();
|
||||||
lowTempPredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
|
lowTempPredicate.setOperation(GREATER);
|
||||||
lowTempPredicate.setValue(
|
lowTempPredicate.setValue(
|
||||||
new FilterPredicateValue<>(
|
new FilterPredicateValue<>(
|
||||||
0.0,
|
0.0,
|
||||||
@ -1942,6 +1923,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void registerCreateAlarmMock(AlarmApiCallResult a, boolean created) {
|
private void registerCreateAlarmMock(AlarmApiCallResult a, boolean created) {
|
||||||
|
registerCreateAlarmMock(a, created, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void registerCreateAlarmMock(AlarmApiCallResult a, boolean created, boolean cleared) {
|
||||||
when(a).thenAnswer(invocationOnMock -> {
|
when(a).thenAnswer(invocationOnMock -> {
|
||||||
AlarmInfo alarm = new AlarmInfo(new Alarm(new AlarmId(UUID.randomUUID())));
|
AlarmInfo alarm = new AlarmInfo(new Alarm(new AlarmId(UUID.randomUUID())));
|
||||||
AlarmModificationRequest request = invocationOnMock.getArgument(0);
|
AlarmModificationRequest request = invocationOnMock.getArgument(0);
|
||||||
@ -1950,6 +1935,7 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
|||||||
.successful(true)
|
.successful(true)
|
||||||
.created(created)
|
.created(created)
|
||||||
.modified(true)
|
.modified(true)
|
||||||
|
.cleared(cleared)
|
||||||
.alarm(alarm)
|
.alarm(alarm)
|
||||||
.build();
|
.build();
|
||||||
});
|
});
|
||||||
@ -1981,6 +1967,100 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAlarmCreateWithAttrAndTsCondition() throws Exception {
|
||||||
|
init();
|
||||||
|
|
||||||
|
DeviceProfile deviceProfile = new DeviceProfile();
|
||||||
|
DeviceProfileData deviceProfileData = new DeviceProfileData();
|
||||||
|
|
||||||
|
AlarmConditionFilter filter = getAlarmConditionFilter(TIME_SERIES, "temperature", GREATER, 30.0);
|
||||||
|
AlarmConditionFilter filter2 = getAlarmConditionFilter(ATTRIBUTE, "battery", LESS, 10.0);
|
||||||
|
AlarmCondition alarmCondition = new AlarmCondition();
|
||||||
|
alarmCondition.setCondition(List.of(filter, filter2));
|
||||||
|
AlarmRule createRule = new AlarmRule();
|
||||||
|
createRule.setCondition(alarmCondition);
|
||||||
|
|
||||||
|
AlarmConditionFilter filter3 = getAlarmConditionFilter(TIME_SERIES, "temperature", LESS, 10.0);
|
||||||
|
AlarmConditionFilter filter4 = getAlarmConditionFilter(ATTRIBUTE, "battery", GREATER, 50.0);
|
||||||
|
AlarmCondition clearCondition = new AlarmCondition();
|
||||||
|
clearCondition.setCondition(List.of(filter3, filter4));
|
||||||
|
AlarmRule clearRule = new AlarmRule();
|
||||||
|
clearRule.setCondition(clearCondition);
|
||||||
|
|
||||||
|
DeviceProfileAlarm dpa = new DeviceProfileAlarm();
|
||||||
|
dpa.setId("highTemperatureAlarmID");
|
||||||
|
dpa.setAlarmType("highTemperatureAlarm");
|
||||||
|
dpa.setCreateRules(new TreeMap<>(Collections.singletonMap(AlarmSeverity.CRITICAL, createRule)));
|
||||||
|
dpa.setClearRule(clearRule);
|
||||||
|
|
||||||
|
deviceProfileData.setAlarms(Collections.singletonList(dpa));
|
||||||
|
deviceProfile.setProfileData(deviceProfileData);
|
||||||
|
|
||||||
|
ListenableFuture<List<TsKvEntry>> tsKvList =
|
||||||
|
Futures.immediateFuture(Collections.singletonList(getTsKvEntry("temperature", 35L)));
|
||||||
|
ListenableFuture<List<AttributeKvEntry>> attrList =
|
||||||
|
Futures.immediateFuture(Collections.emptyList());
|
||||||
|
|
||||||
|
Mockito.when(cache.get(tenantId, deviceId)).thenReturn(deviceProfile);
|
||||||
|
Mockito.when(timeseriesService.findLatest(tenantId, deviceId, Collections.singleton("temperature")))
|
||||||
|
.thenReturn(tsKvList);
|
||||||
|
Mockito.when(attributesService.find(eq(tenantId), eq(deviceId), any(), anySet()))
|
||||||
|
.thenReturn(attrList);
|
||||||
|
Mockito.when(alarmService.findLatestActiveByOriginatorAndType(tenantId, deviceId, "highTemperatureAlarm")).thenReturn(null);
|
||||||
|
registerCreateAlarmMock(alarmService.createAlarm(any()), true);
|
||||||
|
|
||||||
|
TbMsg theMsg = TbMsg.newMsg()
|
||||||
|
.type(TbMsgType.ALARM)
|
||||||
|
.originator(deviceId)
|
||||||
|
.copyMetaData(TbMsgMetaData.EMPTY)
|
||||||
|
.data(TbMsg.EMPTY_STRING)
|
||||||
|
.build();
|
||||||
|
when(ctx.newMsg(any(), any(TbMsgType.class), any(), any(), any(), Mockito.anyString())).thenReturn(theMsg);
|
||||||
|
|
||||||
|
// send attribute
|
||||||
|
ObjectNode data = JacksonUtil.newObjectNode();
|
||||||
|
data.put("battery", 8);
|
||||||
|
TbMsg msg = TbMsg.newMsg()
|
||||||
|
.type(TbMsgType.POST_ATTRIBUTES_REQUEST)
|
||||||
|
.originator(deviceId)
|
||||||
|
.copyMetaData(TbMsgMetaData.EMPTY)
|
||||||
|
.dataType(TbMsgDataType.JSON)
|
||||||
|
.data(JacksonUtil.toString(data))
|
||||||
|
.build();
|
||||||
|
node.onMsg(ctx, msg);
|
||||||
|
verify(ctx).tellSuccess(msg);
|
||||||
|
verify(ctx).enqueueForTellNext(theMsg, "Alarm Created");
|
||||||
|
verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any());
|
||||||
|
}
|
||||||
|
|
||||||
|
private TsKvEntry getTsKvEntry(String key, Long value) {
|
||||||
|
TsKvEntity tsKv = new TsKvEntity();
|
||||||
|
tsKv.setKey(10);
|
||||||
|
tsKv.setLongValue(value);
|
||||||
|
tsKv.setStrKey(key);
|
||||||
|
tsKv.setTs(System.currentTimeMillis());
|
||||||
|
return tsKv.toData();
|
||||||
|
}
|
||||||
|
|
||||||
|
private AlarmCondition getNumericAlarmCondition(AlarmConditionKeyType alarmConditionKeyType, String key, NumericOperation operation, Double value) {
|
||||||
|
AlarmConditionFilter filter = getAlarmConditionFilter(alarmConditionKeyType, key, operation, value);
|
||||||
|
AlarmCondition alarmCondition = new AlarmCondition();
|
||||||
|
alarmCondition.setCondition(Collections.singletonList(filter));
|
||||||
|
return alarmCondition;
|
||||||
|
}
|
||||||
|
|
||||||
|
private AlarmConditionFilter getAlarmConditionFilter(AlarmConditionKeyType alarmConditionKeyType, String key, NumericOperation operation, Double value) {
|
||||||
|
AlarmConditionFilter filter = new AlarmConditionFilter();
|
||||||
|
filter.setKey(new AlarmConditionFilterKey(alarmConditionKeyType, key));
|
||||||
|
filter.setValueType(EntityKeyValueType.NUMERIC);
|
||||||
|
NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
|
||||||
|
highTemperaturePredicate.setOperation(operation);
|
||||||
|
highTemperaturePredicate.setValue(new FilterPredicateValue<>(value));
|
||||||
|
filter.setPredicate(highTemperaturePredicate);
|
||||||
|
return filter;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected TbNode getTestNode() {
|
protected TbNode getTestNode() {
|
||||||
return node;
|
return node;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user