Browse Source

fix: no attribute error (#69908)

per https://sentry-st.sentry.io/issues/5278445518/?project=1513938

the [original
](https://github.com/getsentry/sentry/pull/69612/files#diff-8d3b88dca1ecb2b3b416850d9e08dcff8dedbe1533bbc2e816b42af99e49a30aL343)
code type-ignored the attr-defined.

bringing that back here so we hopefully don't run into this issue again
Nathan Hsieh 10 months ago
parent
commit
6965eb0f61
1 changed files with 18 additions and 4 deletions
  1. 18 4
      src/sentry/api/serializers/models/alert_rule.py

+ 18 - 4
src/sentry/api/serializers/models/alert_rule.py

@@ -333,7 +333,7 @@ class CombinedRuleSerializer(Serializer):
                 incident_map[incident.id] = serialize(incident, user=user)
 
         serialized_alert_rules = serialize(alert_rules, user=user)
-        serialized_map_by_id = {
+        serialized_alert_rule_map_by_id = {
             serialized_alert["id"]: serialized_alert for serialized_alert in serialized_alert_rules
         }
 
@@ -348,12 +348,26 @@ class CombinedRuleSerializer(Serializer):
 
         for item in item_list:
             item_id = str(item.id)
-            if item_id in serialized_map_by_id:
-                serialized_alert_rule = serialized_map_by_id[item_id]
+            if item_id in serialized_alert_rule_map_by_id:
+                # This is a metric alert rule
+                serialized_alert_rule = serialized_alert_rule_map_by_id[item_id]
                 if "latestIncident" in self.expand:
-                    serialized_alert_rule["latestIncident"] = incident_map.get(item.incident_id)
+                    # Eg. we _have_ an incident
+                    try:
+                        serialized_alert_rule["latestIncident"] = incident_map.get(item.incident_id)
+                    except AttributeError as e:
+                        logger.exception(
+                            "incident serialization error",
+                            extra={
+                                "exception": e,
+                                "alert_rule_id": item_id,
+                                "is_metric_alert": isinstance(item, AlertRule),
+                                "is_issue_alert": isinstance(item, Rule),
+                            },
+                        )
                 results[item] = serialized_alert_rule
             elif item_id in serialized_issue_rule_map_by_id:
+                # This is an issue alert rule
                 results[item] = serialized_issue_rule_map_by_id[item_id]
             else:
                 logger.error(