2022-06-03 08:09:47 -06:00
|
|
|
from celery.utils.log import get_task_logger
|
|
|
|
|
from django.conf import settings
|
|
|
|
|
|
2024-01-31 15:54:50 -07:00
|
|
|
from apps.alerts.signals import alert_group_action_triggered_signal
|
2023-09-19 09:41:47 +01:00
|
|
|
from apps.slack.errors import SlackAPIRatelimitError
|
2022-06-03 08:09:47 -06:00
|
|
|
from common.custom_celery_tasks import shared_dedicated_queue_retry_task
|
|
|
|
|
|
|
|
|
|
logger = get_task_logger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@shared_dedicated_queue_retry_task(
|
|
|
|
|
autoretry_for=(Exception,), retry_backoff=True, max_retries=1 if settings.DEBUG else None
|
|
|
|
|
)
|
2024-01-31 15:54:50 -07:00
|
|
|
def delete_alert_group(alert_group_pk: int, user_pk: int) -> None:
|
2023-07-25 10:43:23 +01:00
|
|
|
from apps.alerts.models import AlertGroup
|
|
|
|
|
from apps.user_management.models import User
|
|
|
|
|
|
2023-07-18 13:48:34 +02:00
|
|
|
alert_group = AlertGroup.objects.filter(pk=alert_group_pk).first()
|
2022-06-03 08:09:47 -06:00
|
|
|
if not alert_group:
|
|
|
|
|
logger.debug("Alert group not found, skipping delete_alert_group")
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
user = User.objects.filter(pk=user_pk).first()
|
|
|
|
|
if not user:
|
|
|
|
|
logger.debug("User not found, skipping delete_alert_group")
|
|
|
|
|
return
|
|
|
|
|
|
2023-12-11 12:16:00 -05:00
|
|
|
logger.debug(f"User {user} is deleting alert group {alert_group} (channel: {alert_group.channel})")
|
2024-01-31 15:54:50 -07:00
|
|
|
alert_group.delete_by_user(user)
|
2023-12-11 12:16:00 -05:00
|
|
|
|
2024-01-31 15:54:50 -07:00
|
|
|
|
|
|
|
|
@shared_dedicated_queue_retry_task(
|
|
|
|
|
autoretry_for=(Exception,), retry_backoff=True, max_retries=1 if settings.DEBUG else None
|
|
|
|
|
)
|
|
|
|
|
def send_alert_group_signal_for_delete(alert_group_pk: int, log_record_pk: int) -> None:
|
2023-09-19 09:41:47 +01:00
|
|
|
try:
|
2024-01-31 15:54:50 -07:00
|
|
|
alert_group_action_triggered_signal.send(
|
|
|
|
|
sender=send_alert_group_signal_for_delete,
|
|
|
|
|
log_record=log_record_pk,
|
|
|
|
|
force_sync=True,
|
|
|
|
|
)
|
2023-09-19 09:41:47 +01:00
|
|
|
except SlackAPIRatelimitError as e:
|
|
|
|
|
# Handle Slack API ratelimit raised in apps.slack.scenarios.distribute_alerts.DeleteGroupStep.process_signal
|
2024-01-31 15:54:50 -07:00
|
|
|
send_alert_group_signal_for_delete.apply_async((alert_group_pk, log_record_pk), countdown=e.retry_after)
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
finish_delete_alert_group.apply_async((alert_group_pk,))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@shared_dedicated_queue_retry_task(
|
|
|
|
|
autoretry_for=(Exception,), retry_backoff=True, max_retries=1 if settings.DEBUG else None
|
|
|
|
|
)
|
|
|
|
|
def finish_delete_alert_group(alert_group_pk: int) -> None:
|
|
|
|
|
from apps.alerts.models import AlertGroup
|
|
|
|
|
|
|
|
|
|
alert_group = AlertGroup.objects.filter(pk=alert_group_pk).first()
|
|
|
|
|
if not alert_group:
|
|
|
|
|
logger.debug(f"Alert group id={alert_group_pk} not found, already deleted")
|
|
|
|
|
return
|
|
|
|
|
alert_group.finish_delete_by_user()
|