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
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from typing import Any

from sentry.models.group import GroupStatus
from sentry.models.groupopenperiod import get_latest_open_period
from sentry.models.groupopenperiod import get_latest_open_period, should_create_open_periods
from sentry.workflow_engine.models.data_condition import Condition, DataConditionEvaluationException
from sentry.workflow_engine.registry import condition_handler_registry
from sentry.workflow_engine.types import DataConditionHandler, WorkflowEventData
Expand All @@ -16,6 +16,10 @@ class IssuePriorityDeescalatingConditionHandler(DataConditionHandler[WorkflowEve
def evaluate_value(event_data: WorkflowEventData, comparison: Any) -> bool:
group = event_data.group

# This condition only works for issue types that create open periods (which excludes errors).
if not should_create_open_periods(group.type):
Comment thread
sentry[bot] marked this conversation as resolved.
return False

# we will fire actions on de-escalation if the priority seen is >= the threshold
# priority specified in the comparison
current_priority = group.priority
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
from unittest.mock import MagicMock, patch

from sentry.incidents.grouptype import MetricIssue
from sentry.models.group import GroupStatus
from sentry.models.group import DEFAULT_TYPE_ID, GroupStatus
from sentry.models.groupopenperiod import GroupOpenPeriod
from sentry.testutils.helpers.options import override_options
from sentry.types.group import PriorityLevel
from sentry.users.services.user.service import user_service
from sentry.workflow_engine.migration_helpers.alert_rule import (
migrate_alert_rule,
migrate_metric_data_conditions,
)
from sentry.workflow_engine.models.data_condition import Condition
from sentry.workflow_engine.types import DetectorPriorityLevel, WorkflowEventData
from sentry.workflow_engine.types import ConditionError, DetectorPriorityLevel, WorkflowEventData
from tests.sentry.workflow_engine.handlers.condition.test_base import ConditionTestCase


Expand Down Expand Up @@ -96,3 +99,26 @@ def test_critical(self) -> None:

self.group.update(status=GroupStatus.RESOLVED)
self.assert_passes(self.deescalating_dc_critical, self.event_data)

@override_options(
{"workflow_engine.group.type_id.open_periods_type_denylist": [DEFAULT_TYPE_ID]}
)
def test_error_group_does_not_pass(self) -> None:
error_group, _, error_group_event = self.create_group_event()
error_event_data = WorkflowEventData(event=error_group_event, group=error_group_event.group)
self.assert_does_not_pass(self.deescalating_dc_warning, error_event_data)

@override_options(
{"workflow_engine.group.type_id.open_periods_type_denylist": [DEFAULT_TYPE_ID]}
)
@patch("sentry.workflow_engine.models.data_condition.logger")
def test_error_group_does_not_log(self, mock_logger: MagicMock) -> None:
error_group, _, error_group_event = self.create_group_event()
error_event_data = WorkflowEventData(event=error_group_event, group=error_group_event.group)
self.deescalating_dc_warning.evaluate_value(error_event_data)
mock_logger.info.assert_not_called()

def test_missing_open_period_for_supported_type(self) -> None:
GroupOpenPeriod.objects.filter(group=self.group).delete()
result = self.deescalating_dc_warning.evaluate_value(self.event_data)
assert isinstance(result, ConditionError)
Loading