Browse Source

apply output strategy to entity aggregation cf

pull/14225/head
IrynaMatveieva 7 months ago
parent
commit
f45b03a1b4
  1. 1
      application/src/main/java/org/thingsboard/server/service/cf/ctx/state/aggregation/single/EntityAggregationCalculatedFieldState.java
  2. 5
      application/src/test/java/org/thingsboard/server/cf/EntityAggregationCalculatedFieldTest.java
  3. 8
      common/data/src/test/java/org/thingsboard/server/common/data/cf/configuration/aggregation/single/EntityAggregationCalculatedFieldConfigurationTest.java
  4. 6
      ui-ngx/src/app/modules/home/components/calculated-fields/components/entity-aggregation-configuration/entity-aggregation-component.component.ts

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

@ -105,6 +105,7 @@ public class EntityAggregationCalculatedFieldState extends BaseCalculatedFieldSt
return Futures.immediateFuture(TelemetryCalculatedFieldResult.EMPTY); return Futures.immediateFuture(TelemetryCalculatedFieldResult.EMPTY);
} }
return Futures.immediateFuture(TelemetryCalculatedFieldResult.builder() return Futures.immediateFuture(TelemetryCalculatedFieldResult.builder()
.outputStrategy(output.getStrategy())
.type(output.getType()) .type(output.getType())
.scope(output.getScope()) .scope(output.getScope())
.result(result) .result(result)

5
application/src/test/java/org/thingsboard/server/cf/EntityAggregationCalculatedFieldTest.java

@ -29,8 +29,8 @@ import org.thingsboard.server.common.data.cf.CalculatedFieldType;
import org.thingsboard.server.common.data.cf.configuration.Argument; import org.thingsboard.server.common.data.cf.configuration.Argument;
import org.thingsboard.server.common.data.cf.configuration.ArgumentType; import org.thingsboard.server.common.data.cf.configuration.ArgumentType;
import org.thingsboard.server.common.data.cf.configuration.Output; import org.thingsboard.server.common.data.cf.configuration.Output;
import org.thingsboard.server.common.data.cf.configuration.OutputType;
import org.thingsboard.server.common.data.cf.configuration.ReferencedEntityKey; import org.thingsboard.server.common.data.cf.configuration.ReferencedEntityKey;
import org.thingsboard.server.common.data.cf.configuration.TimeSeriesOutput;
import org.thingsboard.server.common.data.cf.configuration.aggregation.AggFunction; import org.thingsboard.server.common.data.cf.configuration.aggregation.AggFunction;
import org.thingsboard.server.common.data.cf.configuration.aggregation.AggKeyInput; import org.thingsboard.server.common.data.cf.configuration.aggregation.AggKeyInput;
import org.thingsboard.server.common.data.cf.configuration.aggregation.AggMetric; import org.thingsboard.server.common.data.cf.configuration.aggregation.AggMetric;
@ -209,8 +209,7 @@ public class EntityAggregationCalculatedFieldTest extends AbstractControllerTest
consumption.setDefaultValue(9999L); consumption.setDefaultValue(9999L);
aggMetrics.put("consumption", consumption); aggMetrics.put("consumption", consumption);
Output output = new Output(); TimeSeriesOutput output = new TimeSeriesOutput();
output.setType(OutputType.TIME_SERIES);
output.setDecimalsByDefault(0); output.setDecimalsByDefault(0);
return createAggCf("Consumption per minute", entityId, return createAggCf("Consumption per minute", entityId,

8
common/data/src/test/java/org/thingsboard/server/common/data/cf/configuration/aggregation/single/EntityAggregationCalculatedFieldConfigurationTest.java

@ -21,8 +21,8 @@ import org.junit.jupiter.params.provider.ValueSource;
import org.thingsboard.server.common.data.cf.CalculatedFieldType; import org.thingsboard.server.common.data.cf.CalculatedFieldType;
import org.thingsboard.server.common.data.cf.configuration.Argument; import org.thingsboard.server.common.data.cf.configuration.Argument;
import org.thingsboard.server.common.data.cf.configuration.ArgumentType; import org.thingsboard.server.common.data.cf.configuration.ArgumentType;
import org.thingsboard.server.common.data.cf.configuration.Output;
import org.thingsboard.server.common.data.cf.configuration.ReferencedEntityKey; import org.thingsboard.server.common.data.cf.configuration.ReferencedEntityKey;
import org.thingsboard.server.common.data.cf.configuration.TimeSeriesOutput;
import org.thingsboard.server.common.data.cf.configuration.aggregation.AggFunctionInput; import org.thingsboard.server.common.data.cf.configuration.aggregation.AggFunctionInput;
import org.thingsboard.server.common.data.cf.configuration.aggregation.AggKeyInput; import org.thingsboard.server.common.data.cf.configuration.aggregation.AggKeyInput;
import org.thingsboard.server.common.data.cf.configuration.aggregation.AggMetric; import org.thingsboard.server.common.data.cf.configuration.aggregation.AggMetric;
@ -74,7 +74,7 @@ public class EntityAggregationCalculatedFieldConfigurationTest {
cfg.setMetrics(Map.of("m", metric)); cfg.setMetrics(Map.of("m", metric));
cfg.setInterval(new HourInterval("Europe/Kiev", null)); cfg.setInterval(new HourInterval("Europe/Kiev", null));
cfg.setOutput(new Output()); cfg.setOutput(new TimeSeriesOutput());
assertThatThrownBy(cfg::validate) assertThatThrownBy(cfg::validate)
.isInstanceOf(IllegalArgumentException.class) .isInstanceOf(IllegalArgumentException.class)
@ -92,7 +92,7 @@ public class EntityAggregationCalculatedFieldConfigurationTest {
cfg.setMetrics(Map.of("m", metric)); cfg.setMetrics(Map.of("m", metric));
cfg.setInterval(new HourInterval("Europe/Kiev", null)); cfg.setInterval(new HourInterval("Europe/Kiev", null));
cfg.setOutput(new Output()); cfg.setOutput(new TimeSeriesOutput());
assertThatThrownBy(cfg::validate) assertThatThrownBy(cfg::validate)
.isInstanceOf(IllegalArgumentException.class) .isInstanceOf(IllegalArgumentException.class)
@ -106,7 +106,7 @@ public class EntityAggregationCalculatedFieldConfigurationTest {
cfg.setArguments(Map.of("k", validArgument(ArgumentType.TS_LATEST))); cfg.setArguments(Map.of("k", validArgument(ArgumentType.TS_LATEST)));
cfg.setMetrics(Map.of("m", validMetric())); cfg.setMetrics(Map.of("m", validMetric()));
cfg.setInterval(null); cfg.setInterval(null);
cfg.setOutput(new Output()); cfg.setOutput(new TimeSeriesOutput());
assertThatThrownBy(cfg::validate) assertThatThrownBy(cfg::validate)
.isInstanceOf(IllegalArgumentException.class) .isInstanceOf(IllegalArgumentException.class)

6
ui-ngx/src/app/modules/home/components/calculated-fields/components/entity-aggregation-configuration/entity-aggregation-component.component.ts

@ -32,8 +32,8 @@ import {
CalculatedFieldEntityAggregationConfiguration, CalculatedFieldEntityAggregationConfiguration,
CalculatedFieldOutput, CalculatedFieldOutput,
CalculatedFieldType, CalculatedFieldType,
defaultCalculatedFieldOutput,
notEmptyObjectValidator, notEmptyObjectValidator,
OutputType
} from '@shared/models/calculated-field.models'; } from '@shared/models/calculated-field.models';
import { filter, map } from 'rxjs/operators'; import { filter, map } from 'rxjs/operators';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
@ -102,9 +102,7 @@ export class EntityAggregationComponentComponent implements ControlValueAccessor
watermark: this.fb.group({ watermark: this.fb.group({
duration: [HOUR/SECOND, Validators.required], duration: [HOUR/SECOND, Validators.required],
}), }),
output: this.fb.control<CalculatedFieldOutput>({ output: this.fb.control<CalculatedFieldOutput>(defaultCalculatedFieldOutput),
type: OutputType.Timeseries,
}),
}); });
arguments$ = this.entityAggregationConfiguration.get('arguments').valueChanges.pipe( arguments$ = this.entityAggregationConfiguration.get('arguments').valueChanges.pipe(

Loading…
Cancel
Save