All Projects → spatie → Laravel Schedule Monitor

spatie / Laravel Schedule Monitor

Licence: mit
Monitor scheduled tasks in a Laravel app

Projects that are alternatives of or similar to Laravel Schedule Monitor

Laravel Server Monitor
Don't let your servers just melt down
Stars: ✭ 595 (+51.4%)
Mutual labels:  laravel, monitor
Laravel Google Calendar
Manage events on a Google Calendar
Stars: ✭ 787 (+100.25%)
Mutual labels:  schedule, laravel
Laravel Api Health
Monitor first and third-party services and get notified when something goes wrong!
Stars: ✭ 65 (-83.46%)
Mutual labels:  laravel, monitor
Laravel Failed Job Monitor
Get notified when a queued job fails
Stars: ✭ 582 (+48.09%)
Mutual labels:  laravel, monitor
Schedule
Schedule is a package that helps tracking schedules for your models. If you have workers in a company, you can set schedules for them and see their availability though the time.
Stars: ✭ 155 (-60.56%)
Mutual labels:  schedule, laravel
Health
Laravel Health Panel
Stars: ✭ 1,774 (+351.4%)
Mutual labels:  laravel, monitor
Servermonitor
💓 Laravel package to periodically monitor the health of your server and application.
Stars: ✭ 148 (-62.34%)
Mutual labels:  laravel, monitor
Laravel Stager
Laravel Stager State Machine, Its purpose is to add state machine functionality to models
Stars: ✭ 16 (-95.93%)
Mutual labels:  schedule, laravel
Laravel Database Schedule
Manage your Laravel Task Scheduling in a friendly interface and save schedules to the database.
Stars: ✭ 94 (-76.08%)
Mutual labels:  schedule, laravel
Forsun Laravel
高性能的定时调度服务。
Stars: ✭ 91 (-76.84%)
Mutual labels:  schedule, laravel
Pagerbeauty
📟✨ PagerDuty on-call widget for monitoring dashboard. Datadog and Grafana compatible
Stars: ✭ 250 (-36.39%)
Mutual labels:  schedule, monitor
Icalendar Generator
Generate calendars in the iCalendar format
Stars: ✭ 193 (-50.89%)
Mutual labels:  schedule, laravel
Laravel Short Schedule
Schedule artisan commands to run at a sub-minute frequency
Stars: ✭ 297 (-24.43%)
Mutual labels:  schedule, laravel
Atop
System and process monitor for Linux
Stars: ✭ 381 (-3.05%)
Mutual labels:  monitor
Collision
💥 Collision is a beautiful error reporting tool for command-line applications
Stars: ✭ 3,993 (+916.03%)
Mutual labels:  laravel
Laravel Flash
A lightweight package to flash messages
Stars: ✭ 382 (-2.8%)
Mutual labels:  laravel
Google Maps
Collection of Google Maps API Web Services for Laravel
Stars: ✭ 380 (-3.31%)
Mutual labels:  laravel
Laravel Csp
Set content security policy headers in a Laravel app
Stars: ✭ 388 (-1.27%)
Mutual labels:  laravel
Polr
🚡 A modern, powerful, and robust URL shortener
Stars: ✭ 4,147 (+955.22%)
Mutual labels:  laravel
Laravel Report Generator
Rapidly Generate Simple Pdf, CSV, & Excel Report Package on Laravel
Stars: ✭ 380 (-3.31%)
Mutual labels:  laravel

Monitor scheduled tasks in a Laravel app

Latest Version on Packagist Tests Total Downloads

This package will monitor your Laravel schedule. It will write an entry to a log table in the db each time a schedule tasks starts, end, fails or is skipped. Using the list command you can check when the scheduled tasks have been executed.

screenshot

This package can also sync your schedule with Oh Dear. Oh Dear will send you a notification whenever a scheduled task doesn't run on time or fails.

Support us

We invest a lot of resources into creating best in class open source packages. You can support us by buying one of our paid products.

We highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using. You'll find our address on our contact page. We publish all received postcards on our virtual postcard wall.

Installation

You can install the package via composer:

composer require spatie/laravel-schedule-monitor

Preparing the database

You must publish and run migrations:

php artisan vendor:publish --provider="Spatie\ScheduleMonitor\ScheduleMonitorServiceProvider" --tag="migrations"
php artisan migrate

Publishing the config file

You can publish the config file with:

php artisan vendor:publish --provider="Spatie\ScheduleMonitor\ScheduleMonitorServiceProvider" --tag="config"

This is the contents of the published config file:

return [
    /*
     * The schedule monitor will log each start, finish and failure of all scheduled jobs.
     * After a while the `monitored_scheduled_task_log_items` might become big.
     * Here you can specify the amount of days log items should be kept.
     */
    'delete_log_items_older_than_days' => 30,

    /*
     * The date format used for all dates displayed on the output of commands
     * provided by this package.
     */
    'date_format' => 'Y-m-d H:i:s',

    /*
     * Oh Dear can notify you via Mail, Slack, SMS, web hooks, ... when a
     * scheduled task does not run on time.
     *
     * More info: https://ohdear.app/cron-checks
     */
    'oh_dear' => [
        /*
         * You can generate an API token at the Oh Dear user settings screen
         *
         * https://ohdear.app/user-settings/api
         */
        'api_token' => env('OH_DEAR_API_TOKEN', ''),

        /*
         *  The id of the site you want to sync the schedule with.
         *
         * You'll find this id on the settings page of a site at Oh Dear.
         */
        'site_id' => env('OH_DEAR_SITE_ID'),

        /*
         * To keep scheduled jobs as short as possible, Oh Dear will be pinged
         * via a queued job. Here you can specify the name of the queue you wish to use.
         */
        'queue' => env('OH_DEAR_QUEUE'),
    ],
];

Cleaning the database

You must register the schedule-monitor:clean tasks in your console kernel. This command will clean up old records from the schedule monitor log table.

// app/Console/Kernel.php

class Kernel extends ConsoleKernel
{
    protected function schedule(Schedule $schedule)
    {
        $schedule->command('schedule-monitor:sync')->dailyAt('04:56');
        $schedule->command('schedule-monitor:clean')->daily();
    }
}

Syncing the schedule

Every time you deploy your application, you should execute the schedule-monitor:sync command

schedule-monitor:sync

This command is responsible for syncing your schedule with the database, and optionally Oh Dear. We highly recommend adding this command to the script that deploys your production environment.

In a non-production environment you should manually run schedule-monitor:sync. You can verify if everything synced correctly using schedule-monitor:list.

Usage

To monitor your schedule you should first run schedule-monitor:sync. This command will take a look at your schedule and create an entry for each task in the monitored_scheduled_tasks table.

screenshot

To view all monitored scheduled tasks, you can run schedule-monitor:list. This command will list all monitored scheduled tasks. It will show you when a scheduled task has last started, finished, or failed.

screenshot

The package will write an entry to the monitored_scheduled_task_log_items table in the db each time a schedule tasks starts, end, fails or is skipped. Take a look at the contest of that table if you want to know when and how scheduled tasks did execute. The log items also hold other interesting metrics like memory usage, execution time, and more.

Naming tasks

Schedule monitor will try to automatically determine a name for a scheduled task. For commands this is the command name, for anonymous jobs the class name of the first argument will be used. For some tasks, like scheduled closures, a name cannot be determined automatically.

To manually set a name of the scheduled task, you can tack on monitorName().

Here's an example.

// in app/Console/Kernel.php

protected function schedule(Schedule $schedule)
{
   $schedule->command('your-command')->daily()->monitorName('a-custom-name');
   $schedule->call(fn () => 1 + 1)->hourly()->monitorName('addition-closure');
}

When you change the name of task, the schedule monitor will remove all log items of the monitor with the old name, and create a new monitor using the new name of the task.

Setting a grace time

When the package detects that the last run of a scheduled task did not run in time, the schedule-monitor list will display that task using a red background color. In this screenshot the task named your-command ran too late.

screenshot

The package will determine that a task ran too late if it was not finished at the time it was supposed to run + the grace time. You can think of the grace time as the number of minutes that a task under normal circumstances needs to finish. By default, the package grants a grace time of 5 minutes to each task.

You can customize the grace time by using the graceTimeInMinutes method on a task. In this example a grace time of 10 minutes is used for the your-command task.

// in app/Console/Kernel.php

protected function schedule(Schedule $schedule)
{
   $schedule->command('your-command')->daily()->graceTimeInMinutes(10);
}

Ignoring scheduled tasks

You can avoid a scheduled task being monitored by tacking on doNotMonitor when scheduling the task.

// in app/Console/Kernel.php

protected function schedule(Schedule $schedule)
{
   $schedule->command('your-command')->daily()->doNotMonitor();
}

Getting notified when a scheduled task doesn't finish in time

This package can sync your schedule with the Oh Dear cron check. Oh Dear will send you a notification whenever a scheduled task does not finish on time.

To get started you will first need to install the Oh Dear SDK.

composer require ohdearapp/ohdear-php-sdk

Next you, need to make sure the api_token and site_id keys of the schedule-monitor are filled with an API token, and an Oh Dear site id. To verify that these values hold correct values you can run this command.

php artisan schedule-monitor:verify

screenshot

To sync your schedule with Oh Dear run this command:

php artisan schedule-monitor:sync

screenshot

After that, the list command should show that all the scheduled tasks in your app are registered on Oh Dear.

screenshot

To keep scheduled jobs as short as possible, Oh Dear will be pinged via queued jobs. To ensure speedy delivery to Oh Dear, and to avoid false positive notifications, we highly recommend creating a dedicated queue for these jobs. You can put the name of that queue in the queue key of the config file.

Oh Dear will wait for the completion of a schedule tasks for a given amount of minutes. This is called the grace time. By default, all scheduled tasks will have a grace time of 5 minutes. To customize this value, you can tack on graceTimeInMinutes to your scheduled tasks.

Here's an example where Oh Dear will send a notification if the task didn't finish by 00:10.

// in app/Console/Kernel.php

protected function schedule(Schedule $schedule)
{
   $schedule->command('your-command')->daily()->graceTimeInMinutes(10);
}

Unsupported methods

Currently, this package does not work for tasks that use these methods:

  • between
  • unlessBetween
  • when
  • skip

Third party scheduled task monitors

We assume that, when your scheduled tasks do not run properly, a scheduled task that sends out notifications would probably not run either. That's why this package doesn't send out notifications by itself.

These services can notify you when scheduled tasks do not run properly:

Testing

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].