Commit 79eb1183d92ac7d03a09876dcbc6bc75240d1026
Committed by
Andrew Shvayka
1 parent
a89be64d
Request SNMP devices' ids with pagination
Showing
8 changed files
with
42 additions
and
25 deletions
... | ... | @@ -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 | ... | ... |