oncall-engine/engine/apps/webhooks/tasks/alert_group_status.py
Joey Orlando 9cc74e5b67
remove references to AlertGroup.is_archived and AlertGroup.unarchived_objects (#2524)
# What this PR does

This is a follow up to #2502 which started to remove logic to
"archiving" alert groups. This PR:
- removes all references to `AlertGroup.is_archived` and marks the
column as deprecated. We will remove it in the next release
- removes the `AlertGroup.unarchived_objects` `Manager`
- renames the `AlertGroup.all_objects` `Manager` to `AlertGroup.objects`

## Checklist

- [x] Unit, integration, and e2e (if applicable) tests updated
- [ ] Documentation added (or `pr:no public docs` PR label added if not
required)
- [x] `CHANGELOG.md` updated (or `pr:no changelog` PR label added if not
required)
2023-07-18 11:48:34 +00:00

71 lines
2.4 KiB
Python

import logging
from celery.utils.log import get_task_logger
from django.conf import settings
from apps.alerts.models import AlertGroup, AlertGroupLogRecord
from apps.webhooks.models import Webhook
from common.custom_celery_tasks import shared_dedicated_queue_retry_task
from .trigger_webhook import send_webhook_event
logger = get_task_logger(__name__)
logger.setLevel(logging.DEBUG)
MAX_RETRIES = 10
ACTION_TO_TRIGGER_TYPE = {
AlertGroupLogRecord.TYPE_ACK: Webhook.TRIGGER_ACKNOWLEDGE,
AlertGroupLogRecord.TYPE_RESOLVED: Webhook.TRIGGER_RESOLVE,
AlertGroupLogRecord.TYPE_SILENCE: Webhook.TRIGGER_SILENCE,
AlertGroupLogRecord.TYPE_UN_SILENCE: Webhook.TRIGGER_UNSILENCE,
AlertGroupLogRecord.TYPE_UN_RESOLVED: Webhook.TRIGGER_UNRESOLVE,
AlertGroupLogRecord.TYPE_UN_ACK: Webhook.TRIGGER_UNACKNOWLEDGE,
}
@shared_dedicated_queue_retry_task(
bind=True, autoretry_for=(Exception,), retry_backoff=True, max_retries=1 if settings.DEBUG else MAX_RETRIES
)
def alert_group_created(self, alert_group_id):
try:
alert_group = AlertGroup.objects.get(pk=alert_group_id)
except AlertGroup.DoesNotExist:
return
trigger_type = Webhook.TRIGGER_ALERT_GROUP_CREATED
organization_id = alert_group.channel.organization_id
webhooks = Webhook.objects.filter(trigger_type=trigger_type, organization_id=organization_id)
# check if there are any webhooks before going on
if not webhooks:
return
send_webhook_event.apply_async((trigger_type, alert_group_id), kwargs={"organization_id": organization_id})
@shared_dedicated_queue_retry_task(
bind=True, autoretry_for=(Exception,), retry_backoff=True, max_retries=1 if settings.DEBUG else MAX_RETRIES
)
def alert_group_status_change(self, action_type, alert_group_id, user_id):
try:
alert_group = AlertGroup.objects.get(pk=alert_group_id)
except AlertGroup.DoesNotExist:
return
trigger_type = ACTION_TO_TRIGGER_TYPE.get(action_type)
if trigger_type is None:
return
organization_id = alert_group.channel.organization_id
webhooks = Webhook.objects.filter(trigger_type=trigger_type, organization_id=organization_id)
# check if there are any webhooks before going on
if not webhooks:
return
send_webhook_event.apply_async(
(trigger_type, alert_group_id),
kwargs={"organization_id": organization_id, "user_id": user_id},
)