diff --git a/engine/common/tests/test_task_queue_assignment.py b/engine/common/tests/test_task_queue_assignment.py new file mode 100644 index 00000000..1acb5a0a --- /dev/null +++ b/engine/common/tests/test_task_queue_assignment.py @@ -0,0 +1,35 @@ +from celery import current_app + +from settings.celery_task_routes import CELERY_TASK_ROUTES + +""" +If a task has a legitimate reason to not have a queue assignment it can +be added here (In development, in process of deprecation, etc.) if possible +we should avoid @shared_dedicated_queue_retry_task or @shared_task and +remove entirely if it is not needed. +""" +COMMON_IGNORED_TASKS = { + "apps.mobile_app.tasks.new_alert_group.notify_user_async", + "apps.alerts.tasks.create_contact_points_for_datasource.schedule_create_contact_points_for_datasource", + "common.oncall_gateway.tasks.create_slack_connector_async_v2", +} + + +def check_celery_task_route_mapping(task_ids, ignored_prefixes, additional_ignored_tasks=None): + tasks = set(k for k in current_app.tasks.keys() if not k.startswith(ignored_prefixes)) + tasks -= set(COMMON_IGNORED_TASKS) + if additional_ignored_tasks: + tasks -= set(additional_ignored_tasks) + tasks -= set(task_ids) + if tasks: + print(f"Unassigned queue for celery task {tasks}") + assert len(tasks) == 0 + + +def test_celery_task_route_mapping(): + """ + If this test does not pass make sure you have added any newly added + @shared_dedicated_queue_retry_task or @shared_task to CELERY_TASK_ROUTES + in engine/settings/celery_task_routes.py + """ + check_celery_task_route_mapping(CELERY_TASK_ROUTES.keys(), ("extensions", "celery")) diff --git a/engine/settings/celery_task_routes.py b/engine/settings/celery_task_routes.py new file mode 100644 index 00000000..2e4f6e4d --- /dev/null +++ b/engine/settings/celery_task_routes.py @@ -0,0 +1,167 @@ +CELERY_TASK_ROUTES = { + # DEFAULT + "apps.alerts.tasks.create_contact_points_for_datasource.create_contact_points_for_datasource": {"queue": "default"}, + "apps.alerts.tasks.sync_grafana_alerting_contact_points.disconnect_integration_from_alerting_contact_points": { + "queue": "default" + }, + "apps.alerts.tasks.sync_grafana_alerting_contact_points.sync_grafana_alerting_contact_points": {"queue": "default"}, + "apps.alerts.tasks.delete_alert_group.delete_alert_group": {"queue": "default"}, + "apps.alerts.tasks.invalidate_web_cache_for_alert_group.invalidate_web_cache_for_alert_group": {"queue": "default"}, + "apps.alerts.tasks.send_alert_group_signal.send_alert_group_signal": {"queue": "default"}, + "apps.alerts.tasks.wipe.wipe": {"queue": "default"}, + "common.oncall_gateway.tasks.create_oncall_connector_async": {"queue": "default"}, + "common.oncall_gateway.tasks.delete_oncall_connector_async": {"queue": "default"}, + "common.oncall_gateway.tasks.create_slack_connector_async": {"queue": "default"}, + "common.oncall_gateway.tasks.delete_slack_connector_async": {"queue": "default"}, + "common.oncall_gateway.tasks.delete_slack_connector_async_v2": {"queue": "default"}, + "apps.heartbeat.tasks.integration_heartbeat_checkup": {"queue": "default"}, + "apps.heartbeat.tasks.process_heartbeat_task": {"queue": "default"}, + "apps.metrics_exporter.tasks.start_calculate_and_cache_metrics": {"queue": "default"}, + "apps.metrics_exporter.tasks.start_recalculation_for_new_metric": {"queue": "default"}, + "apps.metrics_exporter.tasks.save_organizations_ids_in_cache": {"queue": "default"}, + "apps.mobile_app.tasks.new_shift_swap_request.notify_shift_swap_requests": {"queue": "default"}, + "apps.mobile_app.tasks.new_shift_swap_request.notify_shift_swap_request": {"queue": "default"}, + "apps.mobile_app.tasks.new_shift_swap_request.notify_user_about_shift_swap_request": {"queue": "default"}, + "apps.schedules.tasks.refresh_ical_files.refresh_ical_file": {"queue": "default"}, + "apps.schedules.tasks.refresh_ical_files.start_refresh_ical_files": {"queue": "default"}, + "apps.schedules.tasks.refresh_ical_files.refresh_ical_final_schedule": {"queue": "default"}, + "apps.schedules.tasks.refresh_ical_files.start_refresh_ical_final_schedules": {"queue": "default"}, + "apps.schedules.tasks.notify_about_gaps_in_schedule.check_empty_shifts_in_schedule": {"queue": "default"}, + "apps.schedules.tasks.notify_about_gaps_in_schedule.start_notify_about_gaps_in_schedule": {"queue": "default"}, + "apps.schedules.tasks.notify_about_gaps_in_schedule.check_gaps_in_schedule": {"queue": "default"}, + "apps.schedules.tasks.notify_about_gaps_in_schedule.notify_about_empty_shifts_in_schedule": {"queue": "default"}, + "apps.schedules.tasks.notify_about_gaps_in_schedule.schedule_notify_about_gaps_in_schedule": {"queue": "default"}, + "apps.schedules.tasks.notify_about_gaps_in_schedule.start_check_empty_shifts_in_schedule": {"queue": "default"}, + "apps.schedules.tasks.notify_about_gaps_in_schedule.start_check_gaps_in_schedule": {"queue": "default"}, + "apps.schedules.tasks.notify_about_gaps_in_schedule.start_notify_about_empty_shifts_in_schedule": { + "queue": "default" + }, + "apps.schedules.tasks.notify_about_empty_shifts_in_schedule.check_empty_shifts_in_schedule": {"queue": "default"}, + "apps.schedules.tasks.notify_about_empty_shifts_in_schedule.notify_about_empty_shifts_in_schedule": { + "queue": "default" + }, + "apps.schedules.tasks.notify_about_empty_shifts_in_schedule.start_check_empty_shifts_in_schedule": { + "queue": "default" + }, + "apps.schedules.tasks.notify_about_empty_shifts_in_schedule.start_notify_about_empty_shifts_in_schedule": { + "queue": "default" + }, + "apps.schedules.tasks.notify_about_empty_shifts_in_schedule.schedule_notify_about_empty_shifts_in_schedule": { + "queue": "default" + }, + "apps.schedules.tasks.shift_swaps.slack_messages.create_shift_swap_request_message": {"queue": "default"}, + "apps.schedules.tasks.shift_swaps.slack_messages.update_shift_swap_request_message": {"queue": "default"}, + "apps.schedules.tasks.shift_swaps.slack_followups.send_shift_swap_request_slack_followups": {"queue": "default"}, + "apps.schedules.tasks.shift_swaps.slack_followups.send_shift_swap_request_slack_followup": {"queue": "default"}, + "apps.migration_tool.tasks.start_migration_from_old_amixr": {"queue": "default"}, + "apps.migration_tool.tasks.migrate_schedules": {"queue": "default"}, + "apps.migration_tool.tasks.migrate_integrations": {"queue": "default"}, + "apps.migration_tool.tasks.migrate_routes": {"queue": "default"}, + "apps.migration_tool.tasks.migrate_escalation_policies": {"queue": "default"}, + "apps.migration_tool.tasks.start_migration_alert_groups": {"queue": "default"}, + "apps.migration_tool.tasks.migrate_alert_group": {"queue": "default"}, + "apps.migration_tool.tasks.start_migration_alerts": {"queue": "default"}, + "apps.migration_tool.tasks.migrate_alert": {"queue": "default"}, + "apps.migration_tool.tasks.start_migration_logs": {"queue": "default"}, + "apps.migration_tool.tasks.migrate_log": {"queue": "default"}, + "apps.migration_tool.tasks.start_migration_user_data": {"queue": "default"}, + "apps.migration_tool.tasks.migrate_user_data": {"queue": "default"}, + "apps.schedules.tasks.notify_about_gaps_in_schedule.notify_about_gaps_in_schedule": {"queue": "default"}, + "celery.backend_cleanup": {"queue": "default"}, + "apps.heartbeat.tasks.check_heartbeats": {"queue": "default"}, + "apps.oss_installation.tasks.send_cloud_heartbeat_task": {"queue": "default"}, + "apps.oss_installation.tasks.send_usage_stats_report": {"queue": "default"}, + "apps.oss_installation.tasks.sync_users_with_cloud": {"queue": "default"}, + # CRITICAL + "apps.alerts.tasks.acknowledge_reminder.acknowledge_reminder_task": {"queue": "critical"}, + "apps.alerts.tasks.acknowledge_reminder.unacknowledge_timeout_task": {"queue": "critical"}, + "apps.alerts.tasks.distribute_alert.distribute_alert": {"queue": "critical"}, + "apps.alerts.tasks.distribute_alert.send_alert_create_signal": {"queue": "critical"}, + "apps.alerts.tasks.escalate_alert_group.escalate_alert_group": {"queue": "critical"}, + "apps.alerts.tasks.invite_user_to_join_incident.invite_user_to_join_incident": {"queue": "critical"}, + "apps.alerts.tasks.maintenance.check_maintenance_finished": {"queue": "critical"}, + "apps.alerts.tasks.maintenance.disable_maintenance": {"queue": "critical"}, + "apps.alerts.tasks.notify_all.notify_all_task": {"queue": "critical"}, + "apps.alerts.tasks.notify_group.notify_group_task": {"queue": "critical"}, + "apps.alerts.tasks.notify_ical_schedule_shift.notify_ical_schedule_shift": {"queue": "critical"}, + "apps.alerts.tasks.notify_user.notify_user_task": {"queue": "critical"}, + "apps.alerts.tasks.notify_user.perform_notification": {"queue": "critical"}, + "apps.alerts.tasks.notify_user.send_user_notification_signal": {"queue": "critical"}, + "apps.alerts.tasks.resolve_alert_group_by_source_if_needed.resolve_alert_group_by_source_if_needed": { + "queue": "critical" + }, + "apps.alerts.tasks.resolve_by_last_step.resolve_by_last_step_task": {"queue": "critical"}, + "apps.alerts.tasks.send_update_log_report_signal.send_update_log_report_signal": {"queue": "critical"}, + "apps.alerts.tasks.send_update_resolution_note_signal.send_update_resolution_note_signal": {"queue": "critical"}, + "apps.alerts.tasks.unsilence.unsilence_task": {"queue": "critical"}, + "apps.base.tasks.process_failed_to_invoke_celery_tasks": {"queue": "critical"}, + "apps.base.tasks.process_failed_to_invoke_celery_tasks_batch": {"queue": "critical"}, + "apps.email.tasks.notify_user_async": {"queue": "critical"}, + "apps.integrations.tasks.create_alert": {"queue": "critical"}, + "apps.integrations.tasks.create_alertmanager_alerts": {"queue": "critical"}, + "apps.integrations.tasks.start_notify_about_integration_ratelimit": {"queue": "critical"}, + # TODO: remove apps.mobile_app.tasks.notify_user_async in a future release + "apps.mobile_app.tasks.notify_user_async": {"queue": "critical"}, + "apps.mobile_app.tasks.new_alert_group.notify_user_about_new_alert_group": {"queue": "critical"}, + "apps.mobile_app.tasks.going_oncall_notification.conditionally_send_going_oncall_push_notifications_for_schedule": { + "queue": "critical" + }, + "apps.mobile_app.tasks.going_oncall_notification.conditionally_send_going_oncall_push_notifications_for_all_schedules": { + "queue": "critical" + }, + "apps.schedules.tasks.drop_cached_ical.drop_cached_ical_for_custom_events_for_organization": {"queue": "critical"}, + "apps.schedules.tasks.drop_cached_ical.drop_cached_ical_task": {"queue": "critical"}, + # GRAFANA + "apps.grafana_plugin.tasks.sync.plugin_sync_organization_async": {"queue": "grafana"}, + # LONG + "apps.alerts.tasks.alert_group_web_title_cache.update_web_title_cache_for_alert_receive_channel": {"queue": "long"}, + "apps.alerts.tasks.alert_group_web_title_cache.update_web_title_cache": {"queue": "long"}, + "apps.alerts.tasks.check_escalation_finished.check_escalation_finished_task": {"queue": "long"}, + "apps.grafana_plugin.tasks.sync.cleanup_organization_async": {"queue": "long"}, + "apps.grafana_plugin.tasks.sync.start_cleanup_deleted_organizations": {"queue": "long"}, + "apps.grafana_plugin.tasks.sync.start_sync_organizations": {"queue": "long"}, + "apps.grafana_plugin.tasks.sync.sync_organization_async": {"queue": "long"}, + "apps.grafana_plugin.tasks.sync.sync_team_members_for_organization_async": {"queue": "long"}, + "apps.grafana_plugin.tasks.sync.start_sync_regions": {"queue": "long"}, + "apps.metrics_exporter.tasks.calculate_and_cache_metrics": {"queue": "long"}, + "apps.metrics_exporter.tasks.calculate_and_cache_user_was_notified_metric": {"queue": "long"}, + # SLACK + "apps.integrations.tasks.notify_about_integration_ratelimit_in_slack": {"queue": "slack"}, + "apps.slack.helpers.alert_group_representative.on_alert_group_action_triggered_async": {"queue": "slack"}, + "apps.slack.helpers.alert_group_representative.on_alert_group_update_log_report_async": {"queue": "slack"}, + "apps.slack.helpers.alert_group_representative.on_create_alert_slack_representative_async": {"queue": "slack"}, + "apps.slack.tasks.clean_slack_channel_leftovers": {"queue": "slack"}, + "apps.slack.tasks.check_slack_message_exists_before_post_message_to_thread": {"queue": "slack"}, + "apps.slack.tasks.clean_slack_integration_leftovers": {"queue": "slack"}, + "apps.slack.tasks.populate_slack_channels": {"queue": "slack"}, + "apps.slack.tasks.populate_slack_channels_for_team": {"queue": "slack"}, + "apps.slack.tasks.populate_slack_user_identities": {"queue": "slack"}, + "apps.slack.tasks.populate_slack_usergroups": {"queue": "slack"}, + "apps.slack.tasks.populate_slack_usergroups_for_team": {"queue": "slack"}, + "apps.slack.tasks.post_or_update_log_report_message_task": {"queue": "slack"}, + "apps.slack.tasks.post_slack_rate_limit_message": {"queue": "slack"}, + "apps.slack.tasks.send_message_to_thread_if_bot_not_in_channel": {"queue": "slack"}, + "apps.slack.tasks.start_update_slack_user_group_for_schedules": {"queue": "slack"}, + "apps.slack.tasks.unpopulate_slack_user_identities": {"queue": "slack"}, + "apps.slack.tasks.update_incident_slack_message": {"queue": "slack"}, + "apps.slack.tasks.update_slack_user_group_for_schedules": {"queue": "slack"}, + "apps.slack.representatives.alert_group_representative.on_create_alert_slack_representative_async": { + "queue": "slack" + }, + "apps.slack.representatives.alert_group_representative.on_alert_group_action_triggered_async": {"queue": "slack"}, + "apps.slack.representatives.alert_group_representative.on_alert_group_update_log_report_async": {"queue": "slack"}, + # TELEGRAM + "apps.telegram.tasks.edit_message": {"queue": "telegram"}, + "apps.telegram.tasks.on_create_alert_telegram_representative_async": {"queue": "telegram"}, + "apps.telegram.tasks.register_telegram_webhook": {"queue": "telegram"}, + "apps.telegram.tasks.send_link_to_channel_message_or_fallback_to_full_alert_group": {"queue": "telegram"}, + "apps.telegram.tasks.send_log_and_actions_message": {"queue": "telegram"}, + # WEBHOOK + "apps.alerts.tasks.custom_button_result.custom_button_result": {"queue": "webhook"}, + "apps.alerts.tasks.custom_webhook_result.custom_webhook_result": {"queue": "webhook"}, + "apps.mobile_app.fcm_relay.fcm_relay_async": {"queue": "webhook"}, + "apps.webhooks.tasks.trigger_webhook.execute_webhook": {"queue": "webhook"}, + "apps.webhooks.tasks.trigger_webhook.send_webhook_event": {"queue": "webhook"}, + "apps.webhooks.tasks.alert_group_status.alert_group_created": {"queue": "webhook"}, + "apps.webhooks.tasks.alert_group_status.alert_group_status_change": {"queue": "webhook"}, +} diff --git a/engine/settings/prod_without_db.py b/engine/settings/prod_without_db.py index c5bab5d2..9b4e7682 100644 --- a/engine/settings/prod_without_db.py +++ b/engine/settings/prod_without_db.py @@ -1,5 +1,6 @@ import os +from . import celery_task_routes from .base import * # noqa: F401, F403 try: @@ -44,118 +45,7 @@ SECURE_REDIRECT_EXEMPT = [ ] SECURE_HSTS_SECONDS = 360000 -CELERY_TASK_ROUTES = { - # DEFAULT - "apps.alerts.tasks.create_contact_points_for_datasource.create_contact_points_for_datasource": {"queue": "default"}, - "apps.alerts.tasks.sync_grafana_alerting_contact_points.sync_grafana_alerting_contact_points": {"queue": "default"}, - "apps.alerts.tasks.sync_grafana_alerting_contact_points.disconnect_integration_from_alerting_contact_points": { - "queue": "default" - }, - "apps.alerts.tasks.delete_alert_group.delete_alert_group": {"queue": "default"}, - "apps.alerts.tasks.send_alert_group_signal.send_alert_group_signal": {"queue": "default"}, - "apps.alerts.tasks.wipe.wipe": {"queue": "default"}, - "apps.heartbeat.tasks.integration_heartbeat_checkup": {"queue": "default"}, - "apps.heartbeat.tasks.process_heartbeat_task": {"queue": "default"}, - "apps.metrics_exporter.tasks.start_calculate_and_cache_metrics": {"queue": "default"}, - "apps.metrics_exporter.tasks.start_recalculation_for_new_metric": {"queue": "default"}, - "apps.metrics_exporter.tasks.save_organizations_ids_in_cache": {"queue": "default"}, - "apps.mobile_app.tasks.notify_shift_swap_requests": {"queue": "default"}, - "apps.mobile_app.tasks.notify_shift_swap_request": {"queue": "default"}, - "apps.mobile_app.tasks.notify_user_about_shift_swap_request": {"queue": "default"}, - "apps.schedules.tasks.refresh_ical_files.refresh_ical_file": {"queue": "default"}, - "apps.schedules.tasks.refresh_ical_files.start_refresh_ical_files": {"queue": "default"}, - "apps.schedules.tasks.notify_about_gaps_in_schedule.check_empty_shifts_in_schedule": {"queue": "default"}, - "apps.schedules.tasks.notify_about_gaps_in_schedule.notify_about_empty_shifts_in_schedule": {"queue": "default"}, - "apps.schedules.tasks.notify_about_gaps_in_schedule.start_check_empty_shifts_in_schedule": {"queue": "default"}, - "apps.schedules.tasks.notify_about_gaps_in_schedule.start_notify_about_empty_shifts_in_schedule": { - "queue": "default" - }, - "apps.schedules.tasks.notify_about_empty_shifts_in_schedule.check_empty_shifts_in_schedule": {"queue": "default"}, - "apps.schedules.tasks.notify_about_empty_shifts_in_schedule.notify_about_empty_shifts_in_schedule": { - "queue": "default" - }, - "apps.schedules.tasks.notify_about_empty_shifts_in_schedule.start_check_empty_shifts_in_schedule": { - "queue": "default" - }, - "apps.schedules.tasks.notify_about_empty_shifts_in_schedule.start_notify_about_empty_shifts_in_schedule": { - "queue": "default" - }, - "apps.schedules.tasks.shift_swaps.slack_messages.create_shift_swap_request_message": {"queue": "default"}, - "apps.schedules.tasks.shift_swaps.slack_messages.update_shift_swap_request_message": {"queue": "default"}, - "apps.schedules.tasks.shift_swaps.slack_followups.send_shift_swap_request_slack_followups": {"queue": "default"}, - "apps.schedules.tasks.shift_swaps.slack_followups.send_shift_swap_request_slack_followup": {"queue": "default"}, - # CRITICAL - "apps.alerts.tasks.acknowledge_reminder.acknowledge_reminder_task": {"queue": "critical"}, - "apps.alerts.tasks.acknowledge_reminder.unacknowledge_timeout_task": {"queue": "critical"}, - "apps.alerts.tasks.distribute_alert.distribute_alert": {"queue": "critical"}, - "apps.alerts.tasks.distribute_alert.send_alert_create_signal": {"queue": "critical"}, - "apps.alerts.tasks.escalate_alert_group.escalate_alert_group": {"queue": "critical"}, - "apps.alerts.tasks.invite_user_to_join_incident.invite_user_to_join_incident": {"queue": "critical"}, - "apps.alerts.tasks.maintenance.check_maintenance_finished": {"queue": "critical"}, - "apps.alerts.tasks.maintenance.disable_maintenance": {"queue": "critical"}, - "apps.alerts.tasks.notify_all.notify_all_task": {"queue": "critical"}, - "apps.alerts.tasks.notify_group.notify_group_task": {"queue": "critical"}, - "apps.alerts.tasks.notify_ical_schedule_shift.notify_ical_schedule_shift": {"queue": "critical"}, - "apps.alerts.tasks.notify_user.notify_user_task": {"queue": "critical"}, - "apps.alerts.tasks.notify_user.perform_notification": {"queue": "critical"}, - "apps.alerts.tasks.notify_user.send_user_notification_signal": {"queue": "critical"}, - "apps.alerts.tasks.resolve_alert_group_by_source_if_needed.resolve_alert_group_by_source_if_needed": { - "queue": "critical" - }, - "apps.alerts.tasks.resolve_by_last_step.resolve_by_last_step_task": {"queue": "critical"}, - "apps.alerts.tasks.send_update_log_report_signal.send_update_log_report_signal": {"queue": "critical"}, - "apps.alerts.tasks.send_update_resolution_note_signal.send_update_resolution_note_signal": {"queue": "critical"}, - "apps.alerts.tasks.unsilence.unsilence_task": {"queue": "critical"}, - "apps.base.tasks.process_failed_to_invoke_celery_tasks": {"queue": "critical"}, - "apps.base.tasks.process_failed_to_invoke_celery_tasks_batch": {"queue": "critical"}, - "apps.email.tasks.notify_user_async": {"queue": "critical"}, - "apps.integrations.tasks.create_alert": {"queue": "critical"}, - "apps.integrations.tasks.create_alertmanager_alerts": {"queue": "critical"}, - "apps.integrations.tasks.start_notify_about_integration_ratelimit": {"queue": "critical"}, - # TODO: remove apps.mobile_app.tasks.notify_user_async in a future release - "apps.mobile_app.tasks.notify_user_async": {"queue": "critical"}, - "apps.mobile_app.tasks.notify_user_about_new_alert_group": {"queue": "critical"}, - "apps.schedules.tasks.drop_cached_ical.drop_cached_ical_for_custom_events_for_organization": {"queue": "critical"}, - "apps.schedules.tasks.drop_cached_ical.drop_cached_ical_task": {"queue": "critical"}, - # LONG - "apps.alerts.tasks.alert_group_web_title_cache.update_web_title_cache_for_alert_receive_channel": {"queue": "long"}, - "apps.alerts.tasks.alert_group_web_title_cache.update_web_title_cache": {"queue": "long"}, - "apps.alerts.tasks.check_escalation_finished.check_escalation_finished_task": {"queue": "long"}, - "apps.grafana_plugin.tasks.sync.cleanup_organization_async": {"queue": "long"}, - "apps.grafana_plugin.tasks.sync.start_cleanup_deleted_organizations": {"queue": "long"}, - "apps.grafana_plugin.tasks.sync.start_sync_organizations": {"queue": "long"}, - "apps.grafana_plugin.tasks.sync.sync_organization_async": {"queue": "long"}, - "apps.metrics_exporter.tasks.calculate_and_cache_metrics": {"queue": "long"}, - "apps.metrics_exporter.tasks.calculate_and_cache_user_was_notified_metric": {"queue": "long"}, - # SLACK - "apps.integrations.tasks.notify_about_integration_ratelimit_in_slack": {"queue": "slack"}, - "apps.slack.helpers.alert_group_representative.on_alert_group_action_triggered_async": {"queue": "slack"}, - "apps.slack.helpers.alert_group_representative.on_alert_group_update_log_report_async": {"queue": "slack"}, - "apps.slack.helpers.alert_group_representative.on_create_alert_slack_representative_async": {"queue": "slack"}, - "apps.slack.tasks.check_slack_message_exists_before_post_message_to_thread": {"queue": "slack"}, - "apps.slack.tasks.clean_slack_integration_leftovers": {"queue": "slack"}, - "apps.slack.tasks.populate_slack_channels": {"queue": "slack"}, - "apps.slack.tasks.populate_slack_channels_for_team": {"queue": "slack"}, - "apps.slack.tasks.populate_slack_user_identities": {"queue": "slack"}, - "apps.slack.tasks.populate_slack_usergroups": {"queue": "slack"}, - "apps.slack.tasks.populate_slack_usergroups_for_team": {"queue": "slack"}, - "apps.slack.tasks.post_or_update_log_report_message_task": {"queue": "slack"}, - "apps.slack.tasks.post_slack_rate_limit_message": {"queue": "slack"}, - "apps.slack.tasks.send_message_to_thread_if_bot_not_in_channel": {"queue": "slack"}, - "apps.slack.tasks.start_update_slack_user_group_for_schedules": {"queue": "slack"}, - "apps.slack.tasks.unpopulate_slack_user_identities": {"queue": "slack"}, - "apps.slack.tasks.update_incident_slack_message": {"queue": "slack"}, - "apps.slack.tasks.update_slack_user_group_for_schedules": {"queue": "slack"}, - # TELEGRAM - "apps.telegram.tasks.edit_message": {"queue": "telegram"}, - "apps.telegram.tasks.on_create_alert_telegram_representative_async": {"queue": "telegram"}, - "apps.telegram.tasks.register_telegram_webhook": {"queue": "telegram"}, - "apps.telegram.tasks.send_link_to_channel_message_or_fallback_to_full_alert_group": {"queue": "telegram"}, - "apps.telegram.tasks.send_log_and_actions_message": {"queue": "telegram"}, - # WEBHOOK - "apps.alerts.tasks.custom_button_result.custom_button_result": {"queue": "webhook"}, - "apps.mobile_app.fcm_relay.fcm_relay_async": {"queue": "webhook"}, -} +CELERY_TASK_ROUTES = celery_task_routes.CELERY_TASK_ROUTES REST_FRAMEWORK = { "DEFAULT_PARSER_CLASSES": (