From af99d62a323047abcbeb3fda6ed620176261285d Mon Sep 17 00:00:00 2001 From: Joey Orlando Date: Mon, 8 Jul 2024 13:04:16 -0400 Subject: [PATCH] fix failing e2e tests --- .../incident_log_builder.py | 2 +- engine/apps/alerts/tasks/notify_group.py | 2 +- engine/apps/alerts/tasks/notify_user.py | 20 +++++++++---- engine/apps/user_management/models/user.py | 28 +++++++++++-------- 4 files changed, 34 insertions(+), 18 deletions(-) diff --git a/engine/apps/alerts/incident_log_builder/incident_log_builder.py b/engine/apps/alerts/incident_log_builder/incident_log_builder.py index 4dcf586a..27f484f5 100644 --- a/engine/apps/alerts/incident_log_builder/incident_log_builder.py +++ b/engine/apps/alerts/incident_log_builder/incident_log_builder.py @@ -670,7 +670,7 @@ class IncidentLogBuilder: # last passed step order + 1 notification_policy_order = last_user_log.notification_policy.order + 1 - notification_policies = user_to_notify.get_notification_policies_or_use_default_fallback(important=important) + _, notification_policies = user_to_notify.get_notification_policies_or_use_default_fallback(important=important) for notification_policy in notification_policies: future_notification = notification_policy.order >= notification_policy_order diff --git a/engine/apps/alerts/tasks/notify_group.py b/engine/apps/alerts/tasks/notify_group.py index 6787c040..e38cdeab 100644 --- a/engine/apps/alerts/tasks/notify_group.py +++ b/engine/apps/alerts/tasks/notify_group.py @@ -83,7 +83,7 @@ def notify_group_task(alert_group_pk, escalation_policy_snapshot_order=None): continue important = escalation_policy_step == EscalationPolicy.STEP_NOTIFY_GROUP_IMPORTANT - notification_policies = user.get_notification_policies_or_use_default_fallback(important=important) + _, notification_policies = user.get_notification_policies_or_use_default_fallback(important=important) if notification_policies: usergroup_notification_plan += "\n_{} (".format( diff --git a/engine/apps/alerts/tasks/notify_user.py b/engine/apps/alerts/tasks/notify_user.py index 1f7b7c1c..b3377f9e 100644 --- a/engine/apps/alerts/tasks/notify_user.py +++ b/engine/apps/alerts/tasks/notify_user.py @@ -70,9 +70,13 @@ def notify_user_task( ) user_has_notification = UserHasNotification.objects.filter(pk=user_has_notification.pk).select_for_update()[0] + using_fallback_default_notification_policy_step = False if previous_notification_policy_pk is None: - notification_policies = user.get_notification_policies_or_use_default_fallback(important=important) + ( + using_fallback_default_notification_policy_step, + notification_policies, + ) = user.get_notification_policies_or_use_default_fallback(important=important) if not notification_policies: task_logger.info( f"notify_user_task: Failed to notify. No notification policies. user_id={user_pk} alert_group_id={alert_group_pk} important={important}" @@ -115,9 +119,15 @@ def notify_user_task( ) return reason = None + + def _create_user_notification_policy_log_record(**kwargs): + if using_fallback_default_notification_policy_step and "notification_policy" in kwargs: + kwargs["notification_policy"] = None + return UserNotificationPolicyLogRecord(**kwargs) + if notification_policy is None: stop_escalation = True - log_record = UserNotificationPolicyLogRecord( + log_record = _create_user_notification_policy_log_record( author=user, type=UserNotificationPolicyLogRecord.TYPE_PERSONAL_NOTIFICATION_FINISHED, notification_policy=notification_policy, @@ -146,7 +156,7 @@ def notify_user_task( else: delay_in_seconds = 0 countdown = delay_in_seconds - log_record = UserNotificationPolicyLogRecord( + log_record = _create_user_notification_policy_log_record( author=user, type=UserNotificationPolicyLogRecord.TYPE_PERSONAL_NOTIFICATION_TRIGGERED, notification_policy=notification_policy, @@ -160,7 +170,7 @@ def notify_user_task( notification_policy.notify_by == UserNotificationPolicy.NotificationChannel.SLACK ) if user_to_be_notified_in_slack and alert_group.notify_in_slack_enabled is False: - log_record = UserNotificationPolicyLogRecord( + log_record = _create_user_notification_policy_log_record( author=user, type=UserNotificationPolicyLogRecord.TYPE_PERSONAL_NOTIFICATION_FAILED, notification_policy=notification_policy, @@ -172,7 +182,7 @@ def notify_user_task( notification_error_code=UserNotificationPolicyLogRecord.ERROR_NOTIFICATION_POSTING_TO_SLACK_IS_DISABLED, ) else: - log_record = UserNotificationPolicyLogRecord( + log_record = _create_user_notification_policy_log_record( author=user, type=UserNotificationPolicyLogRecord.TYPE_PERSONAL_NOTIFICATION_TRIGGERED, notification_policy=notification_policy, diff --git a/engine/apps/user_management/models/user.py b/engine/apps/user_management/models/user.py index b7d99200..f0c382c8 100644 --- a/engine/apps/user_management/models/user.py +++ b/engine/apps/user_management/models/user.py @@ -415,23 +415,29 @@ class User(models.Model): def get_notification_policies_or_use_default_fallback( self, important=False - ) -> typing.List["UserNotificationPolicy"]: + ) -> typing.Tuple[bool, typing.List["UserNotificationPolicy"]]: """ If the user has no notification policies defined, fallback to using e-mail as the notification channel. """ from apps.base.models import UserNotificationPolicy if not self.notification_policies.filter(important=important).exists(): - return [ - UserNotificationPolicy( - user=self, - step=UserNotificationPolicy.Step.NOTIFY, - notify_by=settings.EMAIL_BACKEND_INTERNAL_ID, - important=important, - order=0, - ), - ] - return list(self.notification_policies.filter(important=important).all()) + return ( + True, + [ + UserNotificationPolicy( + user=self, + step=UserNotificationPolicy.Step.NOTIFY, + notify_by=settings.EMAIL_BACKEND_INTERNAL_ID, + important=important, + order=0, + ), + ], + ) + return ( + False, + list(self.notification_policies.filter(important=important).all()), + ) def update_alert_group_table_selected_columns(self, columns: typing.List[AlertGroupTableColumn]) -> None: if self.alert_group_table_selected_columns != columns: