Browse Source

Updated logic due to comments

pull/14208/head
dshvaika 11 months ago
parent
commit
a244d7088f
  1. 2
      application/src/main/java/org/thingsboard/server/actors/calculatedField/CalculatedFieldEntityMessageProcessor.java
  2. 6
      application/src/main/java/org/thingsboard/server/service/cf/ctx/state/BaseCalculatedFieldState.java
  3. 26
      application/src/main/java/org/thingsboard/server/service/cf/ctx/state/CalculatedFieldState.java
  4. 6
      application/src/test/java/org/thingsboard/server/service/cf/ctx/state/GeofencingCalculatedFieldStateTest.java
  5. 6
      application/src/test/java/org/thingsboard/server/service/cf/ctx/state/PropagationCalculatedFieldStateTest.java
  6. 6
      application/src/test/java/org/thingsboard/server/service/cf/ctx/state/ScriptCalculatedFieldStateTest.java
  7. 6
      application/src/test/java/org/thingsboard/server/service/cf/ctx/state/SimpleCalculatedFieldStateTest.java

2
application/src/main/java/org/thingsboard/server/actors/calculatedField/CalculatedFieldEntityMessageProcessor.java

@ -482,7 +482,7 @@ public class CalculatedFieldEntityMessageProcessor extends AbstractContextAwareM
}
} else {
if (DebugModeUtil.isDebugFailuresAvailable(ctx.getCalculatedField())) {
String errorMsg = ctx.isInitialized() ? state.getReadinessStatus().stringValue() : "Calculated field state is not initialized!";
String errorMsg = ctx.isInitialized() ? state.getReadinessStatus().errorMsg() : "Calculated field state is not initialized!";
systemContext.persistCalculatedFieldDebugEvent(tenantId, ctx.getCfId(), entityId, state.getArguments(), tbMsgId, tbMsgType, null, errorMsg);
}
callback.onSuccess();

6
application/src/main/java/org/thingsboard/server/service/cf/ctx/state/BaseCalculatedFieldState.java

@ -117,7 +117,7 @@ public abstract class BaseCalculatedFieldState implements CalculatedFieldState,
@Override
public boolean isReady() {
return readinessStatus.isReady();
return readinessStatus.ready();
}
@Override
@ -162,7 +162,7 @@ public abstract class BaseCalculatedFieldState implements CalculatedFieldState,
protected ReadinessStatus checkReadiness(List<String> requiredArguments, Map<String, ArgumentEntry> currentArguments) {
if (currentArguments == null) {
return new ReadinessStatus(requiredArguments);
return ReadinessStatus.from(requiredArguments);
}
List<String> emptyArguments = null;
for (String requiredArgumentKey : requiredArguments) {
@ -174,7 +174,7 @@ public abstract class BaseCalculatedFieldState implements CalculatedFieldState,
emptyArguments.add(requiredArgumentKey);
}
}
return new ReadinessStatus(emptyArguments);
return ReadinessStatus.from(emptyArguments);
}
}

26
application/src/main/java/org/thingsboard/server/service/cf/ctx/state/CalculatedFieldState.java

@ -16,17 +16,14 @@
package org.thingsboard.server.service.cf.ctx.state;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.google.common.util.concurrent.ListenableFuture;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.server.actors.TbActorRef;
import org.thingsboard.server.common.data.cf.CalculatedFieldType;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.util.CollectionsUtil;
import org.thingsboard.server.common.msg.queue.TopicPartitionInfo;
import org.thingsboard.server.service.cf.CalculatedFieldResult;
import org.thingsboard.server.service.cf.ctx.CalculatedFieldEntityCtxId;
@ -101,22 +98,17 @@ public interface CalculatedFieldState extends Closeable {
}
}
@Data
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
class ReadinessStatus {
record ReadinessStatus(boolean ready, String errorMsg) {
private List<String> emptyArguments;
private static final String ERROR_MESSAGE = "Required arguments are missing: ";
private static final ReadinessStatus READY = new ReadinessStatus(true, null);
public boolean isReady() {
return emptyArguments == null || emptyArguments.isEmpty();
}
public String stringValue() {
return JacksonUtil.toString(this);
public static ReadinessStatus from(List<String> emptyOrMissingArguments) {
if (CollectionsUtil.isEmpty(emptyOrMissingArguments)) {
return ReadinessStatus.READY;
}
return new ReadinessStatus(false, ERROR_MESSAGE + String.join(", ", emptyOrMissingArguments));
}
}
}

6
application/src/test/java/org/thingsboard/server/service/cf/ctx/state/GeofencingCalculatedFieldStateTest.java

@ -200,7 +200,7 @@ public class GeofencingCalculatedFieldStateTest {
@Test
void testIsReadyWhenNotAllArgPresent() {
assertThat(state.isReady()).isFalse();
assertThat(state.getReadinessStatus().getEmptyArguments()).containsExactlyInAnyOrderElementsOf(state.getRequiredArguments());
assertThat(state.getReadinessStatus().errorMsg()).contains(state.getRequiredArguments());
}
@Test
@ -212,7 +212,7 @@ public class GeofencingCalculatedFieldStateTest {
"restrictedZones", geofencingRestrictedZoneArgEntry
), ctx);
assertThat(state.isReady()).isTrue();
assertThat(state.getReadinessStatus().getEmptyArguments()).isNull();
assertThat(state.getReadinessStatus().errorMsg()).isNull();
}
@Test
@ -224,7 +224,7 @@ public class GeofencingCalculatedFieldStateTest {
"restrictedZones", new GeofencingArgumentEntry()
), ctx);
assertThat(state.isReady()).isFalse();
assertThat(state.getReadinessStatus().getEmptyArguments()).contains("restrictedZones");
assertThat(state.getReadinessStatus().errorMsg()).contains("restrictedZones");
}
@Test

6
application/src/test/java/org/thingsboard/server/service/cf/ctx/state/PropagationCalculatedFieldStateTest.java

@ -131,7 +131,7 @@ public class PropagationCalculatedFieldStateTest {
initCtxAndState(false);
state.update(Map.of(TEMPERATURE_ARGUMENT_NAME, singleValueArgEntry), ctx);
assertThat(state.isReady()).isFalse();
assertThat(state.getReadinessStatus().getEmptyArguments()).containsExactly(PROPAGATION_CONFIG_ARGUMENT);
assertThat(state.getReadinessStatus().errorMsg()).contains(PROPAGATION_CONFIG_ARGUMENT);
}
@Test
@ -140,7 +140,7 @@ public class PropagationCalculatedFieldStateTest {
state.update(Map.of(TEMPERATURE_ARGUMENT_NAME, singleValueArgEntry,
PROPAGATION_CONFIG_ARGUMENT, new PropagationArgumentEntry(Collections.emptyList())), ctx);
assertThat(state.isReady()).isFalse();
assertThat(state.getReadinessStatus().getEmptyArguments()).containsExactly(PROPAGATION_CONFIG_ARGUMENT);
assertThat(state.getReadinessStatus().errorMsg()).contains(PROPAGATION_CONFIG_ARGUMENT);
}
@Test
@ -148,7 +148,7 @@ public class PropagationCalculatedFieldStateTest {
initCtxAndState(false);
state.update(Map.of(TEMPERATURE_ARGUMENT_NAME, singleValueArgEntry, PROPAGATION_CONFIG_ARGUMENT, propagationArgEntry), ctx);
assertThat(state.isReady()).isTrue();
assertThat(state.getReadinessStatus().getEmptyArguments()).isNull();
assertThat(state.getReadinessStatus().errorMsg()).isNull();
}

6
application/src/test/java/org/thingsboard/server/service/cf/ctx/state/ScriptCalculatedFieldStateTest.java

@ -161,21 +161,21 @@ public class ScriptCalculatedFieldStateTest {
@Test
void testIsReadyWhenNotAllArgPresent() {
assertThat(state.isReady()).isFalse();
assertThat(state.getReadinessStatus().getEmptyArguments()).containsExactlyInAnyOrderElementsOf(state.getRequiredArguments());
assertThat(state.getReadinessStatus().errorMsg()).contains(state.getRequiredArguments());
}
@Test
void testIsReadyWhenAllArgPresent() {
state.update(Map.of("deviceTemperature", deviceTemperatureArgEntry, "assetHumidity", assetHumidityArgEntry), ctx);
assertThat(state.isReady()).isTrue();
assertThat(state.getReadinessStatus().getEmptyArguments()).isNull();
assertThat(state.getReadinessStatus().errorMsg()).isNull();
}
@Test
void testIsReadyWhenEmptyEntryPresents() {
state.update(Map.of("deviceTemperature", new TsRollingArgumentEntry(5, 30000L), "assetHumidity", assetHumidityArgEntry), ctx);
assertThat(state.isReady()).isFalse();
assertThat(state.getReadinessStatus().getEmptyArguments()).containsExactly("deviceTemperature");
assertThat(state.getReadinessStatus().errorMsg()).contains("deviceTemperature");
}
private TsRollingArgumentEntry createRollingArgEntry() {

6
application/src/test/java/org/thingsboard/server/service/cf/ctx/state/SimpleCalculatedFieldStateTest.java

@ -204,7 +204,7 @@ public class SimpleCalculatedFieldStateTest {
@Test
void testIsReadyWhenNotAllArgPresent() {
assertThat(state.isReady()).isFalse();
assertThat(state.getReadinessStatus().getEmptyArguments()).containsExactlyInAnyOrderElementsOf(state.getRequiredArguments());
assertThat(state.getReadinessStatus().errorMsg()).contains(state.getRequiredArguments());
}
@Test
@ -215,7 +215,7 @@ public class SimpleCalculatedFieldStateTest {
"key3", key3ArgEntry
), ctx);
assertThat(state.isReady()).isTrue();
assertThat(state.getReadinessStatus().getEmptyArguments()).isNull();
assertThat(state.getReadinessStatus().errorMsg()).isNull();
}
@Test
@ -226,7 +226,7 @@ public class SimpleCalculatedFieldStateTest {
"key3", new SingleValueArgumentEntry()
), ctx);
assertThat(state.isReady()).isFalse();
assertThat(state.getReadinessStatus().getEmptyArguments()).containsExactly("key3");
assertThat(state.getReadinessStatus().errorMsg()).contains("key3");
}
private CalculatedField getCalculatedField() {

Loading…
Cancel
Save