Browse Source

Reduce CF error noise for on old edges

pull/14828/head
Nikita Mazurenko 9 months ago
parent
commit
562924a586
  1. 23
      application/src/main/java/org/thingsboard/server/service/edge/rpc/processor/cf/CalculatedFieldEdgeProcessor.java

23
application/src/main/java/org/thingsboard/server/service/edge/rpc/processor/cf/CalculatedFieldEdgeProcessor.java

@ -25,6 +25,7 @@ import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.server.common.data.EdgeUtils; import org.thingsboard.server.common.data.EdgeUtils;
import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.cf.CalculatedField; import org.thingsboard.server.common.data.cf.CalculatedField;
import org.thingsboard.server.common.data.cf.CalculatedFieldType;
import org.thingsboard.server.common.data.edge.Edge; import org.thingsboard.server.common.data.edge.Edge;
import org.thingsboard.server.common.data.edge.EdgeEvent; import org.thingsboard.server.common.data.edge.EdgeEvent;
import org.thingsboard.server.common.data.edge.EdgeEventActionType; import org.thingsboard.server.common.data.edge.EdgeEventActionType;
@ -45,13 +46,25 @@ import org.thingsboard.server.gen.transport.TransportProtos;
import org.thingsboard.server.queue.util.TbCoreComponent; import org.thingsboard.server.queue.util.TbCoreComponent;
import org.thingsboard.server.service.edge.EdgeMsgConstructorUtils; import org.thingsboard.server.service.edge.EdgeMsgConstructorUtils;
import java.util.Map;
import java.util.Set;
import java.util.UUID; import java.util.UUID;
import static org.thingsboard.server.common.data.cf.CalculatedFieldType.ALARM;
import static org.thingsboard.server.common.data.cf.CalculatedFieldType.ENTITY_AGGREGATION;
import static org.thingsboard.server.common.data.cf.CalculatedFieldType.GEOFENCING;
import static org.thingsboard.server.common.data.cf.CalculatedFieldType.PROPAGATION;
import static org.thingsboard.server.common.data.cf.CalculatedFieldType.RELATED_ENTITIES_AGGREGATION;
@Slf4j @Slf4j
@Component @Component
@TbCoreComponent @TbCoreComponent
public class CalculatedFieldEdgeProcessor extends BaseCalculatedFieldProcessor implements CalculatedFieldProcessor { public class CalculatedFieldEdgeProcessor extends BaseCalculatedFieldProcessor implements CalculatedFieldProcessor {
private static final Map<EdgeVersion, Set<CalculatedFieldType>> NEW_CF_TYPES_PER_EDGE_VERSION = Map.of(
EdgeVersion.V_4_3_0, Set.of(GEOFENCING, ALARM, PROPAGATION, RELATED_ENTITIES_AGGREGATION, ENTITY_AGGREGATION)
);
@Override @Override
public ListenableFuture<Void> processCalculatedFieldMsgFromEdge(TenantId tenantId, Edge edge, CalculatedFieldUpdateMsg calculatedFieldUpdateMsg) { public ListenableFuture<Void> processCalculatedFieldMsgFromEdge(TenantId tenantId, Edge edge, CalculatedFieldUpdateMsg calculatedFieldUpdateMsg) {
CalculatedFieldId calculatedFieldId = new CalculatedFieldId(new UUID(calculatedFieldUpdateMsg.getIdMSB(), calculatedFieldUpdateMsg.getIdLSB())); CalculatedFieldId calculatedFieldId = new CalculatedFieldId(new UUID(calculatedFieldUpdateMsg.getIdMSB(), calculatedFieldUpdateMsg.getIdLSB()));
@ -91,7 +104,7 @@ public class CalculatedFieldEdgeProcessor extends BaseCalculatedFieldProcessor i
switch (edgeEvent.getAction()) { switch (edgeEvent.getAction()) {
case ADDED, UPDATED -> { case ADDED, UPDATED -> {
CalculatedField calculatedField = edgeCtx.getCalculatedFieldService().findById(edgeEvent.getTenantId(), calculatedFieldId); CalculatedField calculatedField = edgeCtx.getCalculatedFieldService().findById(edgeEvent.getTenantId(), calculatedFieldId);
if (calculatedField != null) { if (calculatedField != null && isValidCfToSend(calculatedField.getType(), edgeVersion)) {
UpdateMsgType msgType = getUpdateMsgType(edgeEvent.getAction()); UpdateMsgType msgType = getUpdateMsgType(edgeEvent.getAction());
CalculatedFieldUpdateMsg calculatedFieldUpdateMsg = EdgeMsgConstructorUtils.constructCalculatedFieldUpdatedMsg(msgType, calculatedField); CalculatedFieldUpdateMsg calculatedFieldUpdateMsg = EdgeMsgConstructorUtils.constructCalculatedFieldUpdatedMsg(msgType, calculatedField);
return DownlinkMsg.newBuilder() return DownlinkMsg.newBuilder()
@ -111,6 +124,14 @@ public class CalculatedFieldEdgeProcessor extends BaseCalculatedFieldProcessor i
return null; return null;
} }
private boolean isValidCfToSend(CalculatedFieldType type, EdgeVersion edgeVersion) {
return NEW_CF_TYPES_PER_EDGE_VERSION.entrySet().stream().noneMatch(entry -> {
EdgeVersion v = entry.getKey();
Set<CalculatedFieldType> newCfTypes = entry.getValue();
return edgeVersion.getNumber() < v.getNumber() && newCfTypes.contains(type);
});
}
@Override @Override
public EdgeEventType getEdgeEventType() { public EdgeEventType getEdgeEventType() {
return EdgeEventType.CALCULATED_FIELD; return EdgeEventType.CALCULATED_FIELD;

Loading…
Cancel
Save