diff --git a/CHANGELOG.md b/CHANGELOG.md index 8937d0134..07a6d3c28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ ## Unreleased +### Features + - Add support for $SENTRY_DEBUG and $SENTRY_SPOTLIGHT ([#2374](https://github.com/getsentry/sentry-ruby/pull/2374)) +- Support human readable intervals in `sidekiq-cron` ([#2387](https://github.com/getsentry/sentry-ruby/pull/2387)) ## 5.19.0 diff --git a/sentry-sidekiq/lib/sentry/sidekiq/cron/job.rb b/sentry-sidekiq/lib/sentry/sidekiq/cron/job.rb index 4098d7564..937fd797c 100644 --- a/sentry-sidekiq/lib/sentry/sidekiq/cron/job.rb +++ b/sentry-sidekiq/lib/sentry/sidekiq/cron/job.rb @@ -28,8 +28,8 @@ def save unless klass_const.send(:ancestors).include?(Sentry::Cron::MonitorCheckIns) klass_const.send(:include, Sentry::Cron::MonitorCheckIns) klass_const.send(:sentry_monitor_check_ins, - slug: name, - monitor_config: Sentry::Cron::MonitorConfig.from_crontab(cron)) + slug: name.to_s, + monitor_config: Sentry::Cron::MonitorConfig.from_crontab(parsed_cron.original)) end true diff --git a/sentry-sidekiq/spec/fixtures/sidekiq-cron-schedule.yml b/sentry-sidekiq/spec/fixtures/sidekiq-cron-schedule.yml index 65b5945a6..fe2798262 100644 --- a/sentry-sidekiq/spec/fixtures/sidekiq-cron-schedule.yml +++ b/sentry-sidekiq/spec/fixtures/sidekiq-cron-schedule.yml @@ -6,6 +6,10 @@ manual: cron: "* * * * *" class: "SadWorkerWithCron" +human_readable_cron: + cron: "every 5 minutes" + class: HappyWorkerWithHumanReadableCron + invalid_cron: cron: "not a crontab" class: "ReportingWorker" diff --git a/sentry-sidekiq/spec/sentry/sidekiq/cron/job_spec.rb b/sentry-sidekiq/spec/sentry/sidekiq/cron/job_spec.rb index 44f02f86e..c0f223096 100644 --- a/sentry-sidekiq/spec/sentry/sidekiq/cron/job_spec.rb +++ b/sentry-sidekiq/spec/sentry/sidekiq/cron/job_spec.rb @@ -10,6 +10,7 @@ before do schedule_file = 'spec/fixtures/sidekiq-cron-schedule.yml' schedule = Sidekiq::Cron::Support.load_yaml(ERB.new(IO.read(schedule_file)).result) + schedule = schedule.merge(symbol_name: { cron: '* * * * *', class: HappyWorkerWithSymbolName }) # sidekiq-cron 2.0+ accepts second argument to `load_from_hash!` with options, # such as {source: 'schedule'}, but sidekiq-cron 1.9.1 (last version to support Ruby 2.6) does not. # Since we're not using the source option in our code anyway, it's safe to not pass the 2nd arg. @@ -48,6 +49,23 @@ expect(HappyWorkerForCron.sentry_monitor_config.schedule.value).to eq('* * * * *') end + it 'patches HappyWorkerWithHumanReadableCron' do + expect(HappyWorkerWithHumanReadableCron.ancestors).to include(Sentry::Cron::MonitorCheckIns) + expect(HappyWorkerWithHumanReadableCron.sentry_monitor_slug).to eq('human_readable_cron') + expect(HappyWorkerWithHumanReadableCron.sentry_monitor_config).to be_a(Sentry::Cron::MonitorConfig) + expect(HappyWorkerWithHumanReadableCron.sentry_monitor_config.schedule).to be_a(Sentry::Cron::MonitorSchedule::Crontab) + expect(HappyWorkerWithHumanReadableCron.sentry_monitor_config.schedule.value).to eq('*/5 * * * *') + end + + it 'patches HappyWorkerWithSymbolName' do + expect(HappyWorkerWithSymbolName.ancestors).to include(Sentry::Cron::MonitorCheckIns) + expect(HappyWorkerWithSymbolName.sentry_monitor_slug).to eq('symbol_name') + expect(HappyWorkerWithSymbolName.sentry_monitor_config).to be_a(Sentry::Cron::MonitorConfig) + expect(HappyWorkerWithSymbolName.sentry_monitor_config.schedule).to be_a(Sentry::Cron::MonitorSchedule::Crontab) + expect(HappyWorkerWithSymbolName.sentry_monitor_config.schedule.value).to eq('* * * * *') + end + + it 'does not override SadWorkerWithCron manually set values' do expect(SadWorkerWithCron.ancestors).to include(Sentry::Cron::MonitorCheckIns) expect(SadWorkerWithCron.sentry_monitor_slug).to eq('failed_job') diff --git a/sentry-sidekiq/spec/spec_helper.rb b/sentry-sidekiq/spec/spec_helper.rb index 83e55d7da..6b2287957 100644 --- a/sentry-sidekiq/spec/spec_helper.rb +++ b/sentry-sidekiq/spec/spec_helper.rb @@ -139,6 +139,8 @@ class HappyWorkerForCron < HappyWorker; end class HappyWorkerForScheduler < HappyWorker; end class HappyWorkerForSchedulerWithTimezone < HappyWorker; end class EveryHappyWorker < HappyWorker; end +class HappyWorkerWithHumanReadableCron < HappyWorker; end +class HappyWorkerWithSymbolName < HappyWorker; end class HappyWorkerWithCron < HappyWorker include Sentry::Cron::MonitorCheckIns