findHighestAlarmStatus: code cleaning

This commit is contained in:
AndrewVolostnykhThingsboard 2021-01-27 12:16:43 +02:00
parent 581bb536f5
commit beeade8b07
5 changed files with 16 additions and 24 deletions

View File

@ -19,16 +19,18 @@ import com.google.common.util.concurrent.ListenableFuture;
import org.thingsboard.server.common.data.alarm.Alarm; import org.thingsboard.server.common.data.alarm.Alarm;
import org.thingsboard.server.common.data.alarm.AlarmInfo; import org.thingsboard.server.common.data.alarm.AlarmInfo;
import org.thingsboard.server.common.data.alarm.AlarmQuery; import org.thingsboard.server.common.data.alarm.AlarmQuery;
import org.thingsboard.server.common.data.alarm.AlarmSeverity;
import org.thingsboard.server.common.data.alarm.AlarmStatus;
import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.query.AlarmData; import org.thingsboard.server.common.data.query.AlarmData;
import org.thingsboard.server.common.data.query.AlarmDataPageLink;
import org.thingsboard.server.common.data.query.AlarmDataQuery; import org.thingsboard.server.common.data.query.AlarmDataQuery;
import org.thingsboard.server.dao.Dao; import org.thingsboard.server.dao.Dao;
import java.util.Collection; import java.util.Collection;
import java.util.Set;
import java.util.UUID; import java.util.UUID;
/** /**
@ -48,4 +50,6 @@ public interface AlarmDao extends Dao<Alarm> {
PageData<AlarmData> findAlarmDataByQueryForEntities(TenantId tenantId, CustomerId customerId, PageData<AlarmData> findAlarmDataByQueryForEntities(TenantId tenantId, CustomerId customerId,
AlarmDataQuery query, Collection<EntityId> orderedEntityIds); AlarmDataQuery query, Collection<EntityId> orderedEntityIds);
Set<AlarmSeverity> findAlarmSeverities(TenantId tenantId, EntityId entityId, Set<AlarmStatus> status);
} }

View File

@ -52,7 +52,6 @@ import org.thingsboard.server.dao.entity.AbstractEntityService;
import org.thingsboard.server.dao.entity.EntityService; import org.thingsboard.server.dao.entity.EntityService;
import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.exception.DataValidationException;
import org.thingsboard.server.dao.service.DataValidator; import org.thingsboard.server.dao.service.DataValidator;
import org.thingsboard.server.dao.sql.alarm.AlarmRepository;
import org.thingsboard.server.dao.tenant.TenantDao; import org.thingsboard.server.dao.tenant.TenantDao;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -61,7 +60,6 @@ import javax.annotation.PreDestroy;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@ -89,9 +87,6 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ
@Autowired @Autowired
private EntityService entityService; private EntityService entityService;
@Autowired
private AlarmRepository alarmRepository;
protected ExecutorService readResultsProcessingExecutor; protected ExecutorService readResultsProcessingExecutor;
@PostConstruct @PostConstruct
@ -327,7 +322,7 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ
statusList = Collections.singleton(alarmStatus); statusList = Collections.singleton(alarmStatus);
} }
List<AlarmSeverity> alarmSeverities = alarmRepository.findHighestAlarmSeverity(tenantId.getId(), entityId.getId(), statusList); Set<AlarmSeverity> alarmSeverities = alarmDao.findAlarmSeverities(tenantId, entityId, statusList);
return alarmSeverities.stream().min(AlarmSeverity::compareTo).orElse(null); return alarmSeverities.stream().min(AlarmSeverity::compareTo).orElse(null);
} }
@ -336,16 +331,6 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ
return new AlarmDataQuery(new DeviceTypeFilter(), pageLink, null, null, null, Collections.EMPTY_LIST); return new AlarmDataQuery(new DeviceTypeFilter(), pageLink, null, null, null, Collections.EMPTY_LIST);
} }
private AlarmSeverity detectHighestSeverity(List<AlarmData> alarms) {
if (!alarms.isEmpty()) {
List<AlarmInfo> sorted = new ArrayList(alarms);
sorted.sort(Comparator.comparing(Alarm::getSeverity));
return sorted.get(0).getSeverity();
} else {
return null;
}
}
private void deleteRelation(TenantId tenantId, EntityRelation alarmRelation) { private void deleteRelation(TenantId tenantId, EntityRelation alarmRelation) {
log.debug("Deleting Alarm relation: {}", alarmRelation); log.debug("Deleting Alarm relation: {}", alarmRelation);
relationService.deleteRelation(tenantId, alarmRelation); relationService.deleteRelation(tenantId, alarmRelation);

View File

@ -80,7 +80,7 @@ public interface AlarmRepository extends CrudRepository<AlarmEntity, UUID> {
" WHERE alarm.tenantId = :tenantId" + " WHERE alarm.tenantId = :tenantId" +
" AND alarm.originatorId = :entityId" + " AND alarm.originatorId = :entityId" +
" AND ((:status) IS NULL OR alarm.status in (:status))") " AND ((:status) IS NULL OR alarm.status in (:status))")
List<AlarmSeverity> findHighestAlarmSeverity(@Param("tenantId") UUID tenantId, Set<AlarmSeverity> findAlarmSeverities(@Param("tenantId") UUID tenantId,
@Param("entityId") UUID entityId, @Param("entityId") UUID entityId,
@Param("status") Set<AlarmStatus> status); @Param("status") Set<AlarmStatus> status);

View File

@ -24,6 +24,7 @@ import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.alarm.Alarm; import org.thingsboard.server.common.data.alarm.Alarm;
import org.thingsboard.server.common.data.alarm.AlarmInfo; import org.thingsboard.server.common.data.alarm.AlarmInfo;
import org.thingsboard.server.common.data.alarm.AlarmQuery; import org.thingsboard.server.common.data.alarm.AlarmQuery;
import org.thingsboard.server.common.data.alarm.AlarmSeverity;
import org.thingsboard.server.common.data.alarm.AlarmStatus; import org.thingsboard.server.common.data.alarm.AlarmStatus;
import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.EntityId;
@ -120,4 +121,9 @@ public class JpaAlarmDao extends JpaAbstractDao<AlarmEntity, Alarm> implements A
public PageData<AlarmData> findAlarmDataByQueryForEntities(TenantId tenantId, CustomerId customerId, AlarmDataQuery query, Collection<EntityId> orderedEntityIds) { public PageData<AlarmData> findAlarmDataByQueryForEntities(TenantId tenantId, CustomerId customerId, AlarmDataQuery query, Collection<EntityId> orderedEntityIds) {
return alarmQueryRepository.findAlarmDataByQueryForEntities(tenantId, customerId, query, orderedEntityIds); return alarmQueryRepository.findAlarmDataByQueryForEntities(tenantId, customerId, query, orderedEntityIds);
} }
@Override
public Set<AlarmSeverity> findAlarmSeverities(TenantId tenantId, EntityId entityId, Set<AlarmStatus> status) {
return alarmRepository.findAlarmSeverities(tenantId.getId(), entityId.getId(), status);
}
} }

View File

@ -368,38 +368,35 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
customerDevice.setCustomerId(customer.getId()); customerDevice.setCustomerId(customer.getId());
customerDevice = deviceService.saveDevice(customerDevice); customerDevice = deviceService.saveDevice(customerDevice);
long ts = System.currentTimeMillis();
Alarm alarm1 = Alarm.builder() Alarm alarm1 = Alarm.builder()
.tenantId(tenantId) .tenantId(tenantId)
.originator(customerDevice.getId()) .originator(customerDevice.getId())
.type(TEST_ALARM) .type(TEST_ALARM)
.severity(AlarmSeverity.MAJOR) .severity(AlarmSeverity.MAJOR)
.status(AlarmStatus.ACTIVE_UNACK) .status(AlarmStatus.ACTIVE_UNACK)
.startTs(ts) .startTs(System.currentTimeMillis())
.build(); .build();
alarm1 = alarmService.createOrUpdateAlarm(alarm1).getAlarm(); alarm1 = alarmService.createOrUpdateAlarm(alarm1).getAlarm();
alarmService.clearAlarm(tenantId, alarm1.getId(), null, System.currentTimeMillis()).get(); alarmService.clearAlarm(tenantId, alarm1.getId(), null, System.currentTimeMillis()).get();
ts = System.currentTimeMillis();
Alarm alarm2 = Alarm.builder() Alarm alarm2 = Alarm.builder()
.tenantId(tenantId) .tenantId(tenantId)
.originator(customerDevice.getId()) .originator(customerDevice.getId())
.type(TEST_ALARM) .type(TEST_ALARM)
.severity(AlarmSeverity.MINOR) .severity(AlarmSeverity.MINOR)
.status(AlarmStatus.ACTIVE_ACK) .status(AlarmStatus.ACTIVE_ACK)
.startTs(ts) .startTs(System.currentTimeMillis())
.build(); .build();
alarm2 = alarmService.createOrUpdateAlarm(alarm2).getAlarm(); alarm2 = alarmService.createOrUpdateAlarm(alarm2).getAlarm();
alarmService.clearAlarm(tenantId, alarm2.getId(), null, System.currentTimeMillis()).get(); alarmService.clearAlarm(tenantId, alarm2.getId(), null, System.currentTimeMillis()).get();
ts = System.currentTimeMillis();
Alarm alarm3 = Alarm.builder() Alarm alarm3 = Alarm.builder()
.tenantId(tenantId) .tenantId(tenantId)
.originator(customerDevice.getId()) .originator(customerDevice.getId())
.type(TEST_ALARM) .type(TEST_ALARM)
.severity(AlarmSeverity.CRITICAL) .severity(AlarmSeverity.CRITICAL)
.status(AlarmStatus.ACTIVE_ACK) .status(AlarmStatus.ACTIVE_ACK)
.startTs(ts) .startTs(System.currentTimeMillis())
.build(); .build();
alarm3 = alarmService.createOrUpdateAlarm(alarm3).getAlarm(); alarm3 = alarmService.createOrUpdateAlarm(alarm3).getAlarm();