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 23 import com.google.common.util.concurrent.MoreExecutors;
24 24 import com.google.protobuf.ByteString;
25 25 import lombok.extern.slf4j.Slf4j;
26   -import org.springframework.cache.CacheManager;
27 26 import org.springframework.stereotype.Service;
28 27 import org.springframework.util.StringUtils;
29 28 import org.thingsboard.common.util.JacksonUtil;
... ... @@ -46,6 +45,8 @@ import org.thingsboard.server.common.data.id.DeviceId;
46 45 import org.thingsboard.server.common.data.id.DeviceProfileId;
47 46 import org.thingsboard.server.common.data.id.FirmwareId;
48 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 50 import org.thingsboard.server.common.data.relation.EntityRelation;
50 51 import org.thingsboard.server.common.data.security.DeviceCredentials;
51 52 import org.thingsboard.server.common.data.security.DeviceCredentialsType;
... ... @@ -62,7 +63,6 @@ import org.thingsboard.server.dao.device.provision.ProvisionRequest;
62 63 import org.thingsboard.server.dao.device.provision.ProvisionResponse;
63 64 import org.thingsboard.server.dao.firmware.FirmwareService;
64 65 import org.thingsboard.server.dao.relation.RelationService;
65   -import org.thingsboard.server.dao.resource.ResourceService;
66 66 import org.thingsboard.server.dao.tenant.TbTenantProfileCache;
67 67 import org.thingsboard.server.gen.transport.TransportProtos;
68 68 import org.thingsboard.server.gen.transport.TransportProtos.DeviceInfoProto;
... ... @@ -72,9 +72,9 @@ import org.thingsboard.server.gen.transport.TransportProtos.GetEntityProfileRequ
72 72 import org.thingsboard.server.gen.transport.TransportProtos.GetEntityProfileResponseMsg;
73 73 import org.thingsboard.server.gen.transport.TransportProtos.GetOrCreateDeviceFromGatewayRequestMsg;
74 74 import org.thingsboard.server.gen.transport.TransportProtos.GetOrCreateDeviceFromGatewayResponseMsg;
  75 +import org.thingsboard.server.gen.transport.TransportProtos.GetResourceRequestMsg;
75 76 import org.thingsboard.server.gen.transport.TransportProtos.GetSnmpDevicesRequestMsg;
76 77 import org.thingsboard.server.gen.transport.TransportProtos.GetSnmpDevicesResponseMsg;
77   -import org.thingsboard.server.gen.transport.TransportProtos.GetResourceRequestMsg;
78 78 import org.thingsboard.server.gen.transport.TransportProtos.ProvisionDeviceRequestMsg;
79 79 import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg;
80 80 import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg;
... ... @@ -91,7 +91,6 @@ import org.thingsboard.server.service.queue.TbClusterService;
91 91 import org.thingsboard.server.service.resource.TbResourceService;
92 92 import org.thingsboard.server.service.state.DeviceStateService;
93 93
94   -import java.util.List;
95 94 import java.util.Optional;
96 95 import java.util.UUID;
97 96 import java.util.concurrent.ConcurrentHashMap;
... ... @@ -433,13 +432,15 @@ public class DefaultTransportApiService implements TransportApiService {
433 432 return Futures.immediateFuture(TransportApiResponseMsg.newBuilder().setResourceResponseMsg(builder).build());
434 433 }
435 434
436   - // TODO: request snmp devices with pagination
437 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 439 GetSnmpDevicesResponseMsg responseMsg = GetSnmpDevicesResponseMsg.newBuilder()
440   - .addAllIds(result.stream()
  440 + .addAllIds(result.getData().stream()
441 441 .map(UUID::toString)
442 442 .collect(Collectors.toList()))
  443 + .setHasNextPage(result.hasNext())
443 444 .build();
444 445
445 446 return Futures.immediateFuture(TransportApiResponseMsg.newBuilder()
... ...
... ... @@ -95,7 +95,7 @@ public interface DeviceService {
95 95
96 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 100 Device assignDeviceToEdge(TenantId tenantId, DeviceId deviceId, EdgeId edgeId);
101 101
... ...
... ... @@ -268,11 +268,13 @@ message GetDeviceCredentialsResponseMsg {
268 268 }
269 269
270 270 message GetSnmpDevicesRequestMsg {
271   -
  271 + int32 page = 1;
  272 + int32 pageSize = 2;
272 273 }
273 274
274 275 message GetSnmpDevicesResponseMsg {
275 276 repeated string ids = 1;
  277 + bool hasNextPage = 2;
276 278 }
277 279
278 280 message EntityUpdateMsg {
... ...
... ... @@ -28,6 +28,7 @@ import org.thingsboard.server.common.transport.util.DataDecodingEncodingService;
28 28 import org.thingsboard.server.gen.transport.TransportProtos;
29 29 import org.thingsboard.server.queue.util.TbSnmpTransportComponent;
30 30
  31 +import java.util.ArrayList;
31 32 import java.util.List;
32 33 import java.util.UUID;
33 34 import java.util.stream.Collectors;
... ... @@ -81,12 +82,29 @@ public class ProtoTransportEntityService {
81 82 }
82 83
83 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 23 import org.thingsboard.server.common.data.id.TenantId;
24 24 import org.thingsboard.server.common.data.page.PageData;
25 25 import org.thingsboard.server.common.data.page.PageLink;
26   -import org.thingsboard.server.common.data.page.TimePageLink;
27 26 import org.thingsboard.server.dao.Dao;
28 27 import org.thingsboard.server.dao.TenantEntityDao;
29 28
... ... @@ -220,7 +219,7 @@ public interface DeviceDao extends Dao<Device>, TenantEntityDao {
220 219 */
221 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 225 * Find devices by tenantId, edgeId and page link.
... ...
... ... @@ -42,7 +42,6 @@ import org.thingsboard.server.common.data.EntityType;
42 42 import org.thingsboard.server.common.data.EntityView;
43 43 import org.thingsboard.server.common.data.Firmware;
44 44 import org.thingsboard.server.common.data.Tenant;
45   -import org.thingsboard.server.common.data.asset.Asset;
46 45 import org.thingsboard.server.common.data.device.DeviceSearchQuery;
47 46 import org.thingsboard.server.common.data.device.credentials.BasicMqttCredentials;
48 47 import org.thingsboard.server.common.data.device.data.CoapDeviceTransportConfiguration;
... ... @@ -62,7 +61,6 @@ import org.thingsboard.server.common.data.id.EntityId;
62 61 import org.thingsboard.server.common.data.id.TenantId;
63 62 import org.thingsboard.server.common.data.page.PageData;
64 63 import org.thingsboard.server.common.data.page.PageLink;
65   -import org.thingsboard.server.common.data.page.TimePageLink;
66 64 import org.thingsboard.server.common.data.relation.EntityRelation;
67 65 import org.thingsboard.server.common.data.relation.EntitySearchDirection;
68 66 import org.thingsboard.server.common.data.relation.RelationTypeGroup;
... ... @@ -580,8 +578,8 @@ public class DeviceServiceImpl extends AbstractEntityService implements DeviceSe
580 578 }
581 579
582 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 585 @Override
... ...
... ... @@ -215,5 +215,5 @@ public interface DeviceRepository extends PagingAndSortingRepository<DeviceEntit
215 215 @Query("SELECT d.id FROM DeviceEntity d " +
216 216 "INNER JOIN DeviceProfileEntity p ON d.deviceProfileId = p.id " +
217 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 29 import org.thingsboard.server.common.data.id.TenantId;
30 30 import org.thingsboard.server.common.data.page.PageData;
31 31 import org.thingsboard.server.common.data.page.PageLink;
32   -import org.thingsboard.server.common.data.page.TimePageLink;
33 32 import org.thingsboard.server.dao.DaoUtil;
34 33 import org.thingsboard.server.dao.device.DeviceDao;
35 34 import org.thingsboard.server.dao.model.sql.DeviceEntity;
... ... @@ -119,8 +118,8 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao<DeviceEntity, Device>
119 118 }
120 119
121 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 125 @Override
... ...