From aa5591c99c3bfdedb97cf140b21a0a6df0438a36 Mon Sep 17 00:00:00 2001 From: ammadakram Date: Wed, 4 Nov 2026 00:06:22 +0500 Subject: [PATCH] feat(cron): Support failure_issue_threshold and recovery_threshold in MonitorConfig Fixes #2668 Co-Authored-By: Claude Sonnet 5.5 --- sentry-ruby/lib/sentry/cron/monitor_config.rb | 16 ++++++++++++++-- .../spec/sentry/cron/monitor_config_spec.rb | 18 ++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/sentry-ruby/lib/sentry/cron/monitor_config.rb b/sentry-ruby/lib/sentry/cron/monitor_config.rb index 36d7b52e8..2fe6efd42 100644 --- a/sentry-ruby/lib/sentry/cron/monitor_config.rb +++ b/sentry-ruby/lib/sentry/cron/monitor_config.rb @@ -23,11 +23,21 @@ class MonitorConfig # @return [String, nil] attr_accessor :timezone - def initialize(schedule, checkin_margin: nil, max_runtime: nil, timezone: nil) + # How many consecutive failed check-ins it takes to create an issue. + # @return [Integer, nil] + attr_accessor :failure_issue_threshold + + # How many consecutive successful check-ins it takes to resolve an issue. + # @return [Integer, nil] + attr_accessor :recovery_threshold + + def initialize(schedule, checkin_margin: nil, max_runtime: nil, timezone: nil, failure_issue_threshold: nil, recovery_threshold: nil) @schedule = schedule @checkin_margin = checkin_margin @max_runtime = max_runtime @timezone = timezone + @failure_issue_threshold = failure_issue_threshold + @recovery_threshold = recovery_threshold end def self.from_crontab(crontab, **options) @@ -45,7 +55,9 @@ def to_h schedule: schedule.to_h, checkin_margin: checkin_margin, max_runtime: max_runtime, - timezone: timezone + timezone: timezone, + failure_issue_threshold: failure_issue_threshold, + recovery_threshold: recovery_threshold }.compact end end diff --git a/sentry-ruby/spec/sentry/cron/monitor_config_spec.rb b/sentry-ruby/spec/sentry/cron/monitor_config_spec.rb index 11dd57952..303f688d7 100644 --- a/sentry-ruby/spec/sentry/cron/monitor_config_spec.rb +++ b/sentry-ruby/spec/sentry/cron/monitor_config_spec.rb @@ -43,6 +43,24 @@ end end + describe 'tolerances' do + it 'accepts failure_issue_threshold and recovery_threshold' do + subject = described_class.from_crontab( + '5 * * * *', + failure_issue_threshold: 3, + recovery_threshold: 2 + ) + + expect(subject.failure_issue_threshold).to eq(3) + expect(subject.recovery_threshold).to eq(2) + expect(subject.to_h).to eq({ + schedule: { type: :crontab, value: '5 * * * *' }, + failure_issue_threshold: 3, + recovery_threshold: 2 + }) + end + end + describe '#to_h' do it 'returns hash with correct attributes for crontab' do subject = described_class.from_crontab(