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
1 change: 1 addition & 0 deletions src/sentry/api/serializers/models/alert_rule.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ def serialize(self, obj, attrs, user):
"includeAllProjects": obj.include_all_projects,
"owner": attrs.get("owner", None),
"originalAlertRuleId": attrs.get("originalAlertRuleId", None),
"comparisonDelta": obj.comparison_delta / 60 if obj.comparison_delta else None,
"dateModified": obj.date_modified,
"dateCreated": obj.date_added,
"createdBy": attrs.get("created_by", None),
Expand Down
5 changes: 4 additions & 1 deletion src/sentry/incidents/endpoints/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,10 @@ class AlertRuleSerializer(CamelSnakeModelSerializer):
)
threshold_period = serializers.IntegerField(default=1, min_value=1, max_value=20)
comparison_delta = serializers.IntegerField(
required=False, min_value=1, max_value=int(timedelta(days=89).total_seconds() / 60)
required=False,
min_value=1,
max_value=int(timedelta(days=89).total_seconds() / 60),
allow_null=True,
)
aggregate = serializers.CharField(required=True, min_length=1)
owner = serializers.CharField(
Expand Down
2 changes: 2 additions & 0 deletions src/sentry/testutils/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -942,6 +942,7 @@ def create_alert_rule(
resolve_threshold=None,
user=None,
event_types=None,
comparison_delta=None,
):
if not name:
name = petname.Generate(2, " ", letters=10).title()
Expand All @@ -963,6 +964,7 @@ def create_alert_rule(
excluded_projects=excluded_projects,
user=user,
event_types=event_types,
comparison_delta=comparison_delta,
)

if date_added is not None:
Expand Down
10 changes: 10 additions & 0 deletions tests/sentry/api/serializers/test_alert_rule.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,11 @@ def assert_alert_rule_serialized(self, alert_rule, result, skip_dates=False):
else:
assert result["owner"] is None

if alert_rule.comparison_delta:
assert result["comparisonDelta"] == alert_rule.comparison_delta / 60
else:
assert result["comparisonDelta"] is None

def create_issue_alert_rule(self, data):
"""data format
{
Expand Down Expand Up @@ -129,6 +134,11 @@ def test_owner(self):
self.assert_alert_rule_serialized(alert_rule, result)
assert alert_rule.owner == self.team.actor

def test_comparison_delta(self):
alert_rule = self.create_alert_rule(comparison_delta=60)
result = serialize(alert_rule)
self.assert_alert_rule_serialized(alert_rule, result)


class DetailedAlertRuleSerializerTest(BaseAlertRuleSerializerTest, TestCase):
def test_simple(self):
Expand Down
10 changes: 10 additions & 0 deletions tests/sentry/incidents/endpoints/test_serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
string_to_action_type,
)
from sentry.incidents.logic import (
DEFAULT_ALERT_RULE_RESOLUTION,
DEFAULT_CMP_ALERT_RULE_RESOLUTION,
ChannelLookupTimeoutError,
create_alert_rule_trigger,
Expand Down Expand Up @@ -539,6 +540,15 @@ def test_comparison_delta(self):
assert alert_rule.comparison_delta == 60 * 60
assert alert_rule.snuba_query.resolution == DEFAULT_CMP_ALERT_RULE_RESOLUTION * 60

params["comparison_delta"] = None
serializer = AlertRuleSerializer(
context=self.context, instance=alert_rule, data=params, partial=True
)
assert serializer.is_valid()
alert_rule = serializer.save()
assert alert_rule.comparison_delta is None
assert alert_rule.snuba_query.resolution == DEFAULT_ALERT_RULE_RESOLUTION * 60


class TestAlertRuleTriggerSerializer(TestCase):
@fixture
Expand Down