Commit 79eb1183d92ac7d03a09876dcbc6bc75240d1026

Authored by Viacheslav Klimov
Committed by Andrew Shvayka
1 parent a89be64d

Request SNMP devices' ids with pagination

@@ -23,7 +23,6 @@ import com.google.common.util.concurrent.ListenableFuture; @@ -23,7 +23,6 @@ import com.google.common.util.concurrent.ListenableFuture;
23 import com.google.common.util.concurrent.MoreExecutors; 23 import com.google.common.util.concurrent.MoreExecutors;
24 import com.google.protobuf.ByteString; 24 import com.google.protobuf.ByteString;
25 import lombok.extern.slf4j.Slf4j; 25 import lombok.extern.slf4j.Slf4j;
26 -import org.springframework.cache.CacheManager;  
27 import org.springframework.stereotype.Service; 26 import org.springframework.stereotype.Service;
28 import org.springframework.util.StringUtils; 27 import org.springframework.util.StringUtils;
29 import org.thingsboard.common.util.JacksonUtil; 28 import org.thingsboard.common.util.JacksonUtil;
@@ -46,6 +45,8 @@ import org.thingsboard.server.common.data.id.DeviceId; @@ -46,6 +45,8 @@ import org.thingsboard.server.common.data.id.DeviceId;
46 import org.thingsboard.server.common.data.id.DeviceProfileId; 45 import org.thingsboard.server.common.data.id.DeviceProfileId;
47 import org.thingsboard.server.common.data.id.FirmwareId; 46 import org.thingsboard.server.common.data.id.FirmwareId;
48 import org.thingsboard.server.common.data.id.TenantId; 47 import org.thingsboard.server.common.data.id.TenantId;
  48 +import org.thingsboard.server.common.data.page.PageData;
  49 +import org.thingsboard.server.common.data.page.PageLink;
49 import org.thingsboard.server.common.data.relation.EntityRelation; 50 import org.thingsboard.server.common.data.relation.EntityRelation;
50 import org.thingsboard.server.common.data.security.DeviceCredentials; 51 import org.thingsboard.server.common.data.security.DeviceCredentials;
51 import org.thingsboard.server.common.data.security.DeviceCredentialsType; 52 import org.thingsboard.server.common.data.security.DeviceCredentialsType;
@@ -62,7 +63,6 @@ import org.thingsboard.server.dao.device.provision.ProvisionRequest; @@ -62,7 +63,6 @@ import org.thingsboard.server.dao.device.provision.ProvisionRequest;
62 import org.thingsboard.server.dao.device.provision.ProvisionResponse; 63 import org.thingsboard.server.dao.device.provision.ProvisionResponse;
63 import org.thingsboard.server.dao.firmware.FirmwareService; 64 import org.thingsboard.server.dao.firmware.FirmwareService;
64 import org.thingsboard.server.dao.relation.RelationService; 65 import org.thingsboard.server.dao.relation.RelationService;
65 -import org.thingsboard.server.dao.resource.ResourceService;  
66 import org.thingsboard.server.dao.tenant.TbTenantProfileCache; 66 import org.thingsboard.server.dao.tenant.TbTenantProfileCache;
67 import org.thingsboard.server.gen.transport.TransportProtos; 67 import org.thingsboard.server.gen.transport.TransportProtos;
68 import org.thingsboard.server.gen.transport.TransportProtos.DeviceInfoProto; 68 import org.thingsboard.server.gen.transport.TransportProtos.DeviceInfoProto;
@@ -72,9 +72,9 @@ import org.thingsboard.server.gen.transport.TransportProtos.GetEntityProfileRequ @@ -72,9 +72,9 @@ import org.thingsboard.server.gen.transport.TransportProtos.GetEntityProfileRequ
72 import org.thingsboard.server.gen.transport.TransportProtos.GetEntityProfileResponseMsg; 72 import org.thingsboard.server.gen.transport.TransportProtos.GetEntityProfileResponseMsg;
73 import org.thingsboard.server.gen.transport.TransportProtos.GetOrCreateDeviceFromGatewayRequestMsg; 73 import org.thingsboard.server.gen.transport.TransportProtos.GetOrCreateDeviceFromGatewayRequestMsg;
74 import org.thingsboard.server.gen.transport.TransportProtos.GetOrCreateDeviceFromGatewayResponseMsg; 74 import org.thingsboard.server.gen.transport.TransportProtos.GetOrCreateDeviceFromGatewayResponseMsg;
  75 +import org.thingsboard.server.gen.transport.TransportProtos.GetResourceRequestMsg;
75 import org.thingsboard.server.gen.transport.TransportProtos.GetSnmpDevicesRequestMsg; 76 import org.thingsboard.server.gen.transport.TransportProtos.GetSnmpDevicesRequestMsg;
76 import org.thingsboard.server.gen.transport.TransportProtos.GetSnmpDevicesResponseMsg; 77 import org.thingsboard.server.gen.transport.TransportProtos.GetSnmpDevicesResponseMsg;
77 -import org.thingsboard.server.gen.transport.TransportProtos.GetResourceRequestMsg;  
78 import org.thingsboard.server.gen.transport.TransportProtos.ProvisionDeviceRequestMsg; 78 import org.thingsboard.server.gen.transport.TransportProtos.ProvisionDeviceRequestMsg;
79 import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; 79 import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg;
80 import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; 80 import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg;
@@ -91,7 +91,6 @@ import org.thingsboard.server.service.queue.TbClusterService; @@ -91,7 +91,6 @@ import org.thingsboard.server.service.queue.TbClusterService;
91 import org.thingsboard.server.service.resource.TbResourceService; 91 import org.thingsboard.server.service.resource.TbResourceService;
92 import org.thingsboard.server.service.state.DeviceStateService; 92 import org.thingsboard.server.service.state.DeviceStateService;
93 93
94 -import java.util.List;  
95 import java.util.Optional; 94 import java.util.Optional;
96 import java.util.UUID; 95 import java.util.UUID;
97 import java.util.concurrent.ConcurrentHashMap; 96 import java.util.concurrent.ConcurrentHashMap;
@@ -433,13 +432,15 @@ public class DefaultTransportApiService implements TransportApiService { @@ -433,13 +432,15 @@ public class DefaultTransportApiService implements TransportApiService {
433 return Futures.immediateFuture(TransportApiResponseMsg.newBuilder().setResourceResponseMsg(builder).build()); 432 return Futures.immediateFuture(TransportApiResponseMsg.newBuilder().setResourceResponseMsg(builder).build());
434 } 433 }
435 434
436 - // TODO: request snmp devices with pagination  
437 private ListenableFuture<TransportApiResponseMsg> handle(GetSnmpDevicesRequestMsg requestMsg) { 435 private ListenableFuture<TransportApiResponseMsg> handle(GetSnmpDevicesRequestMsg requestMsg) {
438 - List<UUID> result = deviceService.findDevicesIdsByDeviceProfileTransportType(DeviceTransportType.SNMP); 436 + PageLink pageLink = new PageLink(requestMsg.getPageSize(), requestMsg.getPage());
  437 + PageData<UUID> result = deviceService.findDevicesIdsByDeviceProfileTransportType(DeviceTransportType.SNMP, pageLink);
  438 +
439 GetSnmpDevicesResponseMsg responseMsg = GetSnmpDevicesResponseMsg.newBuilder() 439 GetSnmpDevicesResponseMsg responseMsg = GetSnmpDevicesResponseMsg.newBuilder()
440 - .addAllIds(result.stream() 440 + .addAllIds(result.getData().stream()
441 .map(UUID::toString) 441 .map(UUID::toString)
442 .collect(Collectors.toList())) 442 .collect(Collectors.toList()))
  443 + .setHasNextPage(result.hasNext())
443 .build(); 444 .build();
444 445
445 return Futures.immediateFuture(TransportApiResponseMsg.newBuilder() 446 return Futures.immediateFuture(TransportApiResponseMsg.newBuilder()
@@ -95,7 +95,7 @@ public interface DeviceService { @@ -95,7 +95,7 @@ public interface DeviceService {
95 95
96 Device saveDevice(ProvisionRequest provisionRequest, DeviceProfile profile); 96 Device saveDevice(ProvisionRequest provisionRequest, DeviceProfile profile);
97 97
98 - List<UUID> findDevicesIdsByDeviceProfileTransportType(DeviceTransportType transportType); 98 + PageData<UUID> findDevicesIdsByDeviceProfileTransportType(DeviceTransportType transportType, PageLink pageLink);
99 99
100 Device assignDeviceToEdge(TenantId tenantId, DeviceId deviceId, EdgeId edgeId); 100 Device assignDeviceToEdge(TenantId tenantId, DeviceId deviceId, EdgeId edgeId);
101 101
@@ -268,11 +268,13 @@ message GetDeviceCredentialsResponseMsg { @@ -268,11 +268,13 @@ message GetDeviceCredentialsResponseMsg {
268 } 268 }
269 269
270 message GetSnmpDevicesRequestMsg { 270 message GetSnmpDevicesRequestMsg {
271 - 271 + int32 page = 1;
  272 + int32 pageSize = 2;
272 } 273 }
273 274
274 message GetSnmpDevicesResponseMsg { 275 message GetSnmpDevicesResponseMsg {
275 repeated string ids = 1; 276 repeated string ids = 1;
  277 + bool hasNextPage = 2;
276 } 278 }
277 279
278 message EntityUpdateMsg { 280 message EntityUpdateMsg {
@@ -28,6 +28,7 @@ import org.thingsboard.server.common.transport.util.DataDecodingEncodingService; @@ -28,6 +28,7 @@ import org.thingsboard.server.common.transport.util.DataDecodingEncodingService;
28 import org.thingsboard.server.gen.transport.TransportProtos; 28 import org.thingsboard.server.gen.transport.TransportProtos;
29 import org.thingsboard.server.queue.util.TbSnmpTransportComponent; 29 import org.thingsboard.server.queue.util.TbSnmpTransportComponent;
30 30
  31 +import java.util.ArrayList;
31 import java.util.List; 32 import java.util.List;
32 import java.util.UUID; 33 import java.util.UUID;
33 import java.util.stream.Collectors; 34 import java.util.stream.Collectors;
@@ -81,12 +82,29 @@ public class ProtoTransportEntityService { @@ -81,12 +82,29 @@ public class ProtoTransportEntityService {
81 } 82 }
82 83
83 public List<UUID> getAllSnmpDevicesIds() { 84 public List<UUID> getAllSnmpDevicesIds() {
84 - TransportProtos.GetSnmpDevicesResponseMsg devicesIdsResponse = transportService.getSnmpDevicesIds(  
85 - TransportProtos.GetSnmpDevicesRequestMsg.getDefaultInstance()  
86 - ); 85 + List<UUID> result = new ArrayList<>();
  86 +
  87 + int page = 0;
  88 + int pageSize = 512;
  89 + boolean hasNextPage = true;
  90 +
  91 + while (hasNextPage) {
  92 + TransportProtos.GetSnmpDevicesResponseMsg responseMsg = requestSnmpDevicesIds(page, pageSize);
  93 + result.addAll(responseMsg.getIdsList().stream()
  94 + .map(UUID::fromString)
  95 + .collect(Collectors.toList()));
  96 + hasNextPage = responseMsg.getHasNextPage();
  97 + page++;
  98 + }
  99 +
  100 + return result;
  101 + }
87 102
88 - return devicesIdsResponse.getIdsList().stream()  
89 - .map(UUID::fromString)  
90 - .collect(Collectors.toList()); 103 + private TransportProtos.GetSnmpDevicesResponseMsg requestSnmpDevicesIds(int page, int pageSize) {
  104 + TransportProtos.GetSnmpDevicesRequestMsg requestMsg = TransportProtos.GetSnmpDevicesRequestMsg.newBuilder()
  105 + .setPage(page)
  106 + .setPageSize(pageSize)
  107 + .build();
  108 + return transportService.getSnmpDevicesIds(requestMsg);
91 } 109 }
92 } 110 }
@@ -23,7 +23,6 @@ import org.thingsboard.server.common.data.EntitySubtype; @@ -23,7 +23,6 @@ import org.thingsboard.server.common.data.EntitySubtype;
23 import org.thingsboard.server.common.data.id.TenantId; 23 import org.thingsboard.server.common.data.id.TenantId;
24 import org.thingsboard.server.common.data.page.PageData; 24 import org.thingsboard.server.common.data.page.PageData;
25 import org.thingsboard.server.common.data.page.PageLink; 25 import org.thingsboard.server.common.data.page.PageLink;
26 -import org.thingsboard.server.common.data.page.TimePageLink;  
27 import org.thingsboard.server.dao.Dao; 26 import org.thingsboard.server.dao.Dao;
28 import org.thingsboard.server.dao.TenantEntityDao; 27 import org.thingsboard.server.dao.TenantEntityDao;
29 28
@@ -220,7 +219,7 @@ public interface DeviceDao extends Dao<Device>, TenantEntityDao { @@ -220,7 +219,7 @@ public interface DeviceDao extends Dao<Device>, TenantEntityDao {
220 */ 219 */
221 PageData<Device> findDevicesByTenantIdAndProfileId(UUID tenantId, UUID profileId, PageLink pageLink); 220 PageData<Device> findDevicesByTenantIdAndProfileId(UUID tenantId, UUID profileId, PageLink pageLink);
222 221
223 - List<UUID> findDevicesIdsByDeviceProfileTransportType(DeviceTransportType transportType); 222 + PageData<UUID> findDevicesIdsByDeviceProfileTransportType(DeviceTransportType transportType, PageLink pageLink);
224 223
225 /** 224 /**
226 * Find devices by tenantId, edgeId and page link. 225 * Find devices by tenantId, edgeId and page link.
@@ -42,7 +42,6 @@ import org.thingsboard.server.common.data.EntityType; @@ -42,7 +42,6 @@ import org.thingsboard.server.common.data.EntityType;
42 import org.thingsboard.server.common.data.EntityView; 42 import org.thingsboard.server.common.data.EntityView;
43 import org.thingsboard.server.common.data.Firmware; 43 import org.thingsboard.server.common.data.Firmware;
44 import org.thingsboard.server.common.data.Tenant; 44 import org.thingsboard.server.common.data.Tenant;
45 -import org.thingsboard.server.common.data.asset.Asset;  
46 import org.thingsboard.server.common.data.device.DeviceSearchQuery; 45 import org.thingsboard.server.common.data.device.DeviceSearchQuery;
47 import org.thingsboard.server.common.data.device.credentials.BasicMqttCredentials; 46 import org.thingsboard.server.common.data.device.credentials.BasicMqttCredentials;
48 import org.thingsboard.server.common.data.device.data.CoapDeviceTransportConfiguration; 47 import org.thingsboard.server.common.data.device.data.CoapDeviceTransportConfiguration;
@@ -62,7 +61,6 @@ import org.thingsboard.server.common.data.id.EntityId; @@ -62,7 +61,6 @@ import org.thingsboard.server.common.data.id.EntityId;
62 import org.thingsboard.server.common.data.id.TenantId; 61 import org.thingsboard.server.common.data.id.TenantId;
63 import org.thingsboard.server.common.data.page.PageData; 62 import org.thingsboard.server.common.data.page.PageData;
64 import org.thingsboard.server.common.data.page.PageLink; 63 import org.thingsboard.server.common.data.page.PageLink;
65 -import org.thingsboard.server.common.data.page.TimePageLink;  
66 import org.thingsboard.server.common.data.relation.EntityRelation; 64 import org.thingsboard.server.common.data.relation.EntityRelation;
67 import org.thingsboard.server.common.data.relation.EntitySearchDirection; 65 import org.thingsboard.server.common.data.relation.EntitySearchDirection;
68 import org.thingsboard.server.common.data.relation.RelationTypeGroup; 66 import org.thingsboard.server.common.data.relation.RelationTypeGroup;
@@ -580,8 +578,8 @@ public class DeviceServiceImpl extends AbstractEntityService implements DeviceSe @@ -580,8 +578,8 @@ public class DeviceServiceImpl extends AbstractEntityService implements DeviceSe
580 } 578 }
581 579
582 @Override 580 @Override
583 - public List<UUID> findDevicesIdsByDeviceProfileTransportType(DeviceTransportType transportType) {  
584 - return deviceDao.findDevicesIdsByDeviceProfileTransportType(transportType); 581 + public PageData<UUID> findDevicesIdsByDeviceProfileTransportType(DeviceTransportType transportType, PageLink pageLink) {
  582 + return deviceDao.findDevicesIdsByDeviceProfileTransportType(transportType, pageLink);
585 } 583 }
586 584
587 @Override 585 @Override
@@ -215,5 +215,5 @@ public interface DeviceRepository extends PagingAndSortingRepository<DeviceEntit @@ -215,5 +215,5 @@ public interface DeviceRepository extends PagingAndSortingRepository<DeviceEntit
215 @Query("SELECT d.id FROM DeviceEntity d " + 215 @Query("SELECT d.id FROM DeviceEntity d " +
216 "INNER JOIN DeviceProfileEntity p ON d.deviceProfileId = p.id " + 216 "INNER JOIN DeviceProfileEntity p ON d.deviceProfileId = p.id " +
217 "WHERE p.transportType = :transportType") 217 "WHERE p.transportType = :transportType")
218 - List<UUID> findIdsByDeviceProfileTransportType(@Param("transportType") DeviceTransportType transportType); 218 + Page<UUID> findIdsByDeviceProfileTransportType(@Param("transportType") DeviceTransportType transportType, Pageable pageable);
219 } 219 }
@@ -29,7 +29,6 @@ import org.thingsboard.server.common.data.EntityType; @@ -29,7 +29,6 @@ import org.thingsboard.server.common.data.EntityType;
29 import org.thingsboard.server.common.data.id.TenantId; 29 import org.thingsboard.server.common.data.id.TenantId;
30 import org.thingsboard.server.common.data.page.PageData; 30 import org.thingsboard.server.common.data.page.PageData;
31 import org.thingsboard.server.common.data.page.PageLink; 31 import org.thingsboard.server.common.data.page.PageLink;
32 -import org.thingsboard.server.common.data.page.TimePageLink;  
33 import org.thingsboard.server.dao.DaoUtil; 32 import org.thingsboard.server.dao.DaoUtil;
34 import org.thingsboard.server.dao.device.DeviceDao; 33 import org.thingsboard.server.dao.device.DeviceDao;
35 import org.thingsboard.server.dao.model.sql.DeviceEntity; 34 import org.thingsboard.server.dao.model.sql.DeviceEntity;
@@ -119,8 +118,8 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao<DeviceEntity, Device> @@ -119,8 +118,8 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao<DeviceEntity, Device>
119 } 118 }
120 119
121 @Override 120 @Override
122 - public List<UUID> findDevicesIdsByDeviceProfileTransportType(DeviceTransportType transportType) {  
123 - return deviceRepository.findIdsByDeviceProfileTransportType(transportType); 121 + public PageData<UUID> findDevicesIdsByDeviceProfileTransportType(DeviceTransportType transportType, PageLink pageLink) {
  122 + return DaoUtil.pageToPageData(deviceRepository.findIdsByDeviceProfileTransportType(transportType, DaoUtil.toPageable(pageLink)));
124 } 123 }
125 124
126 @Override 125 @Override