Browse Source

Alarm Query improvements

pull/3068/head
Andrii Shvaika 6 years ago
parent
commit
fe1d42a9be
  1. 1
      dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java
  2. 16
      dao/src/main/java/org/thingsboard/server/dao/sql/alarm/AlarmRepository.java
  3. 1
      dao/src/main/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java
  4. 12
      dao/src/main/java/org/thingsboard/server/dao/sql/query/DefaultAlarmQueryRepository.java
  5. 2
      dao/src/test/java/org/thingsboard/server/dao/SqlDaoServiceTestSuite.java
  6. 7
      dao/src/test/java/org/thingsboard/server/dao/service/BaseAlarmServiceTest.java

1
dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java

@ -176,7 +176,6 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ
} else {
propagatedEntitiesList = Collections.singletonList(alarm.getOriginator());
}
createAlarmRelation(alarm.getTenantId(), alarm.getOriginator(), alarm.getId());
return propagatedEntitiesList;
}

16
dao/src/main/java/org/thingsboard/server/dao/sql/alarm/AlarmRepository.java

@ -50,11 +50,10 @@ public interface AlarmRepository extends CrudRepository<AlarmEntity, UUID> {
@Query(value = "SELECT new org.thingsboard.server.dao.model.sql.AlarmInfoEntity(a) FROM AlarmEntity a, " +
"RelationEntity re " +
"WHERE a.tenantId = :tenantId " +
"AND a.id = re.toId AND re.toType = 'ALARM' " +
"AND re.relationTypeGroup = 'ALARM' " +
"AND re.relationType = :relationType " +
"AND (a.originatorId = :affectedEntityId or (a.id = re.toId " +
"AND re.relationTypeGroup = 'ALARM' AND re.toType = 'ALARM' " +
"AND re.fromId = :affectedEntityId " +
"AND re.fromType = :affectedEntityType " +
"AND re.fromType = :affectedEntityType)) " +
"AND (:startTime IS NULL OR a.createdTime >= :startTime) " +
"AND (:endTime IS NULL OR a.createdTime <= :endTime) " +
"AND (:alarmStatuses IS NULL OR a.status in :alarmStatuses) " +
@ -64,11 +63,10 @@ public interface AlarmRepository extends CrudRepository<AlarmEntity, UUID> {
countQuery = "SELECT count(a) FROM AlarmEntity a, " +
"RelationEntity re " +
"WHERE a.tenantId = :tenantId " +
"AND a.id = re.toId AND re.toType = 'ALARM' " +
"AND re.relationTypeGroup = 'ALARM' " +
"AND re.relationType = :relationType " +
"AND (a.originatorId = :affectedEntityId or (a.id = re.toId " +
"AND re.relationTypeGroup = 'ALARM' AND re.toType = 'ALARM' " +
"AND re.fromId = :affectedEntityId " +
"AND re.fromType = :affectedEntityType " +
"AND re.fromType = :affectedEntityType)) " +
"AND (:startTime IS NULL OR a.createdTime >= :startTime) " +
"AND (:endTime IS NULL OR a.createdTime <= :endTime) " +
"AND (:alarmStatuses IS NULL OR a.status in :alarmStatuses) " +
@ -78,12 +76,10 @@ public interface AlarmRepository extends CrudRepository<AlarmEntity, UUID> {
Page<AlarmInfoEntity> findAlarms(@Param("tenantId") UUID tenantId,
@Param("affectedEntityId") UUID affectedEntityId,
@Param("affectedEntityType") String affectedEntityType,
@Param("relationType") String relationType,
@Param("startTime") Long startTime,
@Param("endTime") Long endTime,
@Param("alarmStatuses") Set<AlarmStatus> alarmStatuses,
@Param("searchText") String searchText,
Pageable pageable);
}

1
dao/src/main/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java

@ -110,7 +110,6 @@ public class JpaAlarmDao extends JpaAbstractDao<AlarmEntity, Alarm> implements A
tenantId.getId(),
affectedEntity.getId(),
affectedEntity.getEntityType().name(),
AlarmSearchStatus.ANY.name(),
query.getPageLink().getStartTime(),
query.getPageLink().getEndTime(),
statusSet,

12
dao/src/main/java/org/thingsboard/server/dao/sql/query/DefaultAlarmQueryRepository.java

@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@ -101,7 +101,7 @@ public class DefaultAlarmQueryRepository implements AlarmQueryRepository {
" a.propagate_relation_types as propagate_relation_types, " +
" a.type as type," + SELECT_ORIGINATOR_NAME + ", ";
public static final String JOIN_RELATIONS = "left join relation r on r.relation_type_group = 'ALARM' and r.relation_type = 'ALARM_ANY' and a.id = r.to_id";
public static final String JOIN_RELATIONS = ", relation r";
@Autowired
protected NamedParameterJdbcTemplate jdbcTemplate;
@ -133,7 +133,7 @@ public class DefaultAlarmQueryRepository implements AlarmQueryRepository {
.append(" ").append(sortOrder.getDirection().name());
ctx.addUuidListParameter("entity_ids", orderedEntityIds.stream().map(EntityId::getId).collect(Collectors.toList()));
if (pageLink.isSearchPropagatedAlarms()) {
fromPart.append(" and r.from_id in (:entity_ids)");
wherePart.append(" and (a.originator_id in (:entity_ids) or (r.relation_type_group = 'ALARM' and r.relation_type = 'ALARM_ANY' and a.id = r.to_id and r.from_id in (:entity_ids)))");
} else {
addAndIfNeeded(wherePart, addAnd);
addAnd = true;
@ -219,6 +219,12 @@ public class DefaultAlarmQueryRepository implements AlarmQueryRepository {
dataQuery = String.format("%s limit %s offset %s", dataQuery, pageLink.getPageSize(), startIndex);
}
List<Map<String, Object>> rows = jdbcTemplate.queryForList(dataQuery, ctx);
log.error(dataQuery);
log.error("PARAMS:");
for (String param : ctx.getParameterNames()) {
log.error("PARAM: {}, VALUE: {}", param, ctx.getValue(param));
}
return AlarmDataAdapter.createAlarmData(pageLink, rows, totalElements, orderedEntityIds);
}

2
dao/src/test/java/org/thingsboard/server/dao/SqlDaoServiceTestSuite.java

@ -24,7 +24,7 @@ import java.util.Arrays;
@RunWith(ClasspathSuite.class)
@ClassnameFilters({
"org.thingsboard.server.dao.service.sql.*SqlTest"
"org.thingsboard.server.dao.service.sql.AlarmServiceSqlTest"
})
public class SqlDaoServiceTestSuite {

7
dao/src/test/java/org/thingsboard/server/dao/service/BaseAlarmServiceTest.java

@ -343,6 +343,9 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
pageLink.setStatusList(Arrays.asList(AlarmSearchStatus.ACTIVE));
alarms = alarmService.findAlarmDataByQueryForEntities(tenantId, new CustomerId(CustomerId.NULL_UUID), pageLink, Collections.singletonList(childId));
Assert.assertNotNull(alarms.getData());
Assert.assertEquals(1, alarms.getData().size());
Assert.assertEquals(created, alarms.getData().get(0));
// Check parent relation
pageLink.setPage(0);
@ -435,10 +438,10 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
Assert.assertEquals(created, alarms.getData().get(0));
List<EntityRelation> toAlarmRelations = relationService.findByTo(tenantId, created.getId(), RelationTypeGroup.ALARM);
Assert.assertEquals(2, toAlarmRelations.size());
Assert.assertEquals(1, toAlarmRelations.size());
List<EntityRelation> fromChildRelations = relationService.findByFrom(tenantId, childId, RelationTypeGroup.ALARM);
Assert.assertEquals(1, fromChildRelations.size());
Assert.assertEquals(0, fromChildRelations.size());
List<EntityRelation> fromParentRelations = relationService.findByFrom(tenantId, parentId, RelationTypeGroup.ALARM);
Assert.assertEquals(1, fromParentRelations.size());

Loading…
Cancel
Save