|
|
|
@ -87,7 +87,10 @@ public class DefaultCalculatedFieldQueueService implements CalculatedFieldQueueS |
|
|
|
public void pushRequestToQueue(TimeseriesSaveRequest request, TimeseriesSaveResult result, FutureCallback<Void> callback) { |
|
|
|
var tenantId = request.getTenantId(); |
|
|
|
var entityId = request.getEntityId(); |
|
|
|
checkEntityAndPushToQueue(tenantId, entityId, cf -> cf.matches(request.getEntries()), cf -> cf.linkMatches(entityId, request.getEntries()), |
|
|
|
var entries = request.getEntries(); |
|
|
|
checkEntityAndPushToQueue(tenantId, entityId, |
|
|
|
cf -> cf.matches(entries), |
|
|
|
cf -> cf.linkMatches(entityId, entries), |
|
|
|
() -> toCalculatedFieldTelemetryMsgProto(request, result), callback); |
|
|
|
} |
|
|
|
|
|
|
|
@ -100,7 +103,11 @@ public class DefaultCalculatedFieldQueueService implements CalculatedFieldQueueS |
|
|
|
public void pushRequestToQueue(AttributesSaveRequest request, AttributesSaveResult result, FutureCallback<Void> callback) { |
|
|
|
var tenantId = request.getTenantId(); |
|
|
|
var entityId = request.getEntityId(); |
|
|
|
checkEntityAndPushToQueue(tenantId, entityId, cf -> cf.matches(request.getEntries(), request.getScope()), cf -> cf.linkMatches(entityId, request.getEntries(), request.getScope()), |
|
|
|
var entries = request.getEntries(); |
|
|
|
var scope = request.getScope(); |
|
|
|
checkEntityAndPushToQueue(tenantId, entityId, |
|
|
|
cf -> cf.matches(entries, scope), |
|
|
|
cf -> cf.linkMatches(entityId, entries, scope), |
|
|
|
() -> toCalculatedFieldTelemetryMsgProto(request, result), callback); |
|
|
|
} |
|
|
|
|
|
|
|
@ -113,7 +120,10 @@ public class DefaultCalculatedFieldQueueService implements CalculatedFieldQueueS |
|
|
|
public void pushRequestToQueue(AttributesDeleteRequest request, List<String> result, FutureCallback<Void> callback) { |
|
|
|
var tenantId = request.getTenantId(); |
|
|
|
var entityId = request.getEntityId(); |
|
|
|
checkEntityAndPushToQueue(tenantId, entityId, cf -> cf.matchesKeys(result, request.getScope()), cf -> cf.linkMatchesAttrKeys(entityId, result, request.getScope()), |
|
|
|
var scope = request.getScope(); |
|
|
|
checkEntityAndPushToQueue(tenantId, entityId, |
|
|
|
cf -> cf.matchesKeys(result, scope), |
|
|
|
cf -> cf.linkMatchesAttrKeys(entityId, result, scope), |
|
|
|
() -> toCalculatedFieldTelemetryMsgProto(request, result), callback); |
|
|
|
} |
|
|
|
|
|
|
|
@ -121,8 +131,9 @@ public class DefaultCalculatedFieldQueueService implements CalculatedFieldQueueS |
|
|
|
public void pushRequestToQueue(TimeseriesDeleteRequest request, List<String> result, FutureCallback<Void> callback) { |
|
|
|
var tenantId = request.getTenantId(); |
|
|
|
var entityId = request.getEntityId(); |
|
|
|
|
|
|
|
checkEntityAndPushToQueue(tenantId, entityId, cf -> cf.matchesKeys(result), cf -> cf.linkMatchesTsKeys(entityId, result), |
|
|
|
checkEntityAndPushToQueue(tenantId, entityId, |
|
|
|
cf -> cf.matchesKeys(result), |
|
|
|
cf -> cf.linkMatchesTsKeys(entityId, result), |
|
|
|
() -> toCalculatedFieldTelemetryMsgProto(request, result), callback); |
|
|
|
} |
|
|
|
|
|
|
|
@ -134,7 +145,8 @@ public class DefaultCalculatedFieldQueueService implements CalculatedFieldQueueS |
|
|
|
} |
|
|
|
boolean send = checkEntityForCalculatedFields(tenantId, entityId, mainEntityFilter, linkedEntityFilter); |
|
|
|
if (send) { |
|
|
|
clusterService.pushMsgToCalculatedFields(tenantId, entityId, msg.get(), wrap(callback)); |
|
|
|
ToCalculatedFieldMsg calculatedFieldMsg = msg.get(); |
|
|
|
clusterService.pushMsgToCalculatedFields(tenantId, entityId, calculatedFieldMsg, wrap(callback)); |
|
|
|
} else { |
|
|
|
if (callback != null) { |
|
|
|
callback.onSuccess(null); |
|
|
|
@ -143,20 +155,35 @@ public class DefaultCalculatedFieldQueueService implements CalculatedFieldQueueS |
|
|
|
} |
|
|
|
|
|
|
|
private boolean checkEntityForCalculatedFields(TenantId tenantId, EntityId entityId, Predicate<CalculatedFieldCtx> filter, Predicate<CalculatedFieldCtx> linkedEntityFilter) { |
|
|
|
boolean send = false; |
|
|
|
if (supportedReferencedEntities.contains(entityId.getEntityType())) { |
|
|
|
send = calculatedFieldCache.getCalculatedFieldCtxsByEntityId(entityId).stream().anyMatch(filter); |
|
|
|
if (!send) { |
|
|
|
send = calculatedFieldCache.getCalculatedFieldCtxsByEntityId(getProfileId(tenantId, entityId)).stream().anyMatch(filter); |
|
|
|
if (!supportedReferencedEntities.contains(entityId.getEntityType())) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
List<CalculatedFieldCtx> entityCfs = calculatedFieldCache.getCalculatedFieldCtxsByEntityId(entityId); |
|
|
|
for (CalculatedFieldCtx ctx : entityCfs) { |
|
|
|
if (filter.test(ctx)) { |
|
|
|
return true; |
|
|
|
} |
|
|
|
if (!send) { |
|
|
|
send = calculatedFieldCache.getCalculatedFieldLinksByEntityId(entityId).stream() |
|
|
|
.map(CalculatedFieldLink::getCalculatedFieldId) |
|
|
|
.map(calculatedFieldCache::getCalculatedFieldCtx) |
|
|
|
.anyMatch(linkedEntityFilter); |
|
|
|
} |
|
|
|
|
|
|
|
EntityId profileId = getProfileId(tenantId, entityId); |
|
|
|
if (profileId != null) { |
|
|
|
List<CalculatedFieldCtx> profileCfs = calculatedFieldCache.getCalculatedFieldCtxsByEntityId(profileId); |
|
|
|
for (CalculatedFieldCtx ctx : profileCfs) { |
|
|
|
if (filter.test(ctx)) { |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
List<CalculatedFieldLink> links = calculatedFieldCache.getCalculatedFieldLinksByEntityId(entityId); |
|
|
|
for (CalculatedFieldLink link : links) { |
|
|
|
CalculatedFieldCtx ctx = calculatedFieldCache.getCalculatedFieldCtx(link.getCalculatedFieldId()); |
|
|
|
if (ctx != null && linkedEntityFilter.test(ctx)) { |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
return send; |
|
|
|
|
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
private EntityId getProfileId(TenantId tenantId, EntityId entityId) { |
|
|
|
@ -168,8 +195,6 @@ public class DefaultCalculatedFieldQueueService implements CalculatedFieldQueueS |
|
|
|
} |
|
|
|
|
|
|
|
private ToCalculatedFieldMsg toCalculatedFieldTelemetryMsgProto(TimeseriesSaveRequest request, TimeseriesSaveResult result) { |
|
|
|
ToCalculatedFieldMsg.Builder msg = ToCalculatedFieldMsg.newBuilder(); |
|
|
|
|
|
|
|
CalculatedFieldTelemetryMsgProto.Builder telemetryMsg = buildTelemetryMsgProto(request.getTenantId(), request.getEntityId(), request.getPreviousCalculatedFieldIds(), request.getTbMsgId(), request.getTbMsgType()); |
|
|
|
|
|
|
|
List<TsKvEntry> entries = request.getEntries(); |
|
|
|
@ -183,8 +208,7 @@ public class DefaultCalculatedFieldQueueService implements CalculatedFieldQueueS |
|
|
|
telemetryMsg.addTsData(tsProtoBuilder.build()); |
|
|
|
} |
|
|
|
|
|
|
|
msg.setTelemetryMsg(telemetryMsg.build()); |
|
|
|
return msg.build(); |
|
|
|
return ToCalculatedFieldMsg.newBuilder().setTelemetryMsg(telemetryMsg).build(); |
|
|
|
} |
|
|
|
|
|
|
|
private ToCalculatedFieldMsg toCalculatedFieldTelemetryMsgProto(AttributesSaveRequest request, AttributesSaveResult result) { |
|
|
|
@ -198,7 +222,9 @@ public class DefaultCalculatedFieldQueueService implements CalculatedFieldQueueS |
|
|
|
|
|
|
|
for (int i = 0; i < entries.size(); i++) { |
|
|
|
AttributeValueProto.Builder attrProtoBuilder = ProtoUtils.toProto(entries.get(i)).toBuilder(); |
|
|
|
attrProtoBuilder.setVersion(versions.get(i)); |
|
|
|
if (versions != null && !versions.isEmpty() && versions.get(i) != null) { |
|
|
|
attrProtoBuilder.setVersion(versions.get(i)); |
|
|
|
} |
|
|
|
telemetryMsg.addAttrData(attrProtoBuilder.build()); |
|
|
|
} |
|
|
|
msg.setTelemetryMsg(telemetryMsg.build()); |
|
|
|
|