Commit 635086986b58a196eda7587c6a31fb8a70ddea61
Merge branch 'feature/edge' of github.com:volodymyr-babak/thingsboard into feature/edge
Showing
8 changed files
with
39 additions
and
16 deletions
@@ -61,7 +61,7 @@ public class EdgeEventController extends BaseController { | @@ -61,7 +61,7 @@ public class EdgeEventController extends BaseController { | ||
61 | EdgeId edgeId = new EdgeId(toUUID(strEdgeId)); | 61 | EdgeId edgeId = new EdgeId(toUUID(strEdgeId)); |
62 | checkEdgeId(edgeId, Operation.READ); | 62 | checkEdgeId(edgeId, Operation.READ); |
63 | TimePageLink pageLink = createPageLink(limit, startTime, endTime, ascOrder, offset); | 63 | TimePageLink pageLink = createPageLink(limit, startTime, endTime, ascOrder, offset); |
64 | - return checkNotNull(edgeEventService.findEdgeEvents(tenantId, edgeId, pageLink)); | 64 | + return checkNotNull(edgeEventService.findEdgeEvents(tenantId, edgeId, pageLink, false)); |
65 | } catch (Exception e) { | 65 | } catch (Exception e) { |
66 | throw handleException(e); | 66 | throw handleException(e); |
67 | } | 67 | } |
@@ -111,7 +111,7 @@ public class DefaultEdgeNotificationService implements EdgeNotificationService { | @@ -111,7 +111,7 @@ public class DefaultEdgeNotificationService implements EdgeNotificationService { | ||
111 | 111 | ||
112 | @Override | 112 | @Override |
113 | public TimePageData<EdgeEvent> findEdgeEvents(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink) { | 113 | public TimePageData<EdgeEvent> findEdgeEvents(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink) { |
114 | - return edgeEventService.findEdgeEvents(tenantId, edgeId, pageLink); | 114 | + return edgeEventService.findEdgeEvents(tenantId, edgeId, pageLink, true); |
115 | } | 115 | } |
116 | 116 | ||
117 | @Override | 117 | @Override |
@@ -16,9 +16,7 @@ | @@ -16,9 +16,7 @@ | ||
16 | package org.thingsboard.server.dao.edge; | 16 | package org.thingsboard.server.dao.edge; |
17 | 17 | ||
18 | import com.google.common.util.concurrent.ListenableFuture; | 18 | import com.google.common.util.concurrent.ListenableFuture; |
19 | -import org.thingsboard.server.common.data.EntityType; | ||
20 | import org.thingsboard.server.common.data.edge.EdgeEvent; | 19 | import org.thingsboard.server.common.data.edge.EdgeEvent; |
21 | -import org.thingsboard.server.common.data.edge.EdgeEventType; | ||
22 | import org.thingsboard.server.common.data.id.EdgeId; | 20 | import org.thingsboard.server.common.data.id.EdgeId; |
23 | import org.thingsboard.server.common.data.id.TenantId; | 21 | import org.thingsboard.server.common.data.id.TenantId; |
24 | import org.thingsboard.server.common.data.page.TimePageData; | 22 | import org.thingsboard.server.common.data.page.TimePageData; |
@@ -28,6 +26,5 @@ public interface EdgeEventService { | @@ -28,6 +26,5 @@ public interface EdgeEventService { | ||
28 | 26 | ||
29 | ListenableFuture<EdgeEvent> saveAsync(EdgeEvent edgeEvent); | 27 | ListenableFuture<EdgeEvent> saveAsync(EdgeEvent edgeEvent); |
30 | 28 | ||
31 | - TimePageData<EdgeEvent> findEdgeEvents(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink); | ||
32 | - | 29 | + TimePageData<EdgeEvent> findEdgeEvents(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink, boolean withTsUpdate); |
33 | } | 30 | } |
@@ -35,7 +35,7 @@ import java.util.List; | @@ -35,7 +35,7 @@ import java.util.List; | ||
35 | public class BaseEdgeEventService implements EdgeEventService { | 35 | public class BaseEdgeEventService implements EdgeEventService { |
36 | 36 | ||
37 | @Autowired | 37 | @Autowired |
38 | - public EdgeEventDao edgeEventDao; | 38 | + private EdgeEventDao edgeEventDao; |
39 | 39 | ||
40 | @Override | 40 | @Override |
41 | public ListenableFuture<EdgeEvent> saveAsync(EdgeEvent edgeEvent) { | 41 | public ListenableFuture<EdgeEvent> saveAsync(EdgeEvent edgeEvent) { |
@@ -44,8 +44,8 @@ public class BaseEdgeEventService implements EdgeEventService { | @@ -44,8 +44,8 @@ public class BaseEdgeEventService implements EdgeEventService { | ||
44 | } | 44 | } |
45 | 45 | ||
46 | @Override | 46 | @Override |
47 | - public TimePageData<EdgeEvent> findEdgeEvents(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink) { | ||
48 | - List<EdgeEvent> events = edgeEventDao.findEdgeEvents(tenantId.getId(), edgeId, pageLink); | 47 | + public TimePageData<EdgeEvent> findEdgeEvents(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink, boolean withTsUpdate) { |
48 | + List<EdgeEvent> events = edgeEventDao.findEdgeEvents(tenantId.getId(), edgeId, pageLink, withTsUpdate); | ||
49 | return new TimePageData<>(events, pageLink); | 49 | return new TimePageData<>(events, pageLink); |
50 | } | 50 | } |
51 | 51 |
@@ -53,7 +53,7 @@ public class CassandraEdgeEventDao extends CassandraAbstractSearchTimeDao<EdgeEv | @@ -53,7 +53,7 @@ public class CassandraEdgeEventDao extends CassandraAbstractSearchTimeDao<EdgeEv | ||
53 | } | 53 | } |
54 | 54 | ||
55 | @Override | 55 | @Override |
56 | - public List<EdgeEvent> findEdgeEvents(UUID tenantId, EdgeId edgeId, TimePageLink pageLink) { | 56 | + public List<EdgeEvent> findEdgeEvents(UUID tenantId, EdgeId edgeId, TimePageLink pageLink, boolean withTsUpdate) { |
57 | return null; | 57 | return null; |
58 | } | 58 | } |
59 | } | 59 | } |
@@ -46,6 +46,6 @@ public interface EdgeEventDao extends Dao<EdgeEvent> { | @@ -46,6 +46,6 @@ public interface EdgeEventDao extends Dao<EdgeEvent> { | ||
46 | * @param pageLink the pageLink | 46 | * @param pageLink the pageLink |
47 | * @return the event list | 47 | * @return the event list |
48 | */ | 48 | */ |
49 | - List<EdgeEvent> findEdgeEvents(UUID tenantId, EdgeId edgeId, TimePageLink pageLink); | 49 | + List<EdgeEvent> findEdgeEvents(UUID tenantId, EdgeId edgeId, TimePageLink pageLink, boolean withTsUpdate); |
50 | 50 | ||
51 | } | 51 | } |
@@ -26,6 +26,7 @@ import org.springframework.data.jpa.domain.Specification; | @@ -26,6 +26,7 @@ import org.springframework.data.jpa.domain.Specification; | ||
26 | import org.springframework.data.repository.CrudRepository; | 26 | import org.springframework.data.repository.CrudRepository; |
27 | import org.springframework.stereotype.Component; | 27 | import org.springframework.stereotype.Component; |
28 | import org.thingsboard.server.common.data.UUIDConverter; | 28 | import org.thingsboard.server.common.data.UUIDConverter; |
29 | +import org.thingsboard.server.common.data.audit.ActionType; | ||
29 | import org.thingsboard.server.common.data.edge.EdgeEvent; | 30 | import org.thingsboard.server.common.data.edge.EdgeEvent; |
30 | import org.thingsboard.server.common.data.id.EdgeEventId; | 31 | import org.thingsboard.server.common.data.id.EdgeEventId; |
31 | import org.thingsboard.server.common.data.id.EdgeId; | 32 | import org.thingsboard.server.common.data.id.EdgeId; |
@@ -75,9 +76,9 @@ public class JpaBaseEdgeEventDao extends JpaAbstractSearchTimeDao<EdgeEventEntit | @@ -75,9 +76,9 @@ public class JpaBaseEdgeEventDao extends JpaAbstractSearchTimeDao<EdgeEventEntit | ||
75 | } | 76 | } |
76 | 77 | ||
77 | @Override | 78 | @Override |
78 | - public List<EdgeEvent> findEdgeEvents(UUID tenantId, EdgeId edgeId, TimePageLink pageLink) { | 79 | + public List<EdgeEvent> findEdgeEvents(UUID tenantId, EdgeId edgeId, TimePageLink pageLink, boolean withTsUpdate) { |
79 | Specification<EdgeEventEntity> timeSearchSpec = JpaAbstractSearchTimeDao.getTimeSearchPageSpec(pageLink, "id"); | 80 | Specification<EdgeEventEntity> timeSearchSpec = JpaAbstractSearchTimeDao.getTimeSearchPageSpec(pageLink, "id"); |
80 | - Specification<EdgeEventEntity> fieldsSpec = getEntityFieldsSpec(tenantId, edgeId); | 81 | + Specification<EdgeEventEntity> fieldsSpec = getEntityFieldsSpec(tenantId, edgeId, withTsUpdate); |
81 | Sort.Direction sortDirection = pageLink.isAscOrder() ? Sort.Direction.ASC : Sort.Direction.DESC; | 82 | Sort.Direction sortDirection = pageLink.isAscOrder() ? Sort.Direction.ASC : Sort.Direction.DESC; |
82 | Pageable pageable = PageRequest.of(0, pageLink.getLimit(), sortDirection, ID_PROPERTY); | 83 | Pageable pageable = PageRequest.of(0, pageLink.getLimit(), sortDirection, ID_PROPERTY); |
83 | return DaoUtil.convertDataList(edgeEventRepository.findAll(Specification.where(timeSearchSpec).and(fieldsSpec), pageable).getContent()); | 84 | return DaoUtil.convertDataList(edgeEventRepository.findAll(Specification.where(timeSearchSpec).and(fieldsSpec), pageable).getContent()); |
@@ -95,7 +96,7 @@ public class JpaBaseEdgeEventDao extends JpaAbstractSearchTimeDao<EdgeEventEntit | @@ -95,7 +96,7 @@ public class JpaBaseEdgeEventDao extends JpaAbstractSearchTimeDao<EdgeEventEntit | ||
95 | return Optional.of(DaoUtil.getData(edgeEventRepository.save(entity))); | 96 | return Optional.of(DaoUtil.getData(edgeEventRepository.save(entity))); |
96 | } | 97 | } |
97 | 98 | ||
98 | - private Specification<EdgeEventEntity> getEntityFieldsSpec(UUID tenantId, EdgeId edgeId) { | 99 | + private Specification<EdgeEventEntity> getEntityFieldsSpec(UUID tenantId, EdgeId edgeId, boolean withTsUpdate) { |
99 | return (root, criteriaQuery, criteriaBuilder) -> { | 100 | return (root, criteriaQuery, criteriaBuilder) -> { |
100 | List<Predicate> predicates = new ArrayList<>(); | 101 | List<Predicate> predicates = new ArrayList<>(); |
101 | if (tenantId != null) { | 102 | if (tenantId != null) { |
@@ -106,6 +107,10 @@ public class JpaBaseEdgeEventDao extends JpaAbstractSearchTimeDao<EdgeEventEntit | @@ -106,6 +107,10 @@ public class JpaBaseEdgeEventDao extends JpaAbstractSearchTimeDao<EdgeEventEntit | ||
106 | Predicate entityIdPredicate = criteriaBuilder.equal(root.get("edgeId"), UUIDConverter.fromTimeUUID(edgeId.getId())); | 107 | Predicate entityIdPredicate = criteriaBuilder.equal(root.get("edgeId"), UUIDConverter.fromTimeUUID(edgeId.getId())); |
107 | predicates.add(entityIdPredicate); | 108 | predicates.add(entityIdPredicate); |
108 | } | 109 | } |
110 | + if (!withTsUpdate) { | ||
111 | + Predicate edgeEventActionPredicate = criteriaBuilder.notEqual(root.get("edgeEventAction"), ActionType.TIMESERIES_UPDATED.name()); | ||
112 | + predicates.add(edgeEventActionPredicate); | ||
113 | + } | ||
109 | return criteriaBuilder.and(predicates.toArray(new Predicate[]{})); | 114 | return criteriaBuilder.and(predicates.toArray(new Predicate[]{})); |
110 | }; | 115 | }; |
111 | } | 116 | } |
@@ -19,6 +19,7 @@ import com.datastax.driver.core.utils.UUIDs; | @@ -19,6 +19,7 @@ import com.datastax.driver.core.utils.UUIDs; | ||
19 | import org.junit.Assert; | 19 | import org.junit.Assert; |
20 | import org.junit.Test; | 20 | import org.junit.Test; |
21 | import org.thingsboard.server.common.data.DataConstants; | 21 | import org.thingsboard.server.common.data.DataConstants; |
22 | +import org.thingsboard.server.common.data.audit.ActionType; | ||
22 | import org.thingsboard.server.common.data.edge.EdgeEvent; | 23 | import org.thingsboard.server.common.data.edge.EdgeEvent; |
23 | import org.thingsboard.server.common.data.edge.EdgeEventType; | 24 | import org.thingsboard.server.common.data.edge.EdgeEventType; |
24 | import org.thingsboard.server.common.data.id.DeviceId; | 25 | import org.thingsboard.server.common.data.id.DeviceId; |
@@ -82,7 +83,7 @@ public abstract class BaseEdgeEventServiceTest extends AbstractServiceTest { | @@ -82,7 +83,7 @@ public abstract class BaseEdgeEventServiceTest extends AbstractServiceTest { | ||
82 | EdgeEvent savedEdgeEvent3 = saveEdgeEventWithProvidedTime(eventTime + 2, edgeId, deviceId, tenantId); | 83 | EdgeEvent savedEdgeEvent3 = saveEdgeEventWithProvidedTime(eventTime + 2, edgeId, deviceId, tenantId); |
83 | saveEdgeEventWithProvidedTime(timeAfterEndTime, edgeId, deviceId, tenantId); | 84 | saveEdgeEventWithProvidedTime(timeAfterEndTime, edgeId, deviceId, tenantId); |
84 | 85 | ||
85 | - TimePageData<EdgeEvent> edgeEvents = edgeEventService.findEdgeEvents(tenantId, edgeId, new TimePageLink(2, startTime, endTime, false)); | 86 | + TimePageData<EdgeEvent> edgeEvents = edgeEventService.findEdgeEvents(tenantId, edgeId, new TimePageLink(2, startTime, endTime, false), true); |
86 | 87 | ||
87 | Assert.assertNotNull(edgeEvents.getData()); | 88 | Assert.assertNotNull(edgeEvents.getData()); |
88 | Assert.assertTrue(edgeEvents.getData().size() == 2); | 89 | Assert.assertTrue(edgeEvents.getData().size() == 2); |
@@ -91,7 +92,7 @@ public abstract class BaseEdgeEventServiceTest extends AbstractServiceTest { | @@ -91,7 +92,7 @@ public abstract class BaseEdgeEventServiceTest extends AbstractServiceTest { | ||
91 | Assert.assertTrue(edgeEvents.hasNext()); | 92 | Assert.assertTrue(edgeEvents.hasNext()); |
92 | Assert.assertNotNull(edgeEvents.getNextPageLink()); | 93 | Assert.assertNotNull(edgeEvents.getNextPageLink()); |
93 | 94 | ||
94 | - edgeEvents = edgeEventService.findEdgeEvents(tenantId, edgeId, edgeEvents.getNextPageLink()); | 95 | + edgeEvents = edgeEventService.findEdgeEvents(tenantId, edgeId, edgeEvents.getNextPageLink(), true); |
95 | 96 | ||
96 | Assert.assertNotNull(edgeEvents.getData()); | 97 | Assert.assertNotNull(edgeEvents.getData()); |
97 | Assert.assertTrue(edgeEvents.getData().size() == 1); | 98 | Assert.assertTrue(edgeEvents.getData().size() == 1); |
@@ -100,6 +101,26 @@ public abstract class BaseEdgeEventServiceTest extends AbstractServiceTest { | @@ -100,6 +101,26 @@ public abstract class BaseEdgeEventServiceTest extends AbstractServiceTest { | ||
100 | Assert.assertNull(edgeEvents.getNextPageLink()); | 101 | Assert.assertNull(edgeEvents.getNextPageLink()); |
101 | } | 102 | } |
102 | 103 | ||
104 | + @Test | ||
105 | + public void findEdgeEventsWithTsUpdateAndWithout() throws Exception { | ||
106 | + EdgeId edgeId = new EdgeId(UUIDs.timeBased()); | ||
107 | + DeviceId deviceId = new DeviceId(UUIDs.timeBased()); | ||
108 | + TenantId tenantId = new TenantId(UUIDs.timeBased()); | ||
109 | + TimePageLink pageLink = new TimePageLink(1); | ||
110 | + | ||
111 | + EdgeEvent edgeEventWithTsUpdate = generateEdgeEvent(tenantId, edgeId, deviceId, ActionType.TIMESERIES_UPDATED.name()); | ||
112 | + edgeEventService.saveAsync(edgeEventWithTsUpdate); | ||
113 | + | ||
114 | + TimePageData<EdgeEvent> allEdgeEvents = edgeEventService.findEdgeEvents(tenantId, edgeId, pageLink, true); | ||
115 | + TimePageData<EdgeEvent> edgeEventsWithoutTsUpdate = edgeEventService.findEdgeEvents(tenantId, edgeId, pageLink, false); | ||
116 | + | ||
117 | + Assert.assertNotNull(allEdgeEvents.getData()); | ||
118 | + Assert.assertNotNull(edgeEventsWithoutTsUpdate.getData()); | ||
119 | + Assert.assertEquals(1, allEdgeEvents.getData().size()); | ||
120 | + Assert.assertEquals(allEdgeEvents.getData().get(0).getUuidId(), edgeEventWithTsUpdate.getUuidId()); | ||
121 | + Assert.assertTrue(edgeEventsWithoutTsUpdate.getData().isEmpty()); | ||
122 | + } | ||
123 | + | ||
103 | private EdgeEvent saveEdgeEventWithProvidedTime(long time, EdgeId edgeId, EntityId entityId, TenantId tenantId) throws Exception { | 124 | private EdgeEvent saveEdgeEventWithProvidedTime(long time, EdgeId edgeId, EntityId entityId, TenantId tenantId) throws Exception { |
104 | EdgeEvent edgeEvent = generateEdgeEvent(tenantId, edgeId, entityId, DataConstants.ENTITY_CREATED); | 125 | EdgeEvent edgeEvent = generateEdgeEvent(tenantId, edgeId, entityId, DataConstants.ENTITY_CREATED); |
105 | edgeEvent.setId(new EdgeEventId(UUIDs.startOf(time))); | 126 | edgeEvent.setId(new EdgeEventId(UUIDs.startOf(time))); |