Browse Source

feat(crons): Add thresholds to monitor config (#54516) (#54606)

Richard Ortenberg 1 year ago
parent
commit
9329640a3d

+ 2 - 0
src/sentry/monitors/models.py

@@ -62,6 +62,8 @@ MONITOR_CONFIG = {
         "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"],

+ 16 - 0
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

+ 2 - 0
tests/sentry/monitors/endpoints/test_organization_monitor_index.py

@@ -183,6 +183,8 @@ class CreateOrganizationMonitorTest(MonitorTestCase):
             "schedule": "0 0 * * *",
             "checkin_margin": None,
             "max_runtime": None,
+            "failure_issue_threshold": None,
+            "recovery_threshold": None,
         }
 
         self.project.refresh_from_db()