Browse Source

minor fixes

pull/14253/head
IrynaMatveieva 11 months ago
parent
commit
cb278ad93f
  1. 1
      application/src/main/java/org/thingsboard/server/service/cf/ctx/state/aggregation/single/EntityAggregationArgumentEntry.java
  2. 11
      application/src/main/java/org/thingsboard/server/service/cf/ctx/state/aggregation/single/EntityAggregationCalculatedFieldState.java
  3. 16
      application/src/main/java/org/thingsboard/server/utils/CalculatedFieldArgumentUtils.java
  4. 2
      common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/aggregation/AggMetric.java

1
application/src/main/java/org/thingsboard/server/service/cf/ctx/state/aggregation/single/EntityAggregationArgumentEntry.java

@ -53,7 +53,6 @@ public class EntityAggregationArgumentEntry implements ArgumentEntry {
for (Map.Entry<AggIntervalEntry, AggIntervalEntryStatus> aggIntervalEntry : aggIntervals.entrySet()) { for (Map.Entry<AggIntervalEntry, AggIntervalEntryStatus> aggIntervalEntry : aggIntervals.entrySet()) {
if (aggIntervalEntry.getKey().belongsToInterval(entryTs)) { if (aggIntervalEntry.getKey().belongsToInterval(entryTs)) {
aggIntervalEntry.getValue().setLastArgsRefreshTs(System.currentTimeMillis()); aggIntervalEntry.getValue().setLastArgsRefreshTs(System.currentTimeMillis());
aggIntervals.put(aggIntervalEntry.getKey(), aggIntervalEntry.getValue());
return true; return true;
} }
} }

11
application/src/main/java/org/thingsboard/server/service/cf/ctx/state/aggregation/single/EntityAggregationCalculatedFieldState.java

@ -27,6 +27,7 @@ import org.thingsboard.server.common.data.cf.configuration.aggregation.AggKeyInp
import org.thingsboard.server.common.data.cf.configuration.aggregation.AggMetric; import org.thingsboard.server.common.data.cf.configuration.aggregation.AggMetric;
import org.thingsboard.server.common.data.cf.configuration.aggregation.single.EntityAggregationCalculatedFieldConfiguration; import org.thingsboard.server.common.data.cf.configuration.aggregation.single.EntityAggregationCalculatedFieldConfiguration;
import org.thingsboard.server.common.data.cf.configuration.aggregation.single.interval.AggInterval; import org.thingsboard.server.common.data.cf.configuration.aggregation.single.interval.AggInterval;
import org.thingsboard.server.common.data.cf.configuration.aggregation.single.interval.Watermark;
import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.service.cf.CalculatedFieldProcessingService; import org.thingsboard.server.service.cf.CalculatedFieldProcessingService;
import org.thingsboard.server.service.cf.CalculatedFieldResult; import org.thingsboard.server.service.cf.CalculatedFieldResult;
@ -40,8 +41,9 @@ import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.TimeUnit;
import static org.thingsboard.server.utils.CalculatedFieldArgumentUtils.createDefaultKvEntry; import static org.thingsboard.server.utils.CalculatedFieldArgumentUtils.createDefaultMetricArgumentEntry;
public class EntityAggregationCalculatedFieldState extends BaseCalculatedFieldState { public class EntityAggregationCalculatedFieldState extends BaseCalculatedFieldState {
@ -104,8 +106,9 @@ public class EntityAggregationCalculatedFieldState extends BaseCalculatedFieldSt
this.cfProcessingService = ctx.getCfProcessingService(); this.cfProcessingService = ctx.getCfProcessingService();
var configuration = (EntityAggregationCalculatedFieldConfiguration) ctx.getCalculatedField().getConfiguration(); var configuration = (EntityAggregationCalculatedFieldConfiguration) ctx.getCalculatedField().getConfiguration();
intervalDuration = configuration.getInterval().getIntervalDurationMillis(); intervalDuration = configuration.getInterval().getIntervalDurationMillis();
watermarkDuration = configuration.getWatermark().getDuration(); Watermark watermark = configuration.getWatermark();
checkInterval = configuration.getWatermark().getCheckInterval(); watermarkDuration = watermark == null ? 0 : TimeUnit.SECONDS.toMillis(watermark.getDuration());
checkInterval = watermark == null ? 0 : TimeUnit.SECONDS.toMillis(watermark.getCheckInterval());
interval = configuration.getInterval(); interval = configuration.getInterval();
metrics = configuration.getMetrics(); metrics = configuration.getMetrics();
} }
@ -221,7 +224,7 @@ public class EntityAggregationCalculatedFieldState extends BaseCalculatedFieldSt
AggMetric metric = metrics.get(metricName); AggMetric metric = metrics.get(metricName);
String argKey = ctx.getArguments().get(argName).getRefEntityKey().getKey(); String argKey = ctx.getArguments().get(argName).getRefEntityKey().getKey();
ArgumentEntry metricEntry = useDefault ArgumentEntry metricEntry = useDefault
? ArgumentEntry.createSingleValueArgument(createDefaultKvEntry(argKey, metric.getDefaultValue())) ? createDefaultMetricArgumentEntry(argKey, metric)
: cfProcessingService.fetchMetricDuringInterval(ctx.getTenantId(), entityId, argKey, metric, intervalEntry); : cfProcessingService.fetchMetricDuringInterval(ctx.getTenantId(), entityId, argKey, metric, intervalEntry);
if (!metricEntry.isEmpty()) { if (!metricEntry.isEmpty()) {
results.computeIfAbsent(intervalEntry, i -> new HashMap<>()).put(metricName, metricEntry); results.computeIfAbsent(intervalEntry, i -> new HashMap<>()).put(metricName, metricEntry);

16
application/src/main/java/org/thingsboard/server/utils/CalculatedFieldArgumentUtils.java

@ -70,11 +70,19 @@ public class CalculatedFieldArgumentUtils {
public static ArgumentEntry transformAggMetricArgument(List<TsKvEntry> timeSeries, String argKey, AggMetric aggMetric) { public static ArgumentEntry transformAggMetricArgument(List<TsKvEntry> timeSeries, String argKey, AggMetric aggMetric) {
if (timeSeries == null || timeSeries.isEmpty()) { if (timeSeries == null || timeSeries.isEmpty()) {
return ArgumentEntry.createSingleValueArgument(createDefaultKvEntry(argKey, aggMetric.getDefaultValue())); return createDefaultMetricArgumentEntry(argKey, aggMetric);
} }
return ArgumentEntry.createSingleValueArgument(timeSeries.get(0)); return ArgumentEntry.createSingleValueArgument(timeSeries.get(0));
} }
public static ArgumentEntry createDefaultMetricArgumentEntry(String argKey, AggMetric metric) {
Long defaultValue = metric.getDefaultValue();
if (defaultValue != null) {
ArgumentEntry.createSingleValueArgument(new DoubleDataEntry(argKey, defaultValue.doubleValue()));
}
return ArgumentEntry.createSingleValueArgument(new StringDataEntry(argKey, null));
}
public static ArgumentEntry transformAggregationArgument(List<TsKvEntry> timeSeries, long startIntervalTs, long endIntervalTs) { public static ArgumentEntry transformAggregationArgument(List<TsKvEntry> timeSeries, long startIntervalTs, long endIntervalTs) {
Map<AggIntervalEntry, AggIntervalEntryStatus> aggIntervals = new HashMap<>(); Map<AggIntervalEntry, AggIntervalEntryStatus> aggIntervals = new HashMap<>();
AggIntervalEntry aggIntervalEntry = new AggIntervalEntry(startIntervalTs, endIntervalTs); AggIntervalEntry aggIntervalEntry = new AggIntervalEntry(startIntervalTs, endIntervalTs);
@ -87,10 +95,8 @@ public class CalculatedFieldArgumentUtils {
} }
public static KvEntry createDefaultKvEntry(Argument argument) { public static KvEntry createDefaultKvEntry(Argument argument) {
return createDefaultKvEntry(argument.getRefEntityKey().getKey(), argument.getDefaultValue()); String key = argument.getRefEntityKey().getKey();
} String defaultValue = argument.getDefaultValue();
public static KvEntry createDefaultKvEntry(String key, String defaultValue) {
if (StringUtils.isBlank(defaultValue)) { if (StringUtils.isBlank(defaultValue)) {
return new StringDataEntry(key, null); return new StringDataEntry(key, null);
} }

2
common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/aggregation/AggMetric.java

@ -27,6 +27,6 @@ public class AggMetric {
private AggFunction function; private AggFunction function;
private String filter; private String filter;
private AggInput input; private AggInput input;
private String defaultValue; private Long defaultValue;
} }

Loading…
Cancel
Save