Skip user notification if alert group is already resolved (#5145)
Sometimes a task is queued and scheduled for later (or for a retry too), but the alert group is resolved by then. Skip notification in that case.
This commit is contained in:
parent
8f55a9eb4d
commit
b79c5d0c1c
2 changed files with 46 additions and 0 deletions
|
|
@ -419,6 +419,20 @@ def perform_notification(log_record_pk, use_default_notification_policy_fallback
|
|||
).save()
|
||||
return
|
||||
|
||||
if alert_group.resolved:
|
||||
# skip notification if alert group was resolved
|
||||
UserNotificationPolicyLogRecord(
|
||||
author=user,
|
||||
type=UserNotificationPolicyLogRecord.TYPE_PERSONAL_NOTIFICATION_FAILED,
|
||||
notification_policy=notification_policy,
|
||||
reason="Skipped notification because alert group is resolved",
|
||||
alert_group=alert_group,
|
||||
notification_step=notification_policy.step if notification_policy else None,
|
||||
notification_channel=notification_channel,
|
||||
notification_error_code=None,
|
||||
).save()
|
||||
return
|
||||
|
||||
if notification_channel == UserNotificationPolicy.NotificationChannel.SMS:
|
||||
phone_backend = PhoneBackend()
|
||||
phone_backend.notify_by_sms(user, alert_group, notification_policy)
|
||||
|
|
|
|||
|
|
@ -186,6 +186,38 @@ def test_notify_user_error_if_viewer(
|
|||
assert error_log_record.notification_error_code == UserNotificationPolicyLogRecord.ERROR_NOTIFICATION_FORBIDDEN
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_notify_user_perform_notification_skip_if_resolved(
|
||||
make_organization,
|
||||
make_user,
|
||||
make_user_notification_policy,
|
||||
make_alert_receive_channel,
|
||||
make_alert_group,
|
||||
make_user_notification_policy_log_record,
|
||||
):
|
||||
organization = make_organization()
|
||||
user_1 = make_user(organization=organization, _verified_phone_number="1234567890")
|
||||
user_notification_policy = make_user_notification_policy(
|
||||
user=user_1,
|
||||
step=UserNotificationPolicy.Step.NOTIFY,
|
||||
notify_by=UserNotificationPolicy.NotificationChannel.SMS,
|
||||
)
|
||||
alert_receive_channel = make_alert_receive_channel(organization=organization)
|
||||
alert_group = make_alert_group(alert_receive_channel=alert_receive_channel, resolved=True)
|
||||
log_record = make_user_notification_policy_log_record(
|
||||
author=user_1,
|
||||
alert_group=alert_group,
|
||||
notification_policy=user_notification_policy,
|
||||
type=UserNotificationPolicyLogRecord.TYPE_PERSONAL_NOTIFICATION_TRIGGERED,
|
||||
)
|
||||
|
||||
perform_notification(log_record.pk, False)
|
||||
|
||||
error_log_record = UserNotificationPolicyLogRecord.objects.last()
|
||||
assert error_log_record.type == UserNotificationPolicyLogRecord.TYPE_PERSONAL_NOTIFICATION_FAILED
|
||||
assert error_log_record.reason == "Skipped notification because alert group is resolved"
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@pytest.mark.parametrize(
|
||||
"reason_to_skip_escalation,error_code",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue