Browse Source

added a method to get only the last IN debug event

pull/10355/head
IrynaMatveieva 2 years ago
parent
commit
d67fd993bb
  1. 15
      application/src/main/java/org/thingsboard/server/controller/RuleChainController.java
  2. 2
      common/dao-api/src/main/java/org/thingsboard/server/dao/event/EventService.java
  3. 9
      dao/src/main/java/org/thingsboard/server/dao/event/BaseEventService.java
  4. 9
      dao/src/main/java/org/thingsboard/server/dao/event/EventDao.java
  5. 5
      dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java
  6. 4
      dao/src/main/java/org/thingsboard/server/dao/sql/event/RuleNodeDebugEventRepository.java
  7. 27
      dao/src/test/java/org/thingsboard/server/dao/service/event/BaseEventServiceTest.java
  8. 30
      dao/src/test/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDaoTest.java

15
application/src/main/java/org/thingsboard/server/controller/RuleChainController.java

@ -45,7 +45,6 @@ import org.thingsboard.server.actors.tenant.DebugTbRateLimits;
import org.thingsboard.server.common.data.EventInfo;
import org.thingsboard.server.common.data.StringUtils;
import org.thingsboard.server.common.data.edge.Edge;
import org.thingsboard.server.common.data.event.EventType;
import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.common.data.id.EdgeId;
import org.thingsboard.server.common.data.id.RuleChainId;
@ -340,18 +339,8 @@ public class RuleChainController extends BaseController {
RuleNodeId ruleNodeId = new RuleNodeId(toUUID(strRuleNodeId));
checkRuleNode(ruleNodeId, Operation.READ);
TenantId tenantId = getCurrentUser().getTenantId();
List<EventInfo> events = eventService.findLatestEvents(tenantId, ruleNodeId, EventType.DEBUG_RULE_NODE, 2);
JsonNode result = null;
if (events != null) {
for (EventInfo event : events) {
JsonNode body = event.getBody();
if (body.has("type") && body.get("type").asText().equals("IN")) {
result = body;
break;
}
}
}
return result;
EventInfo eventInfo = eventService.findLatestDebugRuleNodeInEvent(tenantId, ruleNodeId);
return eventInfo.getBody();
}
@ApiOperation(value = "Is TBEL script executor enabled",

2
common/dao-api/src/main/java/org/thingsboard/server/dao/event/EventService.java

@ -35,6 +35,8 @@ public interface EventService {
List<EventInfo> findLatestEvents(TenantId tenantId, EntityId entityId, EventType eventType, int limit);
EventInfo findLatestDebugRuleNodeInEvent(TenantId tenantId, EntityId entityId);
PageData<EventInfo> findEventsByFilter(TenantId tenantId, EntityId entityId, EventFilter eventFilter, TimePageLink pageLink);
void removeEvents(TenantId tenantId, EntityId entityId);

9
dao/src/main/java/org/thingsboard/server/dao/event/BaseEventService.java

@ -106,6 +106,11 @@ public class BaseEventService implements EventService {
return convert(entityId.getEntityType(), eventDao.findLatestEvents(tenantId.getId(), entityId.getId(), eventType, limit));
}
@Override
public EventInfo findLatestDebugRuleNodeInEvent(TenantId tenantId, EntityId entityId) {
return convert(entityId.getEntityType(), eventDao.findLatestDebugRuleNodeInEvent(tenantId.getId(), entityId.getId()));
}
@Override
public PageData<EventInfo> findEventsByFilter(TenantId tenantId, EntityId entityId, EventFilter eventFilter, TimePageLink pageLink) {
return convert(entityId.getEntityType(), eventDao.findEventByFilter(tenantId.getId(), entityId.getId(), eventFilter, pageLink));
@ -140,4 +145,8 @@ public class BaseEventService implements EventService {
return list == null ? null : list.stream().map(e -> e.toInfo(entityType)).collect(Collectors.toList());
}
private EventInfo convert(EntityType entityType, Event event) {
return event == null ? null : event.toInfo(entityType);
}
}

9
dao/src/main/java/org/thingsboard/server/dao/event/EventDao.java

@ -62,6 +62,15 @@ public interface EventDao {
*/
List<? extends Event> findLatestEvents(UUID tenantId, UUID entityId, EventType eventType, int limit);
/**
* Find latest debug IN event by tenantId, entityId.
*
* @param tenantId the tenantId
* @param entityId the entityId
* @return the latest debug IN event
*/
Event findLatestDebugRuleNodeInEvent(UUID tenantId, UUID entityId);
/**
* Executes stored procedure to cleanup old events. Uses separate ttl for debug and other events.
* @param regularEventExpTs the expiration time of the regular events

5
dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java

@ -392,6 +392,11 @@ public class JpaBaseEventDao implements EventDao {
return DaoUtil.convertDataList(getEventRepository(eventType).findLatestEvents(tenantId, entityId, limit));
}
@Override
public Event findLatestDebugRuleNodeInEvent(UUID tenantId, UUID entityId) {
return DaoUtil.getData(ruleNodeDebugEventRepository.findLatestDebugRuleNodeInEvent(tenantId, entityId));
}
@Override
public void cleanupEvents(long regularEventExpTs, long debugEventExpTs, boolean cleanupDb) {
if (regularEventExpTs > 0) {

4
dao/src/main/java/org/thingsboard/server/dao/sql/event/RuleNodeDebugEventRepository.java

@ -26,6 +26,7 @@ import org.thingsboard.server.common.data.event.RuleNodeDebugEvent;
import org.thingsboard.server.dao.model.sql.RuleNodeDebugEventEntity;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
@ -35,6 +36,9 @@ public interface RuleNodeDebugEventRepository extends EventRepository<RuleNodeDe
@Query(nativeQuery = true, value = "SELECT * FROM rule_node_debug_event e WHERE e.tenant_id = :tenantId AND e.entity_id = :entityId ORDER BY e.ts DESC LIMIT :limit")
List<RuleNodeDebugEventEntity> findLatestEvents(@Param("tenantId") UUID tenantId, @Param("entityId") UUID entityId, @Param("limit") int limit);
@Query(nativeQuery = true, value = "SELECT * FROM rule_node_debug_event e WHERE e.tenant_id = :tenantId AND e.entity_id = :entityId AND e.e_type = 'IN' ORDER BY e.ts DESC LIMIT 1")
Optional<RuleNodeDebugEventEntity> findLatestDebugRuleNodeInEvent(@Param("tenantId") UUID tenantId, @Param("entityId") UUID entityId);
@Override
@Query("SELECT e FROM RuleNodeDebugEventEntity e WHERE " +
"e.tenantId = :tenantId " +

27
dao/src/test/java/org/thingsboard/server/dao/service/event/BaseEventServiceTest.java

@ -132,6 +132,22 @@ public abstract class BaseEventServiceTest extends AbstractServiceTest {
eventService.cleanupEvents(timeBeforeStartTime - 1, timeAfterEndTime + 1, true);
}
@Test
public void findLatestDebugRuleNodeInEvent() {
CustomerId customerId = new CustomerId(Uuids.timeBased());
TenantId tenantId = TenantId.fromUUID(Uuids.timeBased());
Event event1 = saveDebugEvent(customerId, tenantId);
Event event2 = saveDebugEvent(customerId, tenantId);
EventInfo event = eventService.findLatestDebugRuleNodeInEvent(tenantId, customerId);
Assert.assertNotNull(event);
Assert.assertEquals(event2.getUuidId(), event.getUuidId());
eventService.cleanupEvents(timeBeforeStartTime - 1, timeAfterEndTime + 1, true);
}
private Event saveEventWithProvidedTime(long time, EntityId entityId, TenantId tenantId) throws Exception {
RuleNodeDebugEvent event = generateEvent(tenantId, entityId);
event.setId(new EventId(Uuids.timeBased()));
@ -139,4 +155,15 @@ public abstract class BaseEventServiceTest extends AbstractServiceTest {
eventService.saveAsync(event).get();
return event;
}
private Event saveDebugEvent(EntityId entityId, TenantId tenantId) {
Event event = RuleNodeDebugEvent.builder()
.tenantId(tenantId)
.entityId(entityId.getId())
.serviceId("server A")
.eventType("IN")
.build();
eventService.saveAsync(event);
return event;
}
}

30
dao/src/test/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDaoTest.java

@ -27,6 +27,7 @@ import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.TimePageLink;
import org.thingsboard.server.dao.AbstractJpaDaoTest;
import org.thingsboard.server.dao.event.EventDao;
import org.thingsboard.server.dao.model.sql.RuleNodeDebugEventEntity;
import java.util.List;
import java.util.UUID;
@ -42,6 +43,10 @@ public class JpaBaseEventDaoTest extends AbstractJpaDaoTest {
@Autowired
private EventDao eventDao;
@Autowired
private RuleNodeDebugEventRepository ruleNodeDebugEventRepository;
UUID tenantId = Uuids.timeBased();
@ -106,6 +111,22 @@ public class JpaBaseEventDaoTest extends AbstractJpaDaoTest {
}
@Test
public void findLatestDebugRuleNodeInEvent() {
UUID entityId = Uuids.timeBased();
RuleNodeDebugEventEntity event = getDebugEventEntity(Uuids.timeBased(), tenantId, entityId);
eventDao.saveAsync(event.toData());
RuleNodeDebugEventEntity event2 = getDebugEventEntity(Uuids.timeBased(), tenantId, entityId);
eventDao.saveAsync(event2.toData());
RuleNodeDebugEventEntity foundEvent = ruleNodeDebugEventRepository.findLatestDebugRuleNodeInEvent(tenantId, entityId).get();
assertNotNull("Events expected to be not null", foundEvent);
assertEquals(event2.getEventType(), foundEvent.getEventType());
assertEquals(event2.getId(), foundEvent.getId());
}
private Event getStatsEvent(UUID eventId, UUID tenantId, UUID entityId) {
StatisticsEvent.StatisticsEventBuilder event = StatisticsEvent.builder();
event.id(eventId);
@ -117,4 +138,13 @@ public class JpaBaseEventDaoTest extends AbstractJpaDaoTest {
event.errorsOccurred(0);
return event.build();
}
private RuleNodeDebugEventEntity getDebugEventEntity(UUID eventId, UUID tenantId, UUID entityId) {
RuleNodeDebugEventEntity event = new RuleNodeDebugEventEntity();
event.setId(eventId);
event.setEventType("IN");
event.setEntityId(entityId);
event.setTenantId(tenantId);
return event;
}
}

Loading…
Cancel
Save