diff --git a/engine/apps/alerts/migrations/0073_update_direct_paging_integration_non_default_routes.py b/engine/apps/alerts/migrations/0073_update_direct_paging_integration_non_default_routes.py new file mode 100644 index 0000000000..8696c6ad1a --- /dev/null +++ b/engine/apps/alerts/migrations/0073_update_direct_paging_integration_non_default_routes.py @@ -0,0 +1,56 @@ +# Generated by Django 4.2.17 on 2025-01-06 15:48 + +import logging + +from django.db import migrations +from django.db.models import Subquery, OuterRef + +logger = logging.getLogger(__name__) + + +def update_direct_paging_integration_non_default_routes(apps, schema_editor): + """ + If any of the original Direct Paging integration default routes had chatops settings or escalation chains + associated with them, simply set the non-default route to have the same settings. This will avoid any functional + differences should users start paging a team using the "important" functionality. + """ + ChannelFilter = apps.get_model("alerts", "ChannelFilter") + + logger.info("Starting update_direct_paging_integration_non_default_routes migration...") + + # Subquery that selects the matching "default" channel filter for each non-default filter + default_route_subquery = ChannelFilter.objects.filter( + alert_receive_channel=OuterRef("alert_receive_channel"), + is_default=True + ) + + # Perform a bulk update on all non-default routes in one go + updated_count = ( + ChannelFilter.objects + .filter( + alert_receive_channel__integration="direct_paging", + is_default=False + ) + .update( + escalation_chain_id=Subquery(default_route_subquery.values("escalation_chain_id")[:1]), + telegram_channel_id=Subquery(default_route_subquery.values("telegram_channel_id")[:1]), + notify_in_telegram=Subquery(default_route_subquery.values("notify_in_telegram")[:1]), + slack_channel_id=Subquery(default_route_subquery.values("slack_channel_id")[:1]), + notify_in_slack=Subquery(default_route_subquery.values("notify_in_slack")[:1]), + notification_backends=Subquery(default_route_subquery.values("notification_backends")[:1]), + ) + ) + + logger.info(f"Updated {updated_count} non-default direct paging integration routes") + logger.info("Finished update_direct_paging_integration_non_default_routes migration.") + + +class Migration(migrations.Migration): + + dependencies = [ + ("alerts", "0072_upsert_direct_paging_integration_routes"), + ] + + operations = [ + migrations.RunPython(update_direct_paging_integration_non_default_routes, migrations.RunPython.noop), + ]