Don't send separate notification when notification clear rule is met
This commit is contained in:
parent
155c701822
commit
a70e20fe44
@ -54,7 +54,6 @@ import java.util.EnumMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@ -106,22 +105,11 @@ public class DefaultNotificationRuleProcessor implements NotificationRuleProcess
|
||||
log.debug("Processing notification rule '{}' for trigger type {}", rule.getName(), rule.getTriggerType());
|
||||
|
||||
if (matchesClearRule(trigger, triggerConfig)) {
|
||||
List<NotificationRequest> notificationRequests = findAlreadySentNotificationRequests(rule, trigger);
|
||||
if (notificationRequests.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
List<UUID> targets = notificationRequests.stream()
|
||||
.filter(NotificationRequest::isSent)
|
||||
.flatMap(notificationRequest -> notificationRequest.getTargets().stream())
|
||||
.distinct().collect(Collectors.toList());
|
||||
NotificationInfo notificationInfo = constructNotificationInfo(trigger, triggerConfig);
|
||||
submitNotificationRequest(targets, rule, trigger.getOriginatorEntityId(), notificationInfo, 0);
|
||||
|
||||
notificationRequests.forEach(notificationRequest -> {
|
||||
if (notificationRequest.isScheduled()) {
|
||||
notificationCenter.deleteNotificationRequest(rule.getTenantId(), notificationRequest.getId());
|
||||
}
|
||||
List<NotificationRequest> scheduledRequests = notificationRequestService.findNotificationRequestsByRuleIdAndOriginatorEntityIdAndStatus(
|
||||
rule.getTenantId(), rule.getId(), trigger.getOriginatorEntityId(), NotificationRequestStatus.SCHEDULED
|
||||
);
|
||||
scheduledRequests.forEach(notificationRequest -> {
|
||||
notificationCenter.deleteNotificationRequest(rule.getTenantId(), notificationRequest.getId());
|
||||
});
|
||||
return;
|
||||
}
|
||||
@ -139,10 +127,6 @@ public class DefaultNotificationRuleProcessor implements NotificationRuleProcess
|
||||
}
|
||||
}
|
||||
|
||||
private List<NotificationRequest> findAlreadySentNotificationRequests(NotificationRule rule, NotificationRuleTrigger trigger) {
|
||||
return notificationRequestService.findNotificationRequestsByRuleIdAndOriginatorEntityId(rule.getTenantId(), rule.getId(), trigger.getOriginatorEntityId());
|
||||
}
|
||||
|
||||
private void submitNotificationRequest(List<UUID> targets, NotificationRule rule,
|
||||
EntityId originatorEntityId, NotificationInfo notificationInfo, int delayInSec) {
|
||||
NotificationRequestConfig config = new NotificationRequestConfig();
|
||||
|
||||
@ -46,10 +46,10 @@ public class AlarmTriggerProcessor implements NotificationRuleTriggerProcessor<A
|
||||
if (triggerConfig.getNotifyOn().contains(AlarmAction.CREATED)) {
|
||||
return severityMatches(alarm, triggerConfig);
|
||||
}
|
||||
} else if (alarmUpdate.isSeverityChanged()) {
|
||||
} else if (alarmUpdate.isSeverityChanged()) {
|
||||
if (triggerConfig.getNotifyOn().contains(AlarmAction.SEVERITY_CHANGED)) {
|
||||
return severityMatches(alarmUpdate.getOld(), triggerConfig) || severityMatches(alarm, triggerConfig);
|
||||
} else {
|
||||
} else {
|
||||
// if we haven't yet sent notification about the alarm
|
||||
return !severityMatches(alarmUpdate.getOld(), triggerConfig) && severityMatches(alarm, triggerConfig);
|
||||
}
|
||||
|
||||
@ -274,7 +274,6 @@ public class NotificationRuleApiTest extends AbstractNotificationApiTest {
|
||||
Device device = createDevice("Device with alarm", "233");
|
||||
NotificationTarget target = createNotificationTarget(tenantAdminUserId);
|
||||
defaultNotifications.create(tenantId, DefaultNotifications.newAlarm, target.getId());
|
||||
defaultNotifications.create(tenantId, DefaultNotifications.entityAction, target.getId());
|
||||
notificationRulesCache.evict(tenantId);
|
||||
|
||||
Alarm alarm = new Alarm();
|
||||
@ -287,7 +286,7 @@ public class NotificationRuleApiTest extends AbstractNotificationApiTest {
|
||||
.pollDelay(2, TimeUnit.SECONDS)
|
||||
.untilAsserted(() -> {
|
||||
List<Notification> notifications = getMyNotifications(false, 10);
|
||||
assertThat(notifications).hasSize(1).first().matches(notification -> {
|
||||
assertThat(notifications).singleElement().matches(notification -> {
|
||||
return notification.getType() == NotificationType.ALARM &&
|
||||
notification.getSubject().equals("New alarm 'testAlarm'");
|
||||
});
|
||||
|
||||
@ -43,7 +43,7 @@ public interface NotificationRequestService {
|
||||
|
||||
List<NotificationRequestId> findNotificationRequestsIdsByStatusAndRuleId(TenantId tenantId, NotificationRequestStatus requestStatus, NotificationRuleId ruleId);
|
||||
|
||||
List<NotificationRequest> findNotificationRequestsByRuleIdAndOriginatorEntityId(TenantId tenantId, NotificationRuleId ruleId, EntityId originatorEntityId);
|
||||
List<NotificationRequest> findNotificationRequestsByRuleIdAndOriginatorEntityIdAndStatus(TenantId tenantId, NotificationRuleId ruleId, EntityId originatorEntityId, NotificationRequestStatus status);
|
||||
|
||||
void deleteNotificationRequest(TenantId tenantId, NotificationRequest request);
|
||||
|
||||
|
||||
@ -82,8 +82,8 @@ public class DefaultNotificationRequestService implements NotificationRequestSer
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NotificationRequest> findNotificationRequestsByRuleIdAndOriginatorEntityId(TenantId tenantId, NotificationRuleId ruleId, EntityId originatorEntityId) {
|
||||
return notificationRequestDao.findByRuleIdAndOriginatorEntityId(tenantId, ruleId, originatorEntityId);
|
||||
public List<NotificationRequest> findNotificationRequestsByRuleIdAndOriginatorEntityIdAndStatus(TenantId tenantId, NotificationRuleId ruleId, EntityId originatorEntityId, NotificationRequestStatus status) {
|
||||
return notificationRequestDao.findByRuleIdAndOriginatorEntityIdAndStatus(tenantId, ruleId, originatorEntityId, status);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -40,7 +40,7 @@ public interface NotificationRequestDao extends Dao<NotificationRequest> {
|
||||
|
||||
List<NotificationRequestId> findIdsByRuleId(TenantId tenantId, NotificationRequestStatus requestStatus, NotificationRuleId ruleId);
|
||||
|
||||
List<NotificationRequest> findByRuleIdAndOriginatorEntityId(TenantId tenantId, NotificationRuleId ruleId, EntityId originatorEntityId);
|
||||
List<NotificationRequest> findByRuleIdAndOriginatorEntityIdAndStatus(TenantId tenantId, NotificationRuleId ruleId, EntityId originatorEntityId, NotificationRequestStatus status);
|
||||
|
||||
PageData<NotificationRequest> findAllByStatus(NotificationRequestStatus status, PageLink pageLink);
|
||||
|
||||
|
||||
@ -73,8 +73,8 @@ public class JpaNotificationRequestDao extends JpaAbstractDao<NotificationReques
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NotificationRequest> findByRuleIdAndOriginatorEntityId(TenantId tenantId, NotificationRuleId ruleId, EntityId originatorEntityId) {
|
||||
return DaoUtil.convertDataList(notificationRequestRepository.findAllByRuleIdAndOriginatorEntityIdAndOriginatorEntityType(ruleId.getId(), originatorEntityId.getId(), originatorEntityId.getEntityType()));
|
||||
public List<NotificationRequest> findByRuleIdAndOriginatorEntityIdAndStatus(TenantId tenantId, NotificationRuleId ruleId, EntityId originatorEntityId, NotificationRequestStatus status) {
|
||||
return DaoUtil.convertDataList(notificationRequestRepository.findAllByRuleIdAndOriginatorEntityIdAndOriginatorEntityTypeAndStatus(ruleId.getId(), originatorEntityId.getId(), originatorEntityId.getEntityType(), status));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -54,7 +54,7 @@ public interface NotificationRequestRepository extends JpaRepository<Notificatio
|
||||
List<UUID> findAllIdsByStatusAndRuleId(@Param("status") NotificationRequestStatus status,
|
||||
@Param("ruleId") UUID ruleId);
|
||||
|
||||
List<NotificationRequestEntity> findAllByRuleIdAndOriginatorEntityIdAndOriginatorEntityType(UUID ruleId, UUID originatorEntityId, EntityType originatorEntityType);
|
||||
List<NotificationRequestEntity> findAllByRuleIdAndOriginatorEntityIdAndOriginatorEntityTypeAndStatus(UUID ruleId, UUID originatorEntityId, EntityType originatorEntityType, NotificationRequestStatus status);
|
||||
|
||||
Page<NotificationRequestEntity> findAllByStatus(NotificationRequestStatus status, Pageable pageable);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user