Skip to content

feat(quartz): Add an option to monitor all scheduled jobs - #5741

Merged
jamescrosswell merged 61 commits into
mainfrom
danf/quartz-bulk-cron
Oct 29, 2026
Merged

jamescrosswell merged 61 commits into
mainfrom
danf/quartz-bulk-cron

Conversation

@wedamija

@wedamija wedamija commented Oct 17, 2026 •

Copy link
Copy Markdown
Member

Part of a series adding automatic Crons monitoring for the most-used job schedulers in each SDK. Check-ins for a monitor that doesn't exist yet are dropped, so today each monitor has to be created by hand with its schedule copied from the code. Sending the job's schedule as the monitor config lets Sentry create the monitor and keep it in sync.

This adds SentryQuartzOptions.MonitorAllJobs, which monitors every scheduled job without adding [SentryMonitorSlug] to each job class, and ExcludedJobs to skip some by name, full key or regex. The monitor slug comes from the job key. Jobs with [SentryMonitorSlug] keep their own settings. Off by default.

services.AddQuartz(quartz =>
{
    quartz.AddSentry(options =>
    {
        options.MonitorAllJobs = true;
        options.ExcludedJobs.Add("reports.Adhoc");
        options.ExcludedJobs.Add(new Regex(@"^maintenance\."));
    });
});

Only runs fired by a trigger whose schedule Sentry can represent are monitored, so one-off runs like TriggerJob, triggers with a calendar and cron expressions Sentry can't express are skipped, as in sentry-python. Jobs with several triggers on different schedules, or that share a monitor slug with a job on a different schedule, are skipped too, since their monitor config can't be built.

Stacked on #5505, through the danf/quartz-5505-rebased branch since that PR's head is on a fork.

michaelmairegger and others added 30 commits October 8, 2026 11:14
… dependencies and streamlining SentryCronJobListener options handling
… collection parameter and streamlining option configuration
…dSentryScope method, update SentryMetricsMiddleware to support configurable options
The format-code workflow can't push its auto-fix to a fork branch, so it
fails the check instead. Applying the fix here.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Every package needs a name/packageUrl/mainDocsUrl entry so craft can create
its registry entry on first publish; a missing `name` fails the whole
registry target rather than just that package.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@wedamija
wedamija requested a review from ric-oliv as a code owner October 20, 2026 17:29
@github-actions github-actions Bot added the risk: medium PR risk score: medium label Oct 20, 2026
wedamija and others added 11 commits October 20, 2026 11:12
A job without an identity has fallen back to its class name with a debug message, not a warning, since fe97276.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Picks up #5757, which fixes the Blazor WASM E2E job on Ubuntu 26.04 runners.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Jobs that MonitorAllJobs covers now count in the shared slug check, so a
job with several triggers on different schedules still drops the
schedule, and their triggers stay in the cached lookup.

Co-Authored-By: Claude <noreply@anthropic.com>
…gers

A job left in a persistent store after its class was renamed or deleted
made the whole trigger read throw, so no monitored job sent its schedule.

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
…aptured

Co-Authored-By: Claude <noreply@anthropic.com>
…tion on

Quartz's ErrorLogger logs the exception again, wrapped in a
JobExecutionProcessException that the default DeduplicateMode doesn't
unwrap. AddSentry now adds a log entry filter for that entry, to
whichever SentryLoggingOptions the app uses (SentryAspNetCoreOptions
included), when the middleware captured the inner exception.

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
@linear-code

linear-code Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

NET-180

NET-483

wedamija and others added 3 commits October 21, 2026 11:00
Co-authored-by: Ricardo Colombo Oliveira <github@ricoliv.com>
…log filter setup

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
@wedamija
wedamija changed the base branch from danf/quartz-5505-rebased to main October 21, 2026 23:02
Comment thread src/Sentry.Quartz/Core/JobMonitor.cs Outdated
… jobs

MonitorAllJobs only covers runs whose trigger schedule Sentry can represent,
matching sentry-python. Jobs with SentryMonitorSlug keep checking in without
a config.

@jamescrosswell jamescrosswell left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM - thanks @wedamija ❤️

@jamescrosswell
jamescrosswell merged commit fe691cc into main Oct 29, 2026
47 checks passed
@jamescrosswell
jamescrosswell deleted the danf/quartz-bulk-cron branch October 29, 2026 21:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk: medium PR risk score: medium

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants