Commit 635086986b58a196eda7587c6a31fb8a70ddea61

Authored by Volodymyr Babak
2 parents 9980a72e c6e1b471

Merge branch 'feature/edge' of github.com:volodymyr-babak/thingsboard into feature/edge

... ... @@ -61,7 +61,7 @@ public class EdgeEventController extends BaseController {
61 61 EdgeId edgeId = new EdgeId(toUUID(strEdgeId));
62 62 checkEdgeId(edgeId, Operation.READ);
63 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 65 } catch (Exception e) {
66 66 throw handleException(e);
67 67 }
... ...
... ... @@ -111,7 +111,7 @@ public class DefaultEdgeNotificationService implements EdgeNotificationService {
111 111
112 112 @Override
113 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 117 @Override
... ...
... ... @@ -16,9 +16,7 @@
16 16 package org.thingsboard.server.dao.edge;
17 17
18 18 import com.google.common.util.concurrent.ListenableFuture;
19   -import org.thingsboard.server.common.data.EntityType;
20 19 import org.thingsboard.server.common.data.edge.EdgeEvent;
21   -import org.thingsboard.server.common.data.edge.EdgeEventType;
22 20 import org.thingsboard.server.common.data.id.EdgeId;
23 21 import org.thingsboard.server.common.data.id.TenantId;
24 22 import org.thingsboard.server.common.data.page.TimePageData;
... ... @@ -28,6 +26,5 @@ public interface EdgeEventService {
28 26
29 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 35 public class BaseEdgeEventService implements EdgeEventService {
36 36
37 37 @Autowired
38   - public EdgeEventDao edgeEventDao;
  38 + private EdgeEventDao edgeEventDao;
39 39
40 40 @Override
41 41 public ListenableFuture<EdgeEvent> saveAsync(EdgeEvent edgeEvent) {
... ... @@ -44,8 +44,8 @@ public class BaseEdgeEventService implements EdgeEventService {
44 44 }
45 45
46 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 49 return new TimePageData<>(events, pageLink);
50 50 }
51 51
... ...
... ... @@ -53,7 +53,7 @@ public class CassandraEdgeEventDao extends CassandraAbstractSearchTimeDao<EdgeEv
53 53 }
54 54
55 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 57 return null;
58 58 }
59 59 }
... ...
... ... @@ -46,6 +46,6 @@ public interface EdgeEventDao extends Dao<EdgeEvent> {
46 46 * @param pageLink the pageLink
47 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 26 import org.springframework.data.repository.CrudRepository;
27 27 import org.springframework.stereotype.Component;
28 28 import org.thingsboard.server.common.data.UUIDConverter;
  29 +import org.thingsboard.server.common.data.audit.ActionType;
29 30 import org.thingsboard.server.common.data.edge.EdgeEvent;
30 31 import org.thingsboard.server.common.data.id.EdgeEventId;
31 32 import org.thingsboard.server.common.data.id.EdgeId;
... ... @@ -75,9 +76,9 @@ public class JpaBaseEdgeEventDao extends JpaAbstractSearchTimeDao<EdgeEventEntit
75 76 }
76 77
77 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 80 Specification<EdgeEventEntity> timeSearchSpec = JpaAbstractSearchTimeDao.getTimeSearchPageSpec(pageLink, "id");
80   - Specification<EdgeEventEntity> fieldsSpec = getEntityFieldsSpec(tenantId, edgeId);
  81 + Specification<EdgeEventEntity> fieldsSpec = getEntityFieldsSpec(tenantId, edgeId, withTsUpdate);
81 82 Sort.Direction sortDirection = pageLink.isAscOrder() ? Sort.Direction.ASC : Sort.Direction.DESC;
82 83 Pageable pageable = PageRequest.of(0, pageLink.getLimit(), sortDirection, ID_PROPERTY);
83 84 return DaoUtil.convertDataList(edgeEventRepository.findAll(Specification.where(timeSearchSpec).and(fieldsSpec), pageable).getContent());
... ... @@ -95,7 +96,7 @@ public class JpaBaseEdgeEventDao extends JpaAbstractSearchTimeDao<EdgeEventEntit
95 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 100 return (root, criteriaQuery, criteriaBuilder) -> {
100 101 List<Predicate> predicates = new ArrayList<>();
101 102 if (tenantId != null) {
... ... @@ -106,6 +107,10 @@ public class JpaBaseEdgeEventDao extends JpaAbstractSearchTimeDao<EdgeEventEntit
106 107 Predicate entityIdPredicate = criteriaBuilder.equal(root.get("edgeId"), UUIDConverter.fromTimeUUID(edgeId.getId()));
107 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 114 return criteriaBuilder.and(predicates.toArray(new Predicate[]{}));
110 115 };
111 116 }
... ...
... ... @@ -19,6 +19,7 @@ import com.datastax.driver.core.utils.UUIDs;
19 19 import org.junit.Assert;
20 20 import org.junit.Test;
21 21 import org.thingsboard.server.common.data.DataConstants;
  22 +import org.thingsboard.server.common.data.audit.ActionType;
22 23 import org.thingsboard.server.common.data.edge.EdgeEvent;
23 24 import org.thingsboard.server.common.data.edge.EdgeEventType;
24 25 import org.thingsboard.server.common.data.id.DeviceId;
... ... @@ -82,7 +83,7 @@ public abstract class BaseEdgeEventServiceTest extends AbstractServiceTest {
82 83 EdgeEvent savedEdgeEvent3 = saveEdgeEventWithProvidedTime(eventTime + 2, edgeId, deviceId, tenantId);
83 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 88 Assert.assertNotNull(edgeEvents.getData());
88 89 Assert.assertTrue(edgeEvents.getData().size() == 2);
... ... @@ -91,7 +92,7 @@ public abstract class BaseEdgeEventServiceTest extends AbstractServiceTest {
91 92 Assert.assertTrue(edgeEvents.hasNext());
92 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 97 Assert.assertNotNull(edgeEvents.getData());
97 98 Assert.assertTrue(edgeEvents.getData().size() == 1);
... ... @@ -100,6 +101,26 @@ public abstract class BaseEdgeEventServiceTest extends AbstractServiceTest {
100 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 124 private EdgeEvent saveEdgeEventWithProvidedTime(long time, EdgeId edgeId, EntityId entityId, TenantId tenantId) throws Exception {
104 125 EdgeEvent edgeEvent = generateEdgeEvent(tenantId, edgeId, entityId, DataConstants.ENTITY_CREATED);
105 126 edgeEvent.setId(new EdgeEventId(UUIDs.startOf(time)));
... ...