Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/sentry/event_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
2 changes: 2 additions & 0 deletions src/sentry/features/temporary.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions tests/sentry/event_manager/test_priority.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
20 changes: 20 additions & 0 deletions tests/sentry/event_manager/test_severity.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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"))
Expand Down Expand Up @@ -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
Expand Down