Browse Source

fix(issue-priority): Add initial priority to metadata not group data for occurrences (#67646)

Snigdha Sharma 11 months ago
parent
commit
4c896062f8

+ 1 - 2
src/sentry/issues/ingest.py

@@ -122,7 +122,6 @@ class OccurrenceMetadata(TypedDict):
     title: str
     location: str | None
     last_received: str
-    initial_priority: int | None
 
 
 def materialize_metadata(occurrence: IssueOccurrence, event: Event) -> OccurrenceMetadata:
@@ -137,6 +136,7 @@ def materialize_metadata(occurrence: IssueOccurrence, event: Event) -> Occurrenc
     event_metadata.update(event.get_event_metadata())
     event_metadata["title"] = occurrence.issue_title
     event_metadata["value"] = occurrence.subtitle
+    event_metadata["initial_priority"] = occurrence.initial_issue_priority
 
     if occurrence.type == FeedbackGroup:
         # TODO: Should feedbacks be their own event type, so above call to event.get_event_medata
@@ -154,7 +154,6 @@ def materialize_metadata(occurrence: IssueOccurrence, event: Event) -> Occurrenc
         "metadata": event_metadata,
         "location": event.location,
         "last_received": json.datetime_to_str(event.datetime),
-        "initial_priority": occurrence.initial_issue_priority,
     }
 
 

+ 9 - 8
src/sentry/issues/priority.py

@@ -82,6 +82,13 @@ def get_priority_for_escalating_group(group: Group) -> PriorityLevel:
     return PriorityLevel.HIGH
 
 
+def get_initial_priority(group: Group) -> PriorityLevel | None:
+    initial_priority = group.data.get("metadata", {}).get(
+        "initial_priority", None
+    ) or group.data.get("initial_priority", None)
+    return PriorityLevel(initial_priority) if initial_priority else None
+
+
 def get_priority_for_ongoing_group(group: Group) -> PriorityLevel | None:
     if not features.has("projects:issue-priority", group.project, actor=None):
         return None
@@ -94,12 +101,6 @@ def get_priority_for_ongoing_group(group: Group) -> PriorityLevel | None:
         .first()
     )
 
-    initial_priority = (
-        group.data.get("metadata", {}).get("initial_priority")
-        if not previous_priority_history
-        else None
-    )
-
     new_priority = (
         [
             priority
@@ -107,7 +108,7 @@ def get_priority_for_ongoing_group(group: Group) -> PriorityLevel | None:
             if status == previous_priority_history.status
         ][0]
         if previous_priority_history
-        else initial_priority
+        else get_initial_priority(group)
     )
 
     if not new_priority:
@@ -117,7 +118,7 @@ def get_priority_for_ongoing_group(group: Group) -> PriorityLevel | None:
         )
         return None
 
-    return new_priority
+    return PriorityLevel(new_priority)
 
 
 def auto_update_priority(group: Group, reason: PriorityChangeReason) -> None:

+ 4 - 1
src/sentry/models/activity.py

@@ -42,7 +42,10 @@ class ActivityManager(BaseManager["Activity"]):
             activity_qs = activity_qs.exclude(type=ActivityType.SET_PRIORITY.value)
         else:
             # Check if 'initial_priority' is available and the feature flag is on
-            initial_priority_value = group.get_event_metadata().get("initial_priority")
+            initial_priority_value = group.get_event_metadata().get(
+                "initial_priority", None
+            ) or group.get_event_metadata().get("initial_priority", None)
+
             initial_priority = (
                 PriorityLevel(initial_priority_value).to_str() if initial_priority_value else None
             )

+ 3 - 0
tests/sentry/event_manager/test_event_manager.py

@@ -94,6 +94,7 @@ from sentry.testutils.silo import assume_test_silo_mode_of, region_silo_test
 from sentry.testutils.skips import requires_snuba
 from sentry.tsdb.base import TSDBModel
 from sentry.types.activity import ActivityType
+from sentry.types.group import PriorityLevel
 from sentry.usage_accountant import accountant
 from sentry.utils import json
 from sentry.utils.cache import cache_key_for_event
@@ -2290,6 +2291,7 @@ class EventManagerTest(TestCase, SnubaTestCase, EventManagerTestMixin, Performan
                 "location": "/books/",
                 "title": "N+1 Query",
                 "value": description,
+                "initial_priority": PriorityLevel.LOW,
             }
             assert (
                 event.search_message
@@ -2365,6 +2367,7 @@ class EventManagerTest(TestCase, SnubaTestCase, EventManagerTestMixin, Performan
                 "location": "/books/",
                 "title": "N+1 Query",
                 "value": "SELECT `books_author`.`id`, `books_author`.`name` FROM `books_author` WHERE `books_author`.`id` = %s LIMIT 21",
+                "initial_priority": PriorityLevel.LOW,
             }
             assert group.location() == "/books/"
             assert group.message == "nope"

+ 7 - 2
tests/sentry/issues/test_ingest.py

@@ -376,11 +376,14 @@ class MaterializeMetadataTest(OccurrenceTestMixin, TestCase):
         assert materialize_metadata(occurrence, event) == {
             "type": "default",
             "culprit": occurrence.culprit,
-            "metadata": {"title": occurrence.issue_title, "value": occurrence.subtitle},
+            "metadata": {
+                "title": occurrence.issue_title,
+                "value": occurrence.subtitle,
+                "initial_priority": occurrence.initial_issue_priority,
+            },
             "title": occurrence.issue_title,
             "location": event.location,
             "last_received": json.datetime_to_str(event.datetime),
-            "initial_priority": occurrence.initial_issue_priority,
         }
 
     def test_preserves_existing_metadata(self) -> None:
@@ -394,6 +397,7 @@ class MaterializeMetadataTest(OccurrenceTestMixin, TestCase):
             "title": occurrence.issue_title,
             "value": occurrence.subtitle,
             "dogs": "are great",
+            "initial_priority": occurrence.initial_issue_priority,
         }
 
     def test_populates_feedback_metadata(self) -> None:
@@ -419,6 +423,7 @@ class MaterializeMetadataTest(OccurrenceTestMixin, TestCase):
             "message": "test",
             "name": "Name Test",
             "source": "crash report widget",
+            "initial_priority": occurrence.initial_issue_priority,
         }