diff --git a/application/src/main/java/org/thingsboard/server/service/cf/AbstractCalculatedFieldProcessingService.java b/application/src/main/java/org/thingsboard/server/service/cf/AbstractCalculatedFieldProcessingService.java index 724aaa1804..6d16e11a17 100644 --- a/application/src/main/java/org/thingsboard/server/service/cf/AbstractCalculatedFieldProcessingService.java +++ b/application/src/main/java/org/thingsboard/server/service/cf/AbstractCalculatedFieldProcessingService.java @@ -361,21 +361,19 @@ public abstract class AbstractCalculatedFieldProcessingService { case TIME_SERIES -> saveTimeSeries(tenantId, entityId, cfResult, cfIds, System.currentTimeMillis(), future); } - if (log.isTraceEnabled()) { - Futures.addCallback(future, new FutureCallback<>() { - @Override - public void onSuccess(Void v) { - callback.onSuccess(); - log.debug("[{}][{}] Saved CF result: {}", tenantId, entityId, cfResult); - } + Futures.addCallback(future, new FutureCallback<>() { + @Override + public void onSuccess(Void v) { + callback.onSuccess(); + log.debug("[{}][{}] Saved CF result: {}", tenantId, entityId, cfResult); + } - @Override - public void onFailure(Throwable t) { - callback.onFailure(t); - log.error("[{}][{}] Failed to save CF result {}", tenantId, entityId, cfResult, t); - } - }, MoreExecutors.directExecutor()); - } + @Override + public void onFailure(Throwable t) { + callback.onFailure(t); + log.error("[{}][{}] Failed to save CF result {}", tenantId, entityId, cfResult, t); + } + }, MoreExecutors.directExecutor()); } private void saveAttributes(TenantId tenantId, EntityId entityId, TelemetryCalculatedFieldResult cfResult, List cfIds, SettableFuture future) { diff --git a/application/src/main/java/org/thingsboard/server/service/cf/DefaultCalculatedFieldProcessingService.java b/application/src/main/java/org/thingsboard/server/service/cf/DefaultCalculatedFieldProcessingService.java index f9f551f44a..b0c2b7bc38 100644 --- a/application/src/main/java/org/thingsboard/server/service/cf/DefaultCalculatedFieldProcessingService.java +++ b/application/src/main/java/org/thingsboard/server/service/cf/DefaultCalculatedFieldProcessingService.java @@ -96,8 +96,10 @@ public class DefaultCalculatedFieldProcessingService extends AbstractCalculatedF @Override public Map fetchDynamicArgsFromDb(CalculatedFieldCtx ctx, EntityId entityId) { return switch (ctx.getCfType()) { - case GEOFENCING -> resolveArgumentFutures(fetchGeofencingCalculatedFieldArguments(ctx, entityId, true, System.currentTimeMillis())); - case PROPAGATION -> resolveArgumentFutures(Map.of(PROPAGATION_CONFIG_ARGUMENT, fetchPropagationCalculatedFieldArgument(ctx, entityId))); + case GEOFENCING -> + resolveArgumentFutures(fetchGeofencingCalculatedFieldArguments(ctx, entityId, true, System.currentTimeMillis())); + case PROPAGATION -> + resolveArgumentFutures(Map.of(PROPAGATION_CONFIG_ARGUMENT, fetchPropagationCalculatedFieldArgument(ctx, entityId))); default -> Collections.emptyMap(); }; } @@ -137,9 +139,9 @@ public class DefaultCalculatedFieldProcessingService extends AbstractCalculatedF } TelemetryCalculatedFieldResult telemetryResult = result instanceof TelemetryCalculatedFieldResult telemetryRes ? telemetryRes : ((PropagationCalculatedFieldResult) result).getResult(); - switch (telemetryResult.getOutputStrategy().getStrategyType()) { - case IMMEDIATE -> processImmediately(tenantId, entityId, result, cfIds, callback); - case RULE_CHAIN -> pushMsgToRuleEngine(tenantId, entityId, result, cfIds, callback); + switch (telemetryResult.getOutputStrategy().getType()) { + case IMMEDIATE_ATTRIBUTES, IMMEDIATE_TIME_SERIES -> processImmediately(tenantId, entityId, result, cfIds, callback); + case RULE_CHAIN_ATTRIBUTES, RULE_CHAIN_TIME_SERIES -> pushMsgToRuleEngine(tenantId, entityId, result, cfIds, callback); } } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/AttributeImmediateOutputStrategy.java b/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/AttributeImmediateOutputStrategy.java index 5ca28d0ee4..d4fb961894 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/AttributeImmediateOutputStrategy.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/AttributeImmediateOutputStrategy.java @@ -22,7 +22,7 @@ import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor -public class AttributeImmediateOutputStrategy extends ImmediateOutputStrategy { +public class AttributeImmediateOutputStrategy implements OutputStrategy { private boolean updateAttributesOnlyOnValueChange; @@ -31,7 +31,7 @@ public class AttributeImmediateOutputStrategy extends ImmediateOutputStrategy { private boolean processCfs; @Override - public String getType() { - return "IMMEDIATE_ATTRIBUTES"; + public OutputStrategyType getType() { + return OutputStrategyType.IMMEDIATE_ATTRIBUTES; } } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/AttributeRuleChainOutputStrategy.java b/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/AttributeRuleChainOutputStrategy.java index adefc06964..801b01401f 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/AttributeRuleChainOutputStrategy.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/AttributeRuleChainOutputStrategy.java @@ -20,10 +20,10 @@ import lombok.NoArgsConstructor; @Data @NoArgsConstructor -public class AttributeRuleChainOutputStrategy extends RuleChainOutputStrategy { +public class AttributeRuleChainOutputStrategy implements OutputStrategy { @Override - public String getType() { - return "RULE_CHAIN_ATTRIBUTES"; + public OutputStrategyType getType() { + return OutputStrategyType.RULE_CHAIN_ATTRIBUTES; } } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/ImmediateOutputStrategy.java b/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/ImmediateOutputStrategy.java deleted file mode 100644 index 170fa5bb9c..0000000000 --- a/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/ImmediateOutputStrategy.java +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright © 2016-2025 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.common.data.cf.configuration; - -public abstract class ImmediateOutputStrategy implements OutputStrategy { - - @Override - public OutputStrategyType getStrategyType() { - return OutputStrategyType.IMMEDIATE; - } - -} diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/OutputStrategy.java b/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/OutputStrategy.java index 8f488602fe..21dc330da3 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/OutputStrategy.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/OutputStrategy.java @@ -32,14 +32,10 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo.As; @Type(value = AttributeRuleChainOutputStrategy.class, name = "RULE_CHAIN_ATTRIBUTES"), @Type(value = TimeSeriesRuleChainOutputStrategy.class, name = "RULE_CHAIN_TIME_SERIES") - }) public interface OutputStrategy { @JsonIgnore - OutputStrategyType getStrategyType(); - - @JsonIgnore - String getType(); + OutputStrategyType getType(); } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/OutputStrategyType.java b/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/OutputStrategyType.java index 4f5234acb5..dbabb19cae 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/OutputStrategyType.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/OutputStrategyType.java @@ -17,6 +17,10 @@ package org.thingsboard.server.common.data.cf.configuration; public enum OutputStrategyType { - IMMEDIATE, RULE_CHAIN + IMMEDIATE_ATTRIBUTES, + IMMEDIATE_TIME_SERIES, + + RULE_CHAIN_ATTRIBUTES, + RULE_CHAIN_TIME_SERIES } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/RuleChainOutputStrategy.java b/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/RuleChainOutputStrategy.java deleted file mode 100644 index 0d601d22fc..0000000000 --- a/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/RuleChainOutputStrategy.java +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright © 2016-2025 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.common.data.cf.configuration; - -public abstract class RuleChainOutputStrategy implements OutputStrategy { - - @Override - public OutputStrategyType getStrategyType() { - return OutputStrategyType.RULE_CHAIN; - } - -} diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/TimeSeriesImmediateOutputStrategy.java b/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/TimeSeriesImmediateOutputStrategy.java index 60d5f99515..0f22a81b70 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/TimeSeriesImmediateOutputStrategy.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/TimeSeriesImmediateOutputStrategy.java @@ -22,7 +22,7 @@ import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor -public class TimeSeriesImmediateOutputStrategy extends ImmediateOutputStrategy { +public class TimeSeriesImmediateOutputStrategy implements OutputStrategy { private long ttl; @@ -32,7 +32,7 @@ public class TimeSeriesImmediateOutputStrategy extends ImmediateOutputStrategy { private boolean processCfs; @Override - public String getType() { - return "IMMEDIATE_TIME_SERIES"; + public OutputStrategyType getType() { + return OutputStrategyType.IMMEDIATE_TIME_SERIES; } } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/TimeSeriesRuleChainOutputStrategy.java b/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/TimeSeriesRuleChainOutputStrategy.java index bb50cc5e8b..d5e8caa8a1 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/TimeSeriesRuleChainOutputStrategy.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/cf/configuration/TimeSeriesRuleChainOutputStrategy.java @@ -20,10 +20,10 @@ import lombok.NoArgsConstructor; @Data @NoArgsConstructor -public class TimeSeriesRuleChainOutputStrategy extends RuleChainOutputStrategy { +public class TimeSeriesRuleChainOutputStrategy implements OutputStrategy { @Override - public String getType() { - return "RULE_CHAIN_TIME_SERIES"; + public OutputStrategyType getType() { + return OutputStrategyType.RULE_CHAIN_TIME_SERIES; } }