From c4d7f52cf3e0c552286b1848074b0e6d2c1713b8 Mon Sep 17 00:00:00 2001 From: Bohdan Smetaniuk Date: Thu, 30 Jul 2020 19:46:33 +0300 Subject: [PATCH 1/3] filtering EdgeEvents with TIMESERIES_UPDATE --- .../server/controller/EdgeEventController.java | 2 +- .../thingsboard/server/dao/edge/EdgeEventService.java | 3 +-- .../server/dao/edge/BaseEdgeEventService.java | 9 +++++++-- .../server/dao/edge/CassandraEdgeEventDao.java | 2 +- .../org/thingsboard/server/dao/edge/EdgeEventDao.java | 2 +- .../server/dao/sql/edge/JpaBaseEdgeEventDao.java | 11 ++++++++--- 6 files changed, 19 insertions(+), 10 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/controller/EdgeEventController.java b/application/src/main/java/org/thingsboard/server/controller/EdgeEventController.java index 097b8d0f5c..15578b8593 100644 --- a/application/src/main/java/org/thingsboard/server/controller/EdgeEventController.java +++ b/application/src/main/java/org/thingsboard/server/controller/EdgeEventController.java @@ -61,7 +61,7 @@ public class EdgeEventController extends BaseController { EdgeId edgeId = new EdgeId(toUUID(strEdgeId)); checkEdgeId(edgeId, Operation.READ); TimePageLink pageLink = createPageLink(limit, startTime, endTime, ascOrder, offset); - return checkNotNull(edgeEventService.findEdgeEvents(tenantId, edgeId, pageLink)); + return checkNotNull(edgeEventService.findEdgeEvents(tenantId, edgeId, pageLink, false)); } catch (Exception e) { throw handleException(e); } diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/edge/EdgeEventService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/edge/EdgeEventService.java index 0d65c134f2..8ab877dd83 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/edge/EdgeEventService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/edge/EdgeEventService.java @@ -16,9 +16,7 @@ package org.thingsboard.server.dao.edge; import com.google.common.util.concurrent.ListenableFuture; -import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.edge.EdgeEvent; -import org.thingsboard.server.common.data.edge.EdgeEventType; import org.thingsboard.server.common.data.id.EdgeId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.TimePageData; @@ -30,4 +28,5 @@ public interface EdgeEventService { TimePageData findEdgeEvents(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink); + TimePageData findEdgeEvents(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink, boolean withTsUpdate); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/edge/BaseEdgeEventService.java b/dao/src/main/java/org/thingsboard/server/dao/edge/BaseEdgeEventService.java index 75bc3046c4..efb2c7198a 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/edge/BaseEdgeEventService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/edge/BaseEdgeEventService.java @@ -35,7 +35,7 @@ import java.util.List; public class BaseEdgeEventService implements EdgeEventService { @Autowired - public EdgeEventDao edgeEventDao; + private EdgeEventDao edgeEventDao; @Override public ListenableFuture saveAsync(EdgeEvent edgeEvent) { @@ -45,7 +45,12 @@ public class BaseEdgeEventService implements EdgeEventService { @Override public TimePageData findEdgeEvents(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink) { - List events = edgeEventDao.findEdgeEvents(tenantId.getId(), edgeId, pageLink); + return findEdgeEvents(tenantId, edgeId, pageLink, true); + } + + @Override + public TimePageData findEdgeEvents(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink, boolean withTsUpdate) { + List events = edgeEventDao.findEdgeEvents(tenantId.getId(), edgeId, pageLink, withTsUpdate); return new TimePageData<>(events, pageLink); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/edge/CassandraEdgeEventDao.java b/dao/src/main/java/org/thingsboard/server/dao/edge/CassandraEdgeEventDao.java index 8483197f1b..e127abad39 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/edge/CassandraEdgeEventDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/edge/CassandraEdgeEventDao.java @@ -53,7 +53,7 @@ public class CassandraEdgeEventDao extends CassandraAbstractSearchTimeDao findEdgeEvents(UUID tenantId, EdgeId edgeId, TimePageLink pageLink) { + public List findEdgeEvents(UUID tenantId, EdgeId edgeId, TimePageLink pageLink, boolean withTsUpdate) { return null; } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeEventDao.java b/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeEventDao.java index 426bada645..bf7b263e44 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeEventDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeEventDao.java @@ -46,6 +46,6 @@ public interface EdgeEventDao extends Dao { * @param pageLink the pageLink * @return the event list */ - List findEdgeEvents(UUID tenantId, EdgeId edgeId, TimePageLink pageLink); + List findEdgeEvents(UUID tenantId, EdgeId edgeId, TimePageLink pageLink, boolean withTsUpdate); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaBaseEdgeEventDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaBaseEdgeEventDao.java index 11a4a1dc64..4408b8ebae 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaBaseEdgeEventDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaBaseEdgeEventDao.java @@ -26,6 +26,7 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.UUIDConverter; +import org.thingsboard.server.common.data.audit.ActionType; import org.thingsboard.server.common.data.edge.EdgeEvent; import org.thingsboard.server.common.data.id.EdgeEventId; import org.thingsboard.server.common.data.id.EdgeId; @@ -75,9 +76,9 @@ public class JpaBaseEdgeEventDao extends JpaAbstractSearchTimeDao findEdgeEvents(UUID tenantId, EdgeId edgeId, TimePageLink pageLink) { + public List findEdgeEvents(UUID tenantId, EdgeId edgeId, TimePageLink pageLink, boolean withTsUpdate) { Specification timeSearchSpec = JpaAbstractSearchTimeDao.getTimeSearchPageSpec(pageLink, "id"); - Specification fieldsSpec = getEntityFieldsSpec(tenantId, edgeId); + Specification fieldsSpec = getEntityFieldsSpec(tenantId, edgeId, withTsUpdate); Sort.Direction sortDirection = pageLink.isAscOrder() ? Sort.Direction.ASC : Sort.Direction.DESC; Pageable pageable = PageRequest.of(0, pageLink.getLimit(), sortDirection, ID_PROPERTY); return DaoUtil.convertDataList(edgeEventRepository.findAll(Specification.where(timeSearchSpec).and(fieldsSpec), pageable).getContent()); @@ -95,7 +96,7 @@ public class JpaBaseEdgeEventDao extends JpaAbstractSearchTimeDao getEntityFieldsSpec(UUID tenantId, EdgeId edgeId) { + private Specification getEntityFieldsSpec(UUID tenantId, EdgeId edgeId, boolean withTsUpdate) { return (root, criteriaQuery, criteriaBuilder) -> { List predicates = new ArrayList<>(); if (tenantId != null) { @@ -106,6 +107,10 @@ public class JpaBaseEdgeEventDao extends JpaAbstractSearchTimeDao Date: Fri, 31 Jul 2020 11:38:25 +0300 Subject: [PATCH 2/3] fixes --- .../server/service/edge/DefaultEdgeNotificationService.java | 2 +- .../org/thingsboard/server/dao/edge/EdgeEventService.java | 2 -- .../thingsboard/server/dao/edge/BaseEdgeEventService.java | 5 ----- .../server/dao/service/BaseEdgeEventServiceTest.java | 4 ++-- 4 files changed, 3 insertions(+), 10 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/edge/DefaultEdgeNotificationService.java b/application/src/main/java/org/thingsboard/server/service/edge/DefaultEdgeNotificationService.java index 47c6ece48f..c90c05746f 100644 --- a/application/src/main/java/org/thingsboard/server/service/edge/DefaultEdgeNotificationService.java +++ b/application/src/main/java/org/thingsboard/server/service/edge/DefaultEdgeNotificationService.java @@ -111,7 +111,7 @@ public class DefaultEdgeNotificationService implements EdgeNotificationService { @Override public TimePageData findEdgeEvents(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink) { - return edgeEventService.findEdgeEvents(tenantId, edgeId, pageLink); + return edgeEventService.findEdgeEvents(tenantId, edgeId, pageLink, true); } @Override diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/edge/EdgeEventService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/edge/EdgeEventService.java index 8ab877dd83..1c65c34a08 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/edge/EdgeEventService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/edge/EdgeEventService.java @@ -26,7 +26,5 @@ public interface EdgeEventService { ListenableFuture saveAsync(EdgeEvent edgeEvent); - TimePageData findEdgeEvents(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink); - TimePageData findEdgeEvents(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink, boolean withTsUpdate); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/edge/BaseEdgeEventService.java b/dao/src/main/java/org/thingsboard/server/dao/edge/BaseEdgeEventService.java index efb2c7198a..08e5d2570f 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/edge/BaseEdgeEventService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/edge/BaseEdgeEventService.java @@ -43,11 +43,6 @@ public class BaseEdgeEventService implements EdgeEventService { return edgeEventDao.saveAsync(edgeEvent); } - @Override - public TimePageData findEdgeEvents(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink) { - return findEdgeEvents(tenantId, edgeId, pageLink, true); - } - @Override public TimePageData findEdgeEvents(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink, boolean withTsUpdate) { List events = edgeEventDao.findEdgeEvents(tenantId.getId(), edgeId, pageLink, withTsUpdate); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseEdgeEventServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseEdgeEventServiceTest.java index f4d622daa5..aa0a3c79e4 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseEdgeEventServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseEdgeEventServiceTest.java @@ -82,7 +82,7 @@ public abstract class BaseEdgeEventServiceTest extends AbstractServiceTest { EdgeEvent savedEdgeEvent3 = saveEdgeEventWithProvidedTime(eventTime + 2, edgeId, deviceId, tenantId); saveEdgeEventWithProvidedTime(timeAfterEndTime, edgeId, deviceId, tenantId); - TimePageData edgeEvents = edgeEventService.findEdgeEvents(tenantId, edgeId, new TimePageLink(2, startTime, endTime, false)); + TimePageData edgeEvents = edgeEventService.findEdgeEvents(tenantId, edgeId, new TimePageLink(2, startTime, endTime, false), true); Assert.assertNotNull(edgeEvents.getData()); Assert.assertTrue(edgeEvents.getData().size() == 2); @@ -91,7 +91,7 @@ public abstract class BaseEdgeEventServiceTest extends AbstractServiceTest { Assert.assertTrue(edgeEvents.hasNext()); Assert.assertNotNull(edgeEvents.getNextPageLink()); - edgeEvents = edgeEventService.findEdgeEvents(tenantId, edgeId, edgeEvents.getNextPageLink()); + edgeEvents = edgeEventService.findEdgeEvents(tenantId, edgeId, edgeEvents.getNextPageLink(), true); Assert.assertNotNull(edgeEvents.getData()); Assert.assertTrue(edgeEvents.getData().size() == 1); From c56c2c4c5d0b9c510e88ee4dfa1951c65bc363a6 Mon Sep 17 00:00:00 2001 From: Bohdan Smetaniuk Date: Fri, 31 Jul 2020 17:10:35 +0300 Subject: [PATCH 3/3] added test --- .../dao/service/BaseEdgeEventServiceTest.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseEdgeEventServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseEdgeEventServiceTest.java index aa0a3c79e4..5da642d254 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseEdgeEventServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseEdgeEventServiceTest.java @@ -19,6 +19,7 @@ import com.datastax.driver.core.utils.UUIDs; import org.junit.Assert; import org.junit.Test; import org.thingsboard.server.common.data.DataConstants; +import org.thingsboard.server.common.data.audit.ActionType; import org.thingsboard.server.common.data.edge.EdgeEvent; import org.thingsboard.server.common.data.edge.EdgeEventType; import org.thingsboard.server.common.data.id.DeviceId; @@ -100,6 +101,26 @@ public abstract class BaseEdgeEventServiceTest extends AbstractServiceTest { Assert.assertNull(edgeEvents.getNextPageLink()); } + @Test + public void findEdgeEventsWithTsUpdateAndWithout() throws Exception { + EdgeId edgeId = new EdgeId(UUIDs.timeBased()); + DeviceId deviceId = new DeviceId(UUIDs.timeBased()); + TenantId tenantId = new TenantId(UUIDs.timeBased()); + TimePageLink pageLink = new TimePageLink(1); + + EdgeEvent edgeEventWithTsUpdate = generateEdgeEvent(tenantId, edgeId, deviceId, ActionType.TIMESERIES_UPDATED.name()); + edgeEventService.saveAsync(edgeEventWithTsUpdate); + + TimePageData allEdgeEvents = edgeEventService.findEdgeEvents(tenantId, edgeId, pageLink, true); + TimePageData edgeEventsWithoutTsUpdate = edgeEventService.findEdgeEvents(tenantId, edgeId, pageLink, false); + + Assert.assertNotNull(allEdgeEvents.getData()); + Assert.assertNotNull(edgeEventsWithoutTsUpdate.getData()); + Assert.assertEquals(1, allEdgeEvents.getData().size()); + Assert.assertEquals(allEdgeEvents.getData().get(0).getUuidId(), edgeEventWithTsUpdate.getUuidId()); + Assert.assertTrue(edgeEventsWithoutTsUpdate.getData().isEmpty()); + } + private EdgeEvent saveEdgeEventWithProvidedTime(long time, EdgeId edgeId, EntityId entityId, TenantId tenantId) throws Exception { EdgeEvent edgeEvent = generateEdgeEvent(tenantId, edgeId, entityId, DataConstants.ENTITY_CREATED); edgeEvent.setId(new EdgeEventId(UUIDs.startOf(time)));