Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Sentry Symfony Cron Monitor Laravel Package

bml/sentry-symfony-cron-monitor

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require bml/sentry-symfony-cron-monitor
    

    Ensure your project uses Symfony components (or Laravel with Symfony bridge) since this is a Symfony-focused package.

  2. Configuration Add to your config/services.php (or equivalent Laravel config):

    'sentry' => [
        'dsn' => env('SENTRY_DSN'),
        'options' => [
            'cron_monitor' => [
                'enabled' => env('SENTRY_CRON_MONITOR_ENABLED', true),
                'cron_expression' => env('CRON_EXPRESSION', '* * * * *'),
            ],
        ],
    ],
    
  3. First Use Case Monitor a Laravel scheduled task (e.g., app/Console/Kernel.php):

    use Bml\Sentry\CronMonitor\CronMonitor;
    
    protected function schedule(CronMonitor $monitor)
    {
        $monitor->monitor('daily-backup', '0 3 * * *', function () {
            // Your backup logic here
        });
    }
    

Implementation Patterns

Workflow Integration

  1. Laravel Task Scheduling Extend Laravel’s schedule() method with Sentry monitoring:

    $schedule->call(function () {
        // Task logic
    })->cron('* * * * *')->monitorWithSentry('task-name');
    
  2. Symfony Console Commands Wrap Symfony commands for monitoring:

    use Bml\Sentry\CronMonitor\CronMonitor;
    
    class BackupCommand extends Command
    {
        protected function execute(InputInterface $input, OutputInterface $output, CronMonitor $monitor)
        {
            $monitor->monitor('backup', '* * * * *', function () {
                // Command logic
            });
        }
    }
    
  3. Event-Based Triggers Use Laravel events to dynamically register cron jobs:

    Event::listen('cron.job.registered', function ($job) {
        $monitor->monitor($job->name, $job->expression, $job->callback);
    });
    

Best Practices

  • Naming Conventions: Use descriptive names for cron jobs (e.g., sync-users).
  • Environment Awareness: Disable monitoring in local environments:
    if (app()->environment('local')) {
        $monitor->disable();
    }
    
  • Rate Limiting: Avoid overloading Sentry with excessive events by filtering critical jobs only.

Gotchas and Tips

Pitfalls

  1. Symfony Dependency

    • Laravel projects must bridge Symfony components (e.g., symfony/console) or use a facade wrapper.
    • Fix: Install symfony/console and adapt the package’s CronMonitor class.
  2. Cron Expression Mismatch

    • Incorrect expressions (e.g., * * * * * *) will fail silently.
    • Tip: Validate with crontab.guru before deployment.
  3. Sentry DSN Misconfiguration

    • Missing or invalid SENTRY_DSN causes silent failures.
    • Debug: Check Sentry’s issue tracker for unprocessed events.

Debugging

  • Log Monitoring Events Add a listener to log cron job statuses:

    $monitor->on('job.started', function ($job) {
        Log::debug("Cron job started: {$job->name}");
    });
    
  • Manual Trigger Testing Force a test run in Tinker:

    php artisan tinker
    >>> $monitor->trigger('test-job');
    

Extension Points

  1. Custom Event Handlers Override default Sentry events:

    $monitor->on('job.failed', function ($job, $exception) {
        Sentry::captureException($exception, [
            'tags' => ['job' => $job->name, 'type' => 'critical']
        ]);
    });
    
  2. Dynamic Job Registration Fetch cron jobs from a database:

    $jobs = DB::table('cron_jobs')->get();
    foreach ($jobs as $job) {
        $monitor->monitor($job->name, $job->expression, $job->callback);
    }
    
  3. Laravel Horizon Integration Monitor Horizon jobs by extending the CronMonitor class to listen to Horizon events.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle