Browse Source

Request SNMP devices' ids with pagination

pull/4301/head
Viacheslav Klimov 5 years ago
committed by Andrew Shvayka
parent
commit
79eb1183d9
  1. 15
      application/src/main/java/org/thingsboard/server/service/transport/DefaultTransportApiService.java
  2. 2
      common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceService.java
  3. 4
      common/queue/src/main/proto/queue.proto
  4. 30
      common/transport/snmp/src/main/java/org/thingsboard/server/transport/snmp/service/ProtoTransportEntityService.java
  5. 3
      dao/src/main/java/org/thingsboard/server/dao/device/DeviceDao.java
  6. 6
      dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java
  7. 2
      dao/src/main/java/org/thingsboard/server/dao/sql/device/DeviceRepository.java
  8. 5
      dao/src/main/java/org/thingsboard/server/dao/sql/device/JpaDeviceDao.java

15
application/src/main/java/org/thingsboard/server/service/transport/DefaultTransportApiService.java

@ -23,7 +23,6 @@ import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.protobuf.ByteString;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.CacheManager;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.thingsboard.common.util.JacksonUtil;
@ -46,6 +45,8 @@ import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.common.data.id.DeviceProfileId;
import org.thingsboard.server.common.data.id.FirmwareId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.common.data.relation.EntityRelation;
import org.thingsboard.server.common.data.security.DeviceCredentials;
import org.thingsboard.server.common.data.security.DeviceCredentialsType;
@ -62,7 +63,6 @@ import org.thingsboard.server.dao.device.provision.ProvisionRequest;
import org.thingsboard.server.dao.device.provision.ProvisionResponse;
import org.thingsboard.server.dao.firmware.FirmwareService;
import org.thingsboard.server.dao.relation.RelationService;
import org.thingsboard.server.dao.resource.ResourceService;
import org.thingsboard.server.dao.tenant.TbTenantProfileCache;
import org.thingsboard.server.gen.transport.TransportProtos;
import org.thingsboard.server.gen.transport.TransportProtos.DeviceInfoProto;
@ -72,9 +72,9 @@ import org.thingsboard.server.gen.transport.TransportProtos.GetEntityProfileRequ
import org.thingsboard.server.gen.transport.TransportProtos.GetEntityProfileResponseMsg;
import org.thingsboard.server.gen.transport.TransportProtos.GetOrCreateDeviceFromGatewayRequestMsg;
import org.thingsboard.server.gen.transport.TransportProtos.GetOrCreateDeviceFromGatewayResponseMsg;
import org.thingsboard.server.gen.transport.TransportProtos.GetResourceRequestMsg;
import org.thingsboard.server.gen.transport.TransportProtos.GetSnmpDevicesRequestMsg;
import org.thingsboard.server.gen.transport.TransportProtos.GetSnmpDevicesResponseMsg;
import org.thingsboard.server.gen.transport.TransportProtos.GetResourceRequestMsg;
import org.thingsboard.server.gen.transport.TransportProtos.ProvisionDeviceRequestMsg;
import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg;
import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg;
@ -91,7 +91,6 @@ import org.thingsboard.server.service.queue.TbClusterService;
import org.thingsboard.server.service.resource.TbResourceService;
import org.thingsboard.server.service.state.DeviceStateService;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
@ -433,13 +432,15 @@ public class DefaultTransportApiService implements TransportApiService {
return Futures.immediateFuture(TransportApiResponseMsg.newBuilder().setResourceResponseMsg(builder).build());
}
// TODO: request snmp devices with pagination
private ListenableFuture<TransportApiResponseMsg> handle(GetSnmpDevicesRequestMsg requestMsg) {
List<UUID> result = deviceService.findDevicesIdsByDeviceProfileTransportType(DeviceTransportType.SNMP);
PageLink pageLink = new PageLink(requestMsg.getPageSize(), requestMsg.getPage());
PageData<UUID> result = deviceService.findDevicesIdsByDeviceProfileTransportType(DeviceTransportType.SNMP, pageLink);
GetSnmpDevicesResponseMsg responseMsg = GetSnmpDevicesResponseMsg.newBuilder()
.addAllIds(result.stream()
.addAllIds(result.getData().stream()
.map(UUID::toString)
.collect(Collectors.toList()))
.setHasNextPage(result.hasNext())
.build();
return Futures.immediateFuture(TransportApiResponseMsg.newBuilder()

2
common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceService.java

@ -95,7 +95,7 @@ public interface DeviceService {
Device saveDevice(ProvisionRequest provisionRequest, DeviceProfile profile);
List<UUID> findDevicesIdsByDeviceProfileTransportType(DeviceTransportType transportType);
PageData<UUID> findDevicesIdsByDeviceProfileTransportType(DeviceTransportType transportType, PageLink pageLink);
Device assignDeviceToEdge(TenantId tenantId, DeviceId deviceId, EdgeId edgeId);

4
common/queue/src/main/proto/queue.proto

@ -268,11 +268,13 @@ message GetDeviceCredentialsResponseMsg {
}
message GetSnmpDevicesRequestMsg {
int32 page = 1;
int32 pageSize = 2;
}
message GetSnmpDevicesResponseMsg {
repeated string ids = 1;
bool hasNextPage = 2;
}
message EntityUpdateMsg {

30
common/transport/snmp/src/main/java/org/thingsboard/server/transport/snmp/service/ProtoTransportEntityService.java

@ -28,6 +28,7 @@ import org.thingsboard.server.common.transport.util.DataDecodingEncodingService;
import org.thingsboard.server.gen.transport.TransportProtos;
import org.thingsboard.server.queue.util.TbSnmpTransportComponent;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
@ -81,12 +82,29 @@ public class ProtoTransportEntityService {
}
public List<UUID> getAllSnmpDevicesIds() {
TransportProtos.GetSnmpDevicesResponseMsg devicesIdsResponse = transportService.getSnmpDevicesIds(
TransportProtos.GetSnmpDevicesRequestMsg.getDefaultInstance()
);
List<UUID> result = new ArrayList<>();
int page = 0;
int pageSize = 512;
boolean hasNextPage = true;
while (hasNextPage) {
TransportProtos.GetSnmpDevicesResponseMsg responseMsg = requestSnmpDevicesIds(page, pageSize);
result.addAll(responseMsg.getIdsList().stream()
.map(UUID::fromString)
.collect(Collectors.toList()));
hasNextPage = responseMsg.getHasNextPage();
page++;
}
return result;
}
return devicesIdsResponse.getIdsList().stream()
.map(UUID::fromString)
.collect(Collectors.toList());
private TransportProtos.GetSnmpDevicesResponseMsg requestSnmpDevicesIds(int page, int pageSize) {
TransportProtos.GetSnmpDevicesRequestMsg requestMsg = TransportProtos.GetSnmpDevicesRequestMsg.newBuilder()
.setPage(page)
.setPageSize(pageSize)
.build();
return transportService.getSnmpDevicesIds(requestMsg);
}
}

3
dao/src/main/java/org/thingsboard/server/dao/device/DeviceDao.java

@ -23,7 +23,6 @@ import org.thingsboard.server.common.data.EntitySubtype;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.common.data.page.TimePageLink;
import org.thingsboard.server.dao.Dao;
import org.thingsboard.server.dao.TenantEntityDao;
@ -220,7 +219,7 @@ public interface DeviceDao extends Dao<Device>, TenantEntityDao {
*/
PageData<Device> findDevicesByTenantIdAndProfileId(UUID tenantId, UUID profileId, PageLink pageLink);
List<UUID> findDevicesIdsByDeviceProfileTransportType(DeviceTransportType transportType);
PageData<UUID> findDevicesIdsByDeviceProfileTransportType(DeviceTransportType transportType, PageLink pageLink);
/**
* Find devices by tenantId, edgeId and page link.

6
dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java

@ -42,7 +42,6 @@ import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.EntityView;
import org.thingsboard.server.common.data.Firmware;
import org.thingsboard.server.common.data.Tenant;
import org.thingsboard.server.common.data.asset.Asset;
import org.thingsboard.server.common.data.device.DeviceSearchQuery;
import org.thingsboard.server.common.data.device.credentials.BasicMqttCredentials;
import org.thingsboard.server.common.data.device.data.CoapDeviceTransportConfiguration;
@ -62,7 +61,6 @@ import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.common.data.page.TimePageLink;
import org.thingsboard.server.common.data.relation.EntityRelation;
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
import org.thingsboard.server.common.data.relation.RelationTypeGroup;
@ -580,8 +578,8 @@ public class DeviceServiceImpl extends AbstractEntityService implements DeviceSe
}
@Override
public List<UUID> findDevicesIdsByDeviceProfileTransportType(DeviceTransportType transportType) {
return deviceDao.findDevicesIdsByDeviceProfileTransportType(transportType);
public PageData<UUID> findDevicesIdsByDeviceProfileTransportType(DeviceTransportType transportType, PageLink pageLink) {
return deviceDao.findDevicesIdsByDeviceProfileTransportType(transportType, pageLink);
}
@Override

2
dao/src/main/java/org/thingsboard/server/dao/sql/device/DeviceRepository.java

@ -215,5 +215,5 @@ public interface DeviceRepository extends PagingAndSortingRepository<DeviceEntit
@Query("SELECT d.id FROM DeviceEntity d " +
"INNER JOIN DeviceProfileEntity p ON d.deviceProfileId = p.id " +
"WHERE p.transportType = :transportType")
List<UUID> findIdsByDeviceProfileTransportType(@Param("transportType") DeviceTransportType transportType);
Page<UUID> findIdsByDeviceProfileTransportType(@Param("transportType") DeviceTransportType transportType, Pageable pageable);
}

5
dao/src/main/java/org/thingsboard/server/dao/sql/device/JpaDeviceDao.java

@ -29,7 +29,6 @@ import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.common.data.page.TimePageLink;
import org.thingsboard.server.dao.DaoUtil;
import org.thingsboard.server.dao.device.DeviceDao;
import org.thingsboard.server.dao.model.sql.DeviceEntity;
@ -119,8 +118,8 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao<DeviceEntity, Device>
}
@Override
public List<UUID> findDevicesIdsByDeviceProfileTransportType(DeviceTransportType transportType) {
return deviceRepository.findIdsByDeviceProfileTransportType(transportType);
public PageData<UUID> findDevicesIdsByDeviceProfileTransportType(DeviceTransportType transportType, PageLink pageLink) {
return DaoUtil.pageToPageData(deviceRepository.findIdsByDeviceProfileTransportType(transportType, DaoUtil.toPageable(pageLink)));
}
@Override

Loading…
Cancel
Save