From 0121f81e0c30dc127c2198e4939a40789be38985 Mon Sep 17 00:00:00 2001 From: Dan Fuller Date: Fri, 2 Oct 2026 17:18:19 -0700 Subject: [PATCH 1/3] docs(crons): Add rufus-scheduler setup for Ruby Co-Authored-By: Claude --- platform-includes/crons/setup/ruby.mdx | 37 ++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/platform-includes/crons/setup/ruby.mdx b/platform-includes/crons/setup/ruby.mdx index c199d34313348..6b995c2752748 100644 --- a/platform-includes/crons/setup/ruby.mdx +++ b/platform-includes/crons/setup/ruby.mdx @@ -56,6 +56,43 @@ sentry_monitor_check_ins monitor_config: Sentry::Cron::MonitorConfig.from_interv sentry_monitor_check_ins monitor_config: Sentry::Cron::MonitorConfig.from_crontab('5 * * * *') ``` +### rufus-scheduler + + + +The rufus-scheduler integration ships in the next release of `sentry-ruby`. + + + +If you're using `rufus-scheduler`, enable the `:rufus_scheduler` patch to capture check-ins for `cron`, `every`, and `interval` jobs: + +```rb +Sentry.init do |config| + config.enabled_patches += [:rufus_scheduler] +end +``` + +```rb +scheduler = Rufus::Scheduler.new + +scheduler.cron '0 9 * * 1-5', name: 'daily-report' do + # do stuff +end + +scheduler.every '10m', name: 'sync-accounts' do + # do stuff +end + +# skip a job +scheduler.every '1m', sentry_monitor: false do + # do stuff +end +``` + +The monitor slug comes from the job's `name` option. Without a name, the SDK falls back to the handler class name or to the block's file and line, which change when the code moves. Set `name` on every job you monitor. + +Sentry creates the monitor from `cron` jobs and from `every` jobs whose frequency is a whole number of minutes, hours, or days. `interval` jobs wait a fixed time after each run ends, so they don't have a fixed schedule. For those, and for cron lines Sentry can't read the same way (for example `L`, `#`, or sub-minute seconds), the SDK sends check-ins without a monitor config, and you need to create the monitor in Sentry with the same slug. One-off `in` and `at` jobs are not monitored, and jobs scheduled by `sidekiq-scheduler` are left to the `:sidekiq_scheduler` patch. + ## Manual Setup If you're using `Clockwork` or `Whenever`, you'll need to instrument your jobs From 16f505ddd983761b4e4deb37fd364ce83362b7cc Mon Sep 17 00:00:00 2001 From: Dan Fuller Date: Mon, 5 Oct 2026 12:17:31 -0700 Subject: [PATCH 2/3] docs(crons): Update rufus-scheduler slug and time zone notes Co-Authored-By: Claude --- platform-includes/crons/setup/ruby.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform-includes/crons/setup/ruby.mdx b/platform-includes/crons/setup/ruby.mdx index 6b995c2752748..db366261b404f 100644 --- a/platform-includes/crons/setup/ruby.mdx +++ b/platform-includes/crons/setup/ruby.mdx @@ -89,9 +89,9 @@ scheduler.every '1m', sentry_monitor: false do end ``` -The monitor slug comes from the job's `name` option. Without a name, the SDK falls back to the handler class name or to the block's file and line, which change when the code moves. Set `name` on every job you monitor. +The monitor slug comes from the job's `name` option, or from the handler's class or method name when you pass one instead of a block. Blocks without a `name` aren't monitored, so set `name` on every block you want to monitor. -Sentry creates the monitor from `cron` jobs and from `every` jobs whose frequency is a whole number of minutes, hours, or days. `interval` jobs wait a fixed time after each run ends, so they don't have a fixed schedule. For those, and for cron lines Sentry can't read the same way (for example `L`, `#`, or sub-minute seconds), the SDK sends check-ins without a monitor config, and you need to create the monitor in Sentry with the same slug. One-off `in` and `at` jobs are not monitored, and jobs scheduled by `sidekiq-scheduler` are left to the `:sidekiq_scheduler` patch. +Sentry creates the monitor from `cron` jobs and from `every` jobs whose frequency is a whole number of minutes, hours, or days. `interval` jobs wait a fixed time after each run ends, so they don't have a fixed schedule. For those, and for cron lines Sentry can't read the same way (for example `L`, `#`, or sub-minute seconds), the SDK sends check-ins without a monitor config, and you need to create the monitor in Sentry with the same slug. The same applies when the job's time zone isn't an IANA name, such as `Europe/Vienna`: offsets like `+05:30` aren't sent. One-off `in` and `at` jobs are not monitored, and jobs scheduled by `sidekiq-scheduler` are left to the `:sidekiq_scheduler` patch. ## Manual Setup From 65f4e573bfa3327a8cebef7395bd044c8b8ca74c Mon Sep 17 00:00:00 2001 From: Dan Fuller Date: Mon, 5 Oct 2026 12:17:40 -0700 Subject: [PATCH 3/3] docs(crons): Clarify rufus-scheduler time zone note Co-Authored-By: Claude --- platform-includes/crons/setup/ruby.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform-includes/crons/setup/ruby.mdx b/platform-includes/crons/setup/ruby.mdx index db366261b404f..b44f4ba480c33 100644 --- a/platform-includes/crons/setup/ruby.mdx +++ b/platform-includes/crons/setup/ruby.mdx @@ -91,7 +91,7 @@ end The monitor slug comes from the job's `name` option, or from the handler's class or method name when you pass one instead of a block. Blocks without a `name` aren't monitored, so set `name` on every block you want to monitor. -Sentry creates the monitor from `cron` jobs and from `every` jobs whose frequency is a whole number of minutes, hours, or days. `interval` jobs wait a fixed time after each run ends, so they don't have a fixed schedule. For those, and for cron lines Sentry can't read the same way (for example `L`, `#`, or sub-minute seconds), the SDK sends check-ins without a monitor config, and you need to create the monitor in Sentry with the same slug. The same applies when the job's time zone isn't an IANA name, such as `Europe/Vienna`: offsets like `+05:30` aren't sent. One-off `in` and `at` jobs are not monitored, and jobs scheduled by `sidekiq-scheduler` are left to the `:sidekiq_scheduler` patch. +Sentry creates the monitor from `cron` jobs and from `every` jobs whose frequency is a whole number of minutes, hours, or days. `interval` jobs wait a fixed time after each run ends, so they don't have a fixed schedule. For those, and for cron lines Sentry can't read the same way (for example `L`, `#`, or sub-minute seconds), the SDK sends check-ins without a monitor config, and you need to create the monitor in Sentry with the same slug. The same applies when the job's time zone is an offset like `+05:30` rather than an IANA name like `Europe/Vienna`. One-off `in` and `at` jobs are not monitored, and jobs scheduled by `sidekiq-scheduler` are left to the `:sidekiq_scheduler` patch. ## Manual Setup