From 33fe51448358ac0f02f9a2f4bd134fbf5c415fd3 Mon Sep 17 00:00:00 2001 From: Snigdha Sharma Date: Tue, 23 Jul 2024 11:17:14 -0700 Subject: [PATCH 1/4] Add permanent feature flag for seer-based priority alerts --- src/sentry/features/permanent.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/sentry/features/permanent.py b/src/sentry/features/permanent.py index f1887c735c42d3..008acf0f431e7f 100644 --- a/src/sentry/features/permanent.py +++ b/src/sentry/features/permanent.py @@ -109,6 +109,8 @@ def register_permanent_features(manager: FeatureManager): "organizations:org-ingest-subdomains": False, # Replace the footer Sentry logo with a Sentry pride logo "organizations:sentry-pride-logo-footer": False, + # Enable priority alerts using the Seer calculations + "organizations:seer-based-priority": False, } permanent_project_features = { From 7d223674c008cda1f46ffd0946885db90a4e246a Mon Sep 17 00:00:00 2001 From: Snigdha Sharma Date: Tue, 23 Jul 2024 11:17:26 -0700 Subject: [PATCH 2/4] Use feature flag to skip calculating severity --- src/sentry/event_manager.py | 6 ++++++ tests/sentry/event_manager/test_severity.py | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/sentry/event_manager.py b/src/sentry/event_manager.py index 068de7ec47a0f3..02af5ac9b6eb38 100644 --- a/src/sentry/event_manager.py +++ b/src/sentry/event_manager.py @@ -2366,6 +2366,12 @@ def _get_severity_metadata_for_group( """ from sentry.receivers.rules import PLATFORMS_WITH_PRIORITY_ALERTS + organization_supports_severity = features.has( + "organizations:seer-based-priority", event.project.organization, actor=None + ) + if not organization_supports_severity: + return {} + if killswitch_matches_context("issues.skip-seer-requests", {"project_id": event.project_id}): logger.warning( "get_severity_metadata_for_group.seer_killswitch_enabled", diff --git a/tests/sentry/event_manager/test_severity.py b/tests/sentry/event_manager/test_severity.py index 84555c0c96a15b..26e4addd0c925f 100644 --- a/tests/sentry/event_manager/test_severity.py +++ b/tests/sentry/event_manager/test_severity.py @@ -36,6 +36,7 @@ def make_event(**kwargs) -> dict[str, Any]: return result +@apply_feature_flag_on_cls("organizations:seer-based-priority") class TestGetEventSeverity(TestCase): @patch( "sentry.event_manager.severity_connection_pool.urlopen", @@ -323,6 +324,7 @@ def test_other_exception( assert cache.get(SEER_ERROR_COUNT_KEY) == 1 +@apply_feature_flag_on_cls("organizations:seer-based-priority") @apply_feature_flag_on_cls("projects:first-event-severity-calculation") class TestEventManagerSeverity(TestCase): @patch("sentry.event_manager._get_severity_score", return_value=(0.1121, "ml")) @@ -360,6 +362,24 @@ def test_flag_off(self, mock_get_severity_score: MagicMock): and "severity.reason" not in event.group.get_event_metadata() ) + @patch("sentry.event_manager._get_severity_score", return_value=(0.1121, "ml")) + def test_permanent_flag_off(self, mock_get_severity_score: MagicMock): + with self.feature({"organizations:seer-based-priority": False}): + manager = EventManager( + make_event( + exception={"values": [{"type": "NopeError", "value": "Nopey McNopeface"}]}, + platform="python", + ) + ) + event = manager.save(self.project.id) + + mock_get_severity_score.assert_not_called() + assert ( + event.group + and "severity" not in event.group.get_event_metadata() + and "severity.reason" not in event.group.get_event_metadata() + ) + @patch("sentry.event_manager._get_severity_score", return_value=(0.1121, "ml")) def test_get_severity_score_not_called_on_second_event( self, mock_get_severity_score: MagicMock From e238ec0a1d4a7a033d67bfd8bd27d7657dc31701 Mon Sep 17 00:00:00 2001 From: Snigdha Sharma Date: Tue, 23 Jul 2024 11:56:47 -0700 Subject: [PATCH 3/4] Move flag to flagpole for easier testing --- src/sentry/features/permanent.py | 2 -- src/sentry/features/temporary.py | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sentry/features/permanent.py b/src/sentry/features/permanent.py index 008acf0f431e7f..f1887c735c42d3 100644 --- a/src/sentry/features/permanent.py +++ b/src/sentry/features/permanent.py @@ -109,8 +109,6 @@ def register_permanent_features(manager: FeatureManager): "organizations:org-ingest-subdomains": False, # Replace the footer Sentry logo with a Sentry pride logo "organizations:sentry-pride-logo-footer": False, - # Enable priority alerts using the Seer calculations - "organizations:seer-based-priority": False, } permanent_project_features = { diff --git a/src/sentry/features/temporary.py b/src/sentry/features/temporary.py index f8994d004719ee..4f4cd96bf9b7d6 100644 --- a/src/sentry/features/temporary.py +++ b/src/sentry/features/temporary.py @@ -417,6 +417,8 @@ def register_temporary_features(manager: FeatureManager): manager.add("organizations:insights-browser-webvitals-optional-components", OrganizationFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=False) # Add default browser performance score profile for fallback when no or unknown browser name is provided manager.add("organizations:insights-default-performance-score-profiles", OrganizationFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=False) + # Enable priority alerts using the Seer calculations. This flag will move to a permanent flag before we release. + manager.add("organizations:seer-based-priority", OrganizationFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=False) # Enable standalone span ingestion manager.add("organizations:standalone-span-ingestion", OrganizationFeature, FeatureHandlerStrategy.INTERNAL, api_expose=False) # Enable the aggregate span waterfall view From 0d8cc0490c2e59c40be1a762176ad37c9650262c Mon Sep 17 00:00:00 2001 From: Snigdha Sharma Date: Tue, 23 Jul 2024 11:56:55 -0700 Subject: [PATCH 4/4] Add flag to test --- tests/sentry/event_manager/test_priority.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/sentry/event_manager/test_priority.py b/tests/sentry/event_manager/test_priority.py index 14a2c9903f4200..01ea2fb58a16ce 100644 --- a/tests/sentry/event_manager/test_priority.py +++ b/tests/sentry/event_manager/test_priority.py @@ -17,6 +17,7 @@ @region_silo_test @apply_feature_flag_on_cls("projects:first-event-severity-calculation") +@apply_feature_flag_on_cls("organizations:seer-based-priority") class TestEventManagerPriority(TestCase): @patch("sentry.event_manager._get_severity_score", return_value=(0.1121, "ml")) def test_flag_on(self, mock_get_severity_score: MagicMock):