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
2 changes: 2 additions & 0 deletions src/sentry/features/temporary.py
Original file line number Diff line number Diff line change
Expand Up @@ -485,6 +485,8 @@ def register_temporary_features(manager: FeatureManager) -> None:
manager.add("organizations:ingest-through-trusted-relays-only", OrganizationFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=True)
# Enable metric issue UI for issue alerts
manager.add("organizations:workflow-engine-metric-issue-ui", OrganizationFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=True)
# Disable issue stream detector notifications for metric issues
manager.add("organizations:workflow-engine-metric-issue-disable-issue-detector-notifications", OrganizationFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=False)
# Enable new workflow_engine UI (see: alerts create issues)
manager.add("organizations:workflow-engine-ui", OrganizationFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=True)
# Disable redirects from alert rules to the new workflow_engine UI
Expand Down
16 changes: 14 additions & 2 deletions src/sentry/workflow_engine/processors/detector.py
Original file line number Diff line number Diff line change
Expand Up @@ -279,9 +279,21 @@ def _is_issue_stream_detector_enabled(event_data: WorkflowEventData) -> bool:
if group_type_id not in disabled_type_ids:
return True

return group_type_id == MetricIssue.type_id and features.has(
"organizations:workflow-engine-metric-issue-ui", event_data.event.project.organization
if group_type_id != MetricIssue.type_id:
return False

organization = event_data.event.project.organization

has_metric_issue_ui = features.has(
"organizations:workflow-engine-metric-issue-ui", organization
)
# For most users, the issue stream detector for metric issues will be rolled out along with the metric issue UI.
# For users who find that behavior undesirable, this feature flag will disable it for them.
disable_issue_stream_detector_for_metric_issues = features.has(
"organizations:workflow-engine-metric-issue-disable-issue-detector-notifications",
organization,
)
return has_metric_issue_ui and not disable_issue_stream_detector_for_metric_issues


def get_detectors_for_event_data(
Expand Down
16 changes: 16 additions & 0 deletions tests/sentry/workflow_engine/processors/test_detector.py
Original file line number Diff line number Diff line change
Expand Up @@ -922,6 +922,22 @@ def test_activity_update_with_feature_flag(self) -> None:
assert result.preferred_detector == self.detector
assert result.detectors == {self.issue_stream_detector, self.detector}

def test_metric_issue_with_disable_detector_flag(self) -> None:
"""When the disable-detector flag is set, metric issues should not use the issue stream detector."""
self.group_event.occurrence = self.occurrence

event_data = WorkflowEventData(event=self.group_event, group=self.group)
with self.feature(
{
"organizations:workflow-engine-metric-issue-ui": True,
"organizations:workflow-engine-metric-issue-disable-issue-detector-notifications": True,
}
):
result = get_detectors_for_event_data(event_data)
assert result is not None
assert result.preferred_detector == self.detector
assert result.detectors == {self.detector}

def test_non_metric_issue_in_disable_list_with_feature_flag(self) -> None:
"""Feature flag override only applies to MetricIssue, not other disabled group types."""
self.group.update(type=FeedbackGroup.type_id)
Expand Down
Loading