|
|
@ -57,6 +57,7 @@ import org.thingsboard.server.common.data.ota.OtaPackageType; |
|
|
import org.thingsboard.server.common.data.ota.OtaPackageUtil; |
|
|
import org.thingsboard.server.common.data.ota.OtaPackageUtil; |
|
|
import org.thingsboard.server.common.data.page.PageData; |
|
|
import org.thingsboard.server.common.data.page.PageData; |
|
|
import org.thingsboard.server.common.data.page.PageLink; |
|
|
import org.thingsboard.server.common.data.page.PageLink; |
|
|
|
|
|
import org.thingsboard.server.common.data.queue.Queue; |
|
|
import org.thingsboard.server.common.data.relation.EntityRelation; |
|
|
import org.thingsboard.server.common.data.relation.EntityRelation; |
|
|
import org.thingsboard.server.common.data.security.DeviceCredentials; |
|
|
import org.thingsboard.server.common.data.security.DeviceCredentials; |
|
|
import org.thingsboard.server.common.data.security.DeviceCredentialsType; |
|
|
import org.thingsboard.server.common.data.security.DeviceCredentialsType; |
|
|
@ -72,6 +73,7 @@ import org.thingsboard.server.dao.device.provision.ProvisionFailedException; |
|
|
import org.thingsboard.server.dao.device.provision.ProvisionRequest; |
|
|
import org.thingsboard.server.dao.device.provision.ProvisionRequest; |
|
|
import org.thingsboard.server.dao.device.provision.ProvisionResponse; |
|
|
import org.thingsboard.server.dao.device.provision.ProvisionResponse; |
|
|
import org.thingsboard.server.dao.ota.OtaPackageService; |
|
|
import org.thingsboard.server.dao.ota.OtaPackageService; |
|
|
|
|
|
import org.thingsboard.server.dao.queue.QueueService; |
|
|
import org.thingsboard.server.dao.relation.RelationService; |
|
|
import org.thingsboard.server.dao.relation.RelationService; |
|
|
import org.thingsboard.server.dao.tenant.TbTenantProfileCache; |
|
|
import org.thingsboard.server.dao.tenant.TbTenantProfileCache; |
|
|
import org.thingsboard.server.gen.transport.TransportProtos; |
|
|
import org.thingsboard.server.gen.transport.TransportProtos; |
|
|
@ -99,6 +101,7 @@ import org.thingsboard.server.service.executors.DbCallbackExecutorService; |
|
|
import org.thingsboard.server.service.profile.TbDeviceProfileCache; |
|
|
import org.thingsboard.server.service.profile.TbDeviceProfileCache; |
|
|
import org.thingsboard.server.service.resource.TbResourceService; |
|
|
import org.thingsboard.server.service.resource.TbResourceService; |
|
|
|
|
|
|
|
|
|
|
|
import java.util.List; |
|
|
import java.util.Optional; |
|
|
import java.util.Optional; |
|
|
import java.util.UUID; |
|
|
import java.util.UUID; |
|
|
import java.util.concurrent.ConcurrentHashMap; |
|
|
import java.util.concurrent.ConcurrentHashMap; |
|
|
@ -134,6 +137,7 @@ public class DefaultTransportApiService implements TransportApiService { |
|
|
private final TbResourceService resourceService; |
|
|
private final TbResourceService resourceService; |
|
|
private final OtaPackageService otaPackageService; |
|
|
private final OtaPackageService otaPackageService; |
|
|
private final OtaPackageDataCache otaPackageDataCache; |
|
|
private final OtaPackageDataCache otaPackageDataCache; |
|
|
|
|
|
private final QueueService queueService; |
|
|
|
|
|
|
|
|
private final ConcurrentMap<String, ReentrantLock> deviceCreationLocks = new ConcurrentHashMap<>(); |
|
|
private final ConcurrentMap<String, ReentrantLock> deviceCreationLocks = new ConcurrentHashMap<>(); |
|
|
|
|
|
|
|
|
@ -176,6 +180,12 @@ public class DefaultTransportApiService implements TransportApiService { |
|
|
result = handle(transportApiRequestMsg.getDeviceCredentialsRequestMsg()); |
|
|
result = handle(transportApiRequestMsg.getDeviceCredentialsRequestMsg()); |
|
|
} else if (transportApiRequestMsg.hasOtaPackageRequestMsg()) { |
|
|
} else if (transportApiRequestMsg.hasOtaPackageRequestMsg()) { |
|
|
result = handle(transportApiRequestMsg.getOtaPackageRequestMsg()); |
|
|
result = handle(transportApiRequestMsg.getOtaPackageRequestMsg()); |
|
|
|
|
|
} else if (transportApiRequestMsg.hasGetAllMainQueueRoutingInfoRequestMsg()) { |
|
|
|
|
|
return Futures.transform(handle(transportApiRequestMsg.getGetAllMainQueueRoutingInfoRequestMsg()), value -> new TbProtoQueueMsg<>(tbProtoQueueMsg.getKey(), value, tbProtoQueueMsg.getHeaders()), MoreExecutors.directExecutor()); |
|
|
|
|
|
} else if (transportApiRequestMsg.hasGetTenantQueueRoutingInfoRequestMsg()) { |
|
|
|
|
|
return Futures.transform(handle(transportApiRequestMsg.getGetTenantQueueRoutingInfoRequestMsg()), value -> new TbProtoQueueMsg<>(tbProtoQueueMsg.getKey(), value, tbProtoQueueMsg.getHeaders()), MoreExecutors.directExecutor()); |
|
|
|
|
|
} else if (transportApiRequestMsg.hasGetAllQueueRoutingInfoRequestMsg()) { |
|
|
|
|
|
return Futures.transform(handle(transportApiRequestMsg.getGetAllQueueRoutingInfoRequestMsg()), value -> new TbProtoQueueMsg<>(tbProtoQueueMsg.getKey(), value, tbProtoQueueMsg.getHeaders()), MoreExecutors.directExecutor()); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return Futures.transform(Optional.ofNullable(result).orElseGet(this::getEmptyTransportApiResponseFuture), |
|
|
return Futures.transform(Optional.ofNullable(result).orElseGet(this::getEmptyTransportApiResponseFuture), |
|
|
@ -636,6 +646,32 @@ public class DefaultTransportApiService implements TransportApiService { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private ListenableFuture<TransportApiResponseMsg> handle(TransportProtos.GetAllMainQueueRoutingInfoRequestMsg requestMsg) { |
|
|
|
|
|
return queuesToTransportApiResponseMsg(queueService.findAllMainQueues()); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private ListenableFuture<TransportApiResponseMsg> handle(TransportProtos.GetAllQueueRoutingInfoRequestMsg requestMsg) { |
|
|
|
|
|
return queuesToTransportApiResponseMsg(queueService.findAllQueues()); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private ListenableFuture<TransportApiResponseMsg> handle(TransportProtos.GetTenantQueueRoutingInfoRequestMsg requestMsg) { |
|
|
|
|
|
TenantId tenantId = new TenantId(new UUID(requestMsg.getTenantIdMSB(), requestMsg.getTenantIdLSB())); |
|
|
|
|
|
return queuesToTransportApiResponseMsg(queueService.findQueuesByTenantId(tenantId)); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private ListenableFuture<TransportApiResponseMsg> queuesToTransportApiResponseMsg(List<Queue> queues) { |
|
|
|
|
|
return Futures.immediateFuture(TransportApiResponseMsg.newBuilder() |
|
|
|
|
|
.addAllGetQueueRoutingInfoResponseMsgs(queues.stream() |
|
|
|
|
|
.map(queue -> TransportProtos.GetQueueRoutingInfoResponseMsg.newBuilder() |
|
|
|
|
|
.setTenantIdMSB(queue.getTenantId().getId().getMostSignificantBits()) |
|
|
|
|
|
.setTenantIdLSB(queue.getTenantId().getId().getLeastSignificantBits()) |
|
|
|
|
|
.setQueueName(queue.getName()) |
|
|
|
|
|
.setQueueTopic(queue.getTopic()) |
|
|
|
|
|
.setPartitions(queue.getPartitions()) |
|
|
|
|
|
.build()).collect(Collectors.toList())).build()); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private Long checkLong(Long l) { |
|
|
private Long checkLong(Long l) { |
|
|
return l != null ? l : 0; |
|
|
return l != null ? l : 0; |
|
|
} |
|
|
} |
|
|
|