From 6004d178fe4668ea45daffc66bb8675b0c590e7a Mon Sep 17 00:00:00 2001 From: Richard Ortenberg Date: Thu, 10 Aug 2023 13:48:51 -0700 Subject: [PATCH] feat(crons): Add thresholds to monitor config (#54516) Adds `failure_issue_threshold` for value to create issues and `recovery_threshold` for value to resolve issues. --- src/sentry/monitors/models.py | 2 ++ src/sentry/monitors/validators.py | 16 ++++++++++++++++ .../endpoints/test_organization_monitor_index.py | 2 ++ 3 files changed, 20 insertions(+) diff --git a/src/sentry/monitors/models.py b/src/sentry/monitors/models.py index 1cc0d15901392..fb0529a9e9e62 100644 --- a/src/sentry/monitors/models.py +++ b/src/sentry/monitors/models.py @@ -62,6 +62,8 @@ "schedule_type": {"type": "integer"}, "schedule": {"type": ["string", "array"]}, "alert_rule_id": {"type": ["integer", "null"]}, + "failure_issue_threshold": {"type": ["integer", "null"]}, + "recovery_threshold": {"type": ["integer", "null"]}, }, # TODO(davidenwang): Old monitors may not have timezone or schedule_type, these should be added here once we've cleaned up old data "required": ["checkin_margin", "max_runtime", "schedule"], diff --git a/src/sentry/monitors/validators.py b/src/sentry/monitors/validators.py index d6c703c91ca58..ad993264b7766 100644 --- a/src/sentry/monitors/validators.py +++ b/src/sentry/monitors/validators.py @@ -108,6 +108,22 @@ class ConfigValidator(serializers.Serializer): help_text="tz database style timezone string", ) + failure_issue_threshold = EmptyIntegerField( + required=False, + allow_null=True, + default=None, + help_text="How many consecutive missed or failed check-ins in a row before creating a new issue.", + min_value=1, + ) + + recovery_threshold = EmptyIntegerField( + required=False, + allow_null=True, + default=None, + help_text="How many successful check-ins in a row before resolving an issue.", + min_value=1, + ) + def bind(self, *args, **kwargs): super().bind(*args, **kwargs) # Inherit instance data when used as a nested serializer diff --git a/tests/sentry/monitors/endpoints/test_organization_monitor_index.py b/tests/sentry/monitors/endpoints/test_organization_monitor_index.py index a5bf021876c2b..affc38a6b4203 100644 --- a/tests/sentry/monitors/endpoints/test_organization_monitor_index.py +++ b/tests/sentry/monitors/endpoints/test_organization_monitor_index.py @@ -183,6 +183,8 @@ def test_simple(self, mock_record): "schedule": "0 0 * * *", "checkin_margin": None, "max_runtime": None, + "failure_issue_threshold": None, + "recovery_threshold": None, } self.project.refresh_from_db()