Merge branch 'feature/edge' of github.com:volodymyr-babak/thingsboard into feature/edge
This commit is contained in:
		
						commit
						635086986b
					
				@ -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);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -111,7 +111,7 @@ public class DefaultEdgeNotificationService implements EdgeNotificationService {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public TimePageData<EdgeEvent> findEdgeEvents(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink) {
 | 
			
		||||
        return edgeEventService.findEdgeEvents(tenantId, edgeId, pageLink);
 | 
			
		||||
        return edgeEventService.findEdgeEvents(tenantId, edgeId, pageLink, true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -28,6 +26,5 @@ public interface EdgeEventService {
 | 
			
		||||
 | 
			
		||||
    ListenableFuture<EdgeEvent> saveAsync(EdgeEvent edgeEvent);
 | 
			
		||||
 | 
			
		||||
    TimePageData<EdgeEvent> findEdgeEvents(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink);
 | 
			
		||||
 | 
			
		||||
    TimePageData<EdgeEvent> findEdgeEvents(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink, boolean withTsUpdate);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -35,7 +35,7 @@ import java.util.List;
 | 
			
		||||
public class BaseEdgeEventService implements EdgeEventService {
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    public EdgeEventDao edgeEventDao;
 | 
			
		||||
    private EdgeEventDao edgeEventDao;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public ListenableFuture<EdgeEvent> saveAsync(EdgeEvent edgeEvent) {
 | 
			
		||||
@ -44,8 +44,8 @@ public class BaseEdgeEventService implements EdgeEventService {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public TimePageData<EdgeEvent> findEdgeEvents(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink) {
 | 
			
		||||
        List<EdgeEvent> events = edgeEventDao.findEdgeEvents(tenantId.getId(), edgeId, pageLink);
 | 
			
		||||
    public TimePageData<EdgeEvent> findEdgeEvents(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink, boolean withTsUpdate) {
 | 
			
		||||
        List<EdgeEvent> events = edgeEventDao.findEdgeEvents(tenantId.getId(), edgeId, pageLink, withTsUpdate);
 | 
			
		||||
        return new TimePageData<>(events, pageLink);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -53,7 +53,7 @@ public class CassandraEdgeEventDao extends CassandraAbstractSearchTimeDao<EdgeEv
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<EdgeEvent> findEdgeEvents(UUID tenantId, EdgeId edgeId, TimePageLink pageLink) {
 | 
			
		||||
    public List<EdgeEvent> findEdgeEvents(UUID tenantId, EdgeId edgeId, TimePageLink pageLink, boolean withTsUpdate) {
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -46,6 +46,6 @@ public interface EdgeEventDao extends Dao<EdgeEvent> {
 | 
			
		||||
     * @param pageLink the pageLink
 | 
			
		||||
     * @return the event list
 | 
			
		||||
     */
 | 
			
		||||
    List<EdgeEvent> findEdgeEvents(UUID tenantId, EdgeId edgeId, TimePageLink pageLink);
 | 
			
		||||
    List<EdgeEvent> findEdgeEvents(UUID tenantId, EdgeId edgeId, TimePageLink pageLink, boolean withTsUpdate);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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<EdgeEventEntit
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<EdgeEvent> findEdgeEvents(UUID tenantId, EdgeId edgeId, TimePageLink pageLink) {
 | 
			
		||||
    public List<EdgeEvent> findEdgeEvents(UUID tenantId, EdgeId edgeId, TimePageLink pageLink, boolean withTsUpdate) {
 | 
			
		||||
        Specification<EdgeEventEntity> timeSearchSpec = JpaAbstractSearchTimeDao.getTimeSearchPageSpec(pageLink, "id");
 | 
			
		||||
        Specification<EdgeEventEntity> fieldsSpec = getEntityFieldsSpec(tenantId, edgeId);
 | 
			
		||||
        Specification<EdgeEventEntity> 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<EdgeEventEntit
 | 
			
		||||
        return Optional.of(DaoUtil.getData(edgeEventRepository.save(entity)));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private Specification<EdgeEventEntity> getEntityFieldsSpec(UUID tenantId, EdgeId edgeId) {
 | 
			
		||||
    private Specification<EdgeEventEntity> getEntityFieldsSpec(UUID tenantId, EdgeId edgeId, boolean withTsUpdate) {
 | 
			
		||||
        return (root, criteriaQuery, criteriaBuilder) -> {
 | 
			
		||||
            List<Predicate> predicates = new ArrayList<>();
 | 
			
		||||
            if (tenantId != null) {
 | 
			
		||||
@ -106,6 +107,10 @@ public class JpaBaseEdgeEventDao extends JpaAbstractSearchTimeDao<EdgeEventEntit
 | 
			
		||||
                Predicate entityIdPredicate = criteriaBuilder.equal(root.get("edgeId"), UUIDConverter.fromTimeUUID(edgeId.getId()));
 | 
			
		||||
                predicates.add(entityIdPredicate);
 | 
			
		||||
            }
 | 
			
		||||
            if (!withTsUpdate) {
 | 
			
		||||
                Predicate edgeEventActionPredicate = criteriaBuilder.notEqual(root.get("edgeEventAction"), ActionType.TIMESERIES_UPDATED.name());
 | 
			
		||||
                predicates.add(edgeEventActionPredicate);
 | 
			
		||||
            }
 | 
			
		||||
            return criteriaBuilder.and(predicates.toArray(new Predicate[]{}));
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -82,7 +83,7 @@ public abstract class BaseEdgeEventServiceTest extends AbstractServiceTest {
 | 
			
		||||
        EdgeEvent savedEdgeEvent3 = saveEdgeEventWithProvidedTime(eventTime + 2, edgeId, deviceId, tenantId);
 | 
			
		||||
        saveEdgeEventWithProvidedTime(timeAfterEndTime, edgeId, deviceId, tenantId);
 | 
			
		||||
 | 
			
		||||
        TimePageData<EdgeEvent> edgeEvents = edgeEventService.findEdgeEvents(tenantId, edgeId, new TimePageLink(2, startTime, endTime, false));
 | 
			
		||||
        TimePageData<EdgeEvent> edgeEvents = edgeEventService.findEdgeEvents(tenantId, edgeId, new TimePageLink(2, startTime, endTime, false), true);
 | 
			
		||||
 | 
			
		||||
        Assert.assertNotNull(edgeEvents.getData());
 | 
			
		||||
        Assert.assertTrue(edgeEvents.getData().size() == 2);
 | 
			
		||||
@ -91,7 +92,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);
 | 
			
		||||
@ -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<EdgeEvent> allEdgeEvents = edgeEventService.findEdgeEvents(tenantId, edgeId, pageLink, true);
 | 
			
		||||
        TimePageData<EdgeEvent> 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)));
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user