added NaN value when is not number in rolling

This commit is contained in:
IrynaMatveieva 2025-02-19 08:35:24 +02:00
parent be12e5b985
commit 6cf314eaa0
4 changed files with 12 additions and 6 deletions

View File

@ -86,7 +86,7 @@ public class TsRollingArgumentEntry implements ArgumentEntry {
} }
@Override @Override
public boolean updateEntry(ArgumentEntry entry) throws CalculatedFieldStateException { public boolean updateEntry(ArgumentEntry entry) {
if (entry instanceof TsRollingArgumentEntry tsRollingEntry) { if (entry instanceof TsRollingArgumentEntry tsRollingEntry) {
updateTsRollingEntry(tsRollingEntry); updateTsRollingEntry(tsRollingEntry);
} else if (entry instanceof SingleValueArgumentEntry singleValueEntry) { } else if (entry instanceof SingleValueArgumentEntry singleValueEntry) {
@ -118,8 +118,8 @@ public class TsRollingArgumentEntry implements ArgumentEntry {
} }
cleanupExpiredRecords(); cleanupExpiredRecords();
} catch (Exception e) { } catch (Exception e) {
log.warn("Time series rolling arguments supports only numeric values."); tsRecords.put(ts, Double.NaN);
// throw new IllegalArgumentException("Time series rolling arguments supports only numeric values."); log.warn("Invalid value '{}' for time series rolling arguments. Only numeric values are supported.", value.getValue());
} }
} }

View File

@ -63,6 +63,9 @@ public class TbelCfTsRollingArg implements TbelCfArg, Iterable<TbelCfTsDoubleVal
double max = Double.MIN_VALUE; double max = Double.MIN_VALUE;
for (TbelCfTsDoubleVal value : values) { for (TbelCfTsDoubleVal value : values) {
double val = value.getValue(); double val = value.getValue();
if (Double.isNaN(val)) {
return val;
}
if (max < val) { if (max < val) {
max = val; max = val;
} }

View File

@ -78,13 +78,14 @@ public class CalculatedFieldServiceTest extends AbstractServiceTest {
assertThat(savedCalculatedField.getType()).isEqualTo(calculatedField.getType()); assertThat(savedCalculatedField.getType()).isEqualTo(calculatedField.getType());
assertThat(savedCalculatedField.getName()).isEqualTo(calculatedField.getName()); assertThat(savedCalculatedField.getName()).isEqualTo(calculatedField.getName());
assertThat(savedCalculatedField.getConfiguration()).isEqualTo(calculatedField.getConfiguration()); assertThat(savedCalculatedField.getConfiguration()).isEqualTo(calculatedField.getConfiguration());
assertThat(savedCalculatedField.getVersion()).isEqualTo(calculatedField.getVersion()); assertThat(savedCalculatedField.getVersion()).isEqualTo(1L);
savedCalculatedField.setName("Test CF"); savedCalculatedField.setName("Test CF");
CalculatedField updatedCalculatedField = calculatedFieldService.save(savedCalculatedField); CalculatedField updatedCalculatedField = calculatedFieldService.save(savedCalculatedField);
assertThat(updatedCalculatedField).isEqualTo(savedCalculatedField); assertThat(updatedCalculatedField.getName()).isEqualTo(savedCalculatedField.getName());
assertThat(updatedCalculatedField.getVersion()).isEqualTo(savedCalculatedField.getVersion() + 1);
calculatedFieldService.deleteCalculatedField(tenantId, savedCalculatedField.getId()); calculatedFieldService.deleteCalculatedField(tenantId, savedCalculatedField.getId());
} }
@ -147,7 +148,6 @@ public class CalculatedFieldServiceTest extends AbstractServiceTest {
calculatedField.setName("Test Calculated Field"); calculatedField.setName("Test Calculated Field");
calculatedField.setConfigurationVersion(1); calculatedField.setConfigurationVersion(1);
calculatedField.setConfiguration(getCalculatedFieldConfig(referencedEntityId)); calculatedField.setConfiguration(getCalculatedFieldConfig(referencedEntityId));
calculatedField.setVersion(1L);
return calculatedField; return calculatedField;
} }

View File

@ -25,6 +25,7 @@ import org.thingsboard.server.common.data.id.CalculatedFieldId;
import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.dao.cf.CalculatedFieldDao; import org.thingsboard.server.dao.cf.CalculatedFieldDao;
import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.exception.DataValidationException;
import org.thingsboard.server.dao.usagerecord.ApiLimitService;
import java.util.UUID; import java.util.UUID;
@ -39,6 +40,8 @@ public class CalculatedFieldDataValidatorTest {
@MockBean @MockBean
private CalculatedFieldDao calculatedFieldDao; private CalculatedFieldDao calculatedFieldDao;
@MockBean
private ApiLimitService apiLimitService;
@SpyBean @SpyBean
private CalculatedFieldDataValidator validator; private CalculatedFieldDataValidator validator;