diff --git a/engine/apps/alerts/models/alert.py b/engine/apps/alerts/models/alert.py index 9a6c383e..3a1c7fe5 100644 --- a/engine/apps/alerts/models/alert.py +++ b/engine/apps/alerts/models/alert.py @@ -13,6 +13,7 @@ from apps.alerts.constants import TASK_DELAY_SECONDS from apps.alerts.incident_appearance.templaters import TemplateLoader from apps.alerts.tasks import distribute_alert, send_alert_group_signal from common.jinja_templater import apply_jinja_template +from common.jinja_templater.apply_jinja_template import JinjaTemplateError, JinjaTemplateWarning from common.public_primary_keys import generate_public_primary_key, increase_public_primary_key_length logger = logging.getLogger(__name__) @@ -189,12 +190,23 @@ class Alert(models.Model): # set web_title_cache to web title to allow alert group searching based on web_title_cache web_title_template = template_manager.get_attr_template("title", alert_receive_channel, render_for="web") if web_title_template: - web_title_cache = apply_jinja_template(web_title_template, raw_request_data) + try: + web_title_cache = apply_jinja_template(web_title_template, raw_request_data) + except (JinjaTemplateError, JinjaTemplateWarning) as e: + web_title_cache = e.fallback_message + logger.warning( + f"web_title_cache error on channel={alert_receive_channel.public_primary_key}: {e.fallback_message}" + ) else: web_title_cache = None if grouping_id_template is not None: - group_distinction = apply_jinja_template(grouping_id_template, raw_request_data) + try: + group_distinction = apply_jinja_template(grouping_id_template, raw_request_data) + except (JinjaTemplateError, JinjaTemplateWarning) as e: + logger.warning( + f"grouping_id_template error on channel={alert_receive_channel.public_primary_key}: {e.fallback_message}" + ) # Insert random uuid to prevent grouping of demo alerts or alerts with group_distinction=None if is_demo or not group_distinction: @@ -204,13 +216,25 @@ class Alert(models.Model): group_distinction = hashlib.md5(str(group_distinction).encode()).hexdigest() if resolve_condition_template is not None: - is_resolve_signal = apply_jinja_template(resolve_condition_template, payload=raw_request_data) + try: + is_resolve_signal = apply_jinja_template(resolve_condition_template, payload=raw_request_data) + except (JinjaTemplateError, JinjaTemplateWarning) as e: + logger.warning( + f"resolve_condition_template error on channel={alert_receive_channel.public_primary_key}: {e.fallback_message}" + ) + if isinstance(is_resolve_signal, str): is_resolve_signal = is_resolve_signal.strip().lower() in ["1", "true", "ok"] else: is_resolve_signal = False if acknowledge_condition_template is not None: - is_acknowledge_signal = apply_jinja_template(acknowledge_condition_template, payload=raw_request_data) + try: + is_acknowledge_signal = apply_jinja_template(acknowledge_condition_template, payload=raw_request_data) + except (JinjaTemplateError, JinjaTemplateWarning) as e: + logger.warning( + f"acknowledge_condition_template error on channel={alert_receive_channel.public_primary_key}: {e.fallback_message}" + ) + if isinstance(is_acknowledge_signal, str): is_acknowledge_signal = is_acknowledge_signal.strip().lower() in ["1", "true", "ok"] else: diff --git a/engine/apps/slack/tasks.py b/engine/apps/slack/tasks.py index 6dbd0a18..29a92691 100644 --- a/engine/apps/slack/tasks.py +++ b/engine/apps/slack/tasks.py @@ -467,7 +467,13 @@ def post_or_update_log_report_message_task(alert_group_pk, slack_team_identity_p ) def post_slack_rate_limit_message(integration_id): AlertReceiveChannel = apps.get_model("alerts", "AlertReceiveChannel") - integration = AlertReceiveChannel.objects.get(pk=integration_id) + + try: + integration = AlertReceiveChannel.objects.get(pk=integration_id) + except AlertReceiveChannel.DoesNotExist: + logger.warning(f"AlertReceiveChannel {integration_id} doesn't exist") + return + if not compare_escalations(post_slack_rate_limit_message.request.id, integration.rate_limit_message_task_id): logger.info( f"post_slack_rate_limit_message. integration {integration_id}. ID mismatch. "