added api to retrieve queue stats entities
This commit is contained in:
parent
3bbbf8341f
commit
cbe8f1b67f
@ -107,6 +107,7 @@ public class ControllerConstants {
|
||||
protected static final String ASSET_PROFILE_INFO_DESCRIPTION = "Asset Profile Info is a lightweight object that includes main information about Asset Profile. ";
|
||||
protected static final String QUEUE_SERVICE_TYPE_DESCRIPTION = "Service type (implemented only for the TB-RULE-ENGINE)";
|
||||
protected static final String QUEUE_QUEUE_TEXT_SEARCH_DESCRIPTION = "The case insensitive 'substring' filter based on the queue name.";
|
||||
protected static final String QUEUE_STATS_TEXT_SEARCH_DESCRIPTION = "The case insensitive 'substring' filter based on the queue name or service id.";
|
||||
protected static final String QUEUE_ID_PARAM_DESCRIPTION = "A string value representing the queue id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'";
|
||||
protected static final String QUEUE_NAME_PARAM_DESCRIPTION = "A string value representing the queue id. For example, 'Main'";
|
||||
protected static final String OTA_PACKAGE_INFO_DESCRIPTION = "OTA Package Info is a lightweight object that includes main information about the OTA Package excluding the heavyweight data. ";
|
||||
|
||||
@ -0,0 +1,70 @@
|
||||
/**
|
||||
* Copyright © 2016-2024 The Thingsboard Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.thingsboard.server.controller;
|
||||
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.thingsboard.server.common.data.exception.ThingsboardException;
|
||||
import org.thingsboard.server.common.data.page.PageData;
|
||||
import org.thingsboard.server.common.data.page.PageLink;
|
||||
import org.thingsboard.server.common.data.queue.QueueStats;
|
||||
import org.thingsboard.server.config.annotations.ApiOperation;
|
||||
import org.thingsboard.server.dao.queue.QueueStatsService;
|
||||
import org.thingsboard.server.queue.util.TbCoreComponent;
|
||||
|
||||
import static org.thingsboard.server.controller.ControllerConstants.PAGE_DATA_PARAMETERS;
|
||||
import static org.thingsboard.server.controller.ControllerConstants.PAGE_NUMBER_DESCRIPTION;
|
||||
import static org.thingsboard.server.controller.ControllerConstants.PAGE_SIZE_DESCRIPTION;
|
||||
import static org.thingsboard.server.controller.ControllerConstants.QUEUE_STATS_TEXT_SEARCH_DESCRIPTION;
|
||||
import static org.thingsboard.server.controller.ControllerConstants.SORT_ORDER_DESCRIPTION;
|
||||
import static org.thingsboard.server.controller.ControllerConstants.SORT_PROPERTY_DESCRIPTION;
|
||||
import static org.thingsboard.server.controller.ControllerConstants.SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH;
|
||||
|
||||
@RestController
|
||||
@TbCoreComponent
|
||||
@RequestMapping("/api")
|
||||
@RequiredArgsConstructor
|
||||
public class QueueStatsController extends BaseController {
|
||||
|
||||
private final QueueStatsService queueStatsService;
|
||||
|
||||
@ApiOperation(value = "Get Queue Statistics (getTenantQueueStats)",
|
||||
notes = "Returns a page of queue stats objects that are used to collect queue statistics for every service. " +
|
||||
PAGE_DATA_PARAMETERS + SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH)
|
||||
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
|
||||
@RequestMapping(value = "/queueStats", params = {"pageSize", "page"}, method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public PageData<QueueStats> getTenantQueueStats(@Parameter(description = PAGE_SIZE_DESCRIPTION, required = true)
|
||||
@RequestParam int pageSize,
|
||||
@Parameter(description = PAGE_NUMBER_DESCRIPTION, required = true)
|
||||
@RequestParam int page,
|
||||
@Parameter(description = QUEUE_STATS_TEXT_SEARCH_DESCRIPTION)
|
||||
@RequestParam(required = false) String textSearch,
|
||||
@Parameter(description = SORT_PROPERTY_DESCRIPTION, schema = @Schema(allowableValues = {"createdTime"}))
|
||||
@RequestParam(required = false) String sortProperty,
|
||||
@Parameter(description = SORT_ORDER_DESCRIPTION, schema = @Schema(allowableValues = {"ASC", "DESC"}))
|
||||
@RequestParam(required = false) String sortOrder) throws ThingsboardException {
|
||||
PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder);
|
||||
return queueStatsService.findByTenantId(getTenantId(), pageLink);
|
||||
}
|
||||
}
|
||||
@ -198,9 +198,9 @@ public class BaseQueueControllerTest extends AbstractControllerTest {
|
||||
});
|
||||
ruleEngineStatisticsService.reportQueueStats(System.currentTimeMillis(), testStats);
|
||||
|
||||
List<QueueStats> queueStatsList = queueStatsService.findByTenantId(tenantId);
|
||||
assertThat(queueStatsList).hasSize(1);
|
||||
QueueStats queueStats = queueStatsList.get(0);
|
||||
PageData<QueueStats> queueStatsList = queueStatsService.findByTenantId(tenantId, new PageLink(10));
|
||||
assertThat(queueStatsList.getData()).hasSize(1);
|
||||
QueueStats queueStats = queueStatsList.getData().get(0);
|
||||
assertThat(queueStats.getQueueName()).isEqualTo(queue.getName());
|
||||
|
||||
ArgumentCaptor<Long> ttlCaptor = ArgumentCaptor.forClass(Long.class);
|
||||
|
||||
@ -17,11 +17,11 @@ package org.thingsboard.server.dao.queue;
|
||||
|
||||
import org.thingsboard.server.common.data.id.QueueStatsId;
|
||||
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.queue.QueueStats;
|
||||
import org.thingsboard.server.dao.entity.EntityDaoService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface QueueStatsService extends EntityDaoService {
|
||||
|
||||
QueueStats save(TenantId tenantId, QueueStats queueStats);
|
||||
@ -30,6 +30,6 @@ public interface QueueStatsService extends EntityDaoService {
|
||||
|
||||
QueueStats findByTenantIdAndNameAndServiceId(TenantId tenantId, String queueName, String serviceId);
|
||||
|
||||
List<QueueStats> findByTenantId(TenantId tenantId);
|
||||
PageData<QueueStats> findByTenantId(TenantId tenantId, PageLink pageLink);
|
||||
|
||||
}
|
||||
|
||||
@ -23,11 +23,13 @@ import org.thingsboard.server.common.data.id.EntityId;
|
||||
import org.thingsboard.server.common.data.id.HasId;
|
||||
import org.thingsboard.server.common.data.id.QueueStatsId;
|
||||
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.queue.QueueStats;
|
||||
import org.thingsboard.server.dao.entity.AbstractEntityService;
|
||||
import org.thingsboard.server.dao.service.DataValidator;
|
||||
import org.thingsboard.server.dao.service.Validator;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import static org.thingsboard.server.dao.service.Validator.validateId;
|
||||
@ -65,10 +67,10 @@ public class BaseQueueStatsService extends AbstractEntityService implements Queu
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<QueueStats> findByTenantId(TenantId tenantId) {
|
||||
public PageData<QueueStats> findByTenantId(TenantId tenantId, PageLink pageLink) {
|
||||
log.trace("Executing findByTenantId, tenantId: [{}]", tenantId);
|
||||
validateId(tenantId, id -> INCORRECT_TENANT_ID + id);
|
||||
return queueStatsDao.findByTenantId(tenantId);
|
||||
Validator.validatePageLink(pageLink);
|
||||
return queueStatsDao.findByTenantId(tenantId, pageLink);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -16,16 +16,16 @@
|
||||
package org.thingsboard.server.dao.queue;
|
||||
|
||||
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.queue.QueueStats;
|
||||
import org.thingsboard.server.dao.Dao;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface QueueStatsDao extends Dao<QueueStats> {
|
||||
|
||||
QueueStats findByTenantIdQueueNameAndServiceId(TenantId tenantId, String queueName, String serviceId);
|
||||
|
||||
List<QueueStats> findByTenantId(TenantId tenantId);
|
||||
PageData<QueueStats> findByTenantId(TenantId tenantId, PageLink pageLink);
|
||||
|
||||
void deleteByTenantId(TenantId tenantId);
|
||||
|
||||
|
||||
@ -21,6 +21,8 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Component;
|
||||
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.queue.QueueStats;
|
||||
import org.thingsboard.server.dao.DaoUtil;
|
||||
import org.thingsboard.server.dao.model.sql.QueueStatsEntity;
|
||||
@ -28,7 +30,6 @@ import org.thingsboard.server.dao.queue.QueueStatsDao;
|
||||
import org.thingsboard.server.dao.sql.JpaAbstractDao;
|
||||
import org.thingsboard.server.dao.util.SqlDao;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
@Slf4j
|
||||
@ -55,8 +56,8 @@ public class JpaQueueStatsDao extends JpaAbstractDao<QueueStatsEntity, QueueStat
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<QueueStats> findByTenantId(TenantId tenantId) {
|
||||
return DaoUtil.convertDataList(queueStatsRepository.findByTenantId(tenantId.getId()));
|
||||
public PageData<QueueStats> findByTenantId(TenantId tenantId, PageLink pageLink) {
|
||||
return DaoUtil.toPageData(queueStatsRepository.findByTenantId(tenantId.getId(), pageLink.getTextSearch(), DaoUtil.toPageable(pageLink)));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -15,6 +15,8 @@
|
||||
*/
|
||||
package org.thingsboard.server.dao.sql.queue;
|
||||
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Modifying;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
@ -22,14 +24,18 @@ import org.springframework.data.repository.query.Param;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.thingsboard.server.dao.model.sql.QueueStatsEntity;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public interface QueueStatsRepository extends JpaRepository<QueueStatsEntity, UUID> {
|
||||
|
||||
QueueStatsEntity findByTenantIdAndQueueNameAndServiceId(UUID tenantId, String queueName, String serviceId);
|
||||
|
||||
List<QueueStatsEntity> findByTenantId(UUID tenantId);
|
||||
@Query("SELECT q FROM QueueStatsEntity q WHERE q.tenantId = :tenantId " +
|
||||
"AND (:textSearch IS NULL OR ilike(q.queueName, CONCAT('%', :textSearch, '%')) = true " +
|
||||
"OR ilike(q.serviceId, CONCAT('%', :textSearch, '%')) = true)")
|
||||
Page<QueueStatsEntity> findByTenantId(@Param("tenantId") UUID tenantId,
|
||||
@Param("textSearch") String textSearch,
|
||||
Pageable pageable);
|
||||
|
||||
@Transactional
|
||||
@Modifying
|
||||
|
||||
@ -24,6 +24,8 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.thingsboard.server.common.data.StringUtils;
|
||||
import org.thingsboard.server.common.data.Tenant;
|
||||
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.queue.QueueStats;
|
||||
import org.thingsboard.server.dao.exception.DataValidationException;
|
||||
import org.thingsboard.server.dao.queue.QueueStatsService;
|
||||
@ -80,9 +82,9 @@ public class QueueStatsServiceTest extends AbstractServiceTest {
|
||||
QueueStats retrievedQueueStatsById2 = queueStatsService.findQueueStatsById(tenantId, savedQueueStats2.getId());
|
||||
Assert.assertEquals(retrievedQueueStatsById2.getQueueName(), secondQueueName);
|
||||
|
||||
List<QueueStats> queueStatsList = queueStatsService.findByTenantId(tenantId);
|
||||
Assert.assertEquals(2, queueStatsList.size());
|
||||
assertThat(queueStatsList).containsOnly(retrievedQueueStatsById, retrievedQueueStatsById2);
|
||||
PageData<QueueStats> queueStatsList = queueStatsService.findByTenantId(tenantId, new PageLink(10));
|
||||
Assert.assertEquals(2, queueStatsList.getData().size());
|
||||
assertThat(queueStatsList.getData()).containsOnly(retrievedQueueStatsById, retrievedQueueStatsById2);
|
||||
|
||||
queueStatsService.deleteByTenantId(tenantId);
|
||||
QueueStats retrievedQueueStatsAfterDelete = queueStatsService.findQueueStatsById(tenantId, savedQueueStats.getId());
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user