Search by

mikhailmelnikov / backpack-jobs-monitor

MikhailMelnikov

Backpack for Laravel add-on: scheduler tasks and database queue jobs in the admin panel — list, run, retry, forget, flush.

Package info

github.com/MikhailMelnikov/backpack-jobs-monitor

pkg:composer/mikhailmelnikov/backpack-jobs-monitor

Statistics

Installs: 6

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.1.0 2026-10-14 17:12 UTC

This package is auto-updated.

Last update: 2026-10-14 17:12:58 UTC


README

Аддон для Backpack for Laravel, который показывает в админке планировщик Laravel и очередь на базе БД:

  • страница «Планировщик» — все задачи с расписанием в понятном виде и временем следующего запуска; ручной запуск задачи: В очередь (отправить её job в очередь) или Сейчас (выполнить прямо в запросе);
  • страница «Очередь» — счётчики ожидающих / выполняющихся / отложенных / упавших задач, список задач в очереди (удаление), упавшие задачи с ошибкой, стектрейсом, payload и адресом получателя уведомления (повтор, повтор всех, удаление, очистка).

Вся логика находится в ядре mikhailmelnikov/laravel-jobs-monitor, которое не зависит от админки; этот пакет — интерфейс для Backpack поверх него.

Требования

  • PHP 8.3+, Laravel 12 или 13
  • Backpack CRUD 6.x или 7.x (рекомендуется тема Tabler)
  • для страницы «Очередь» — драйвер очереди database

Установка

1. Установите пакет

composer require mikhailmelnikov/backpack-jobs-monitor

Ядро mikhailmelnikov/laravel-jobs-monitor установится автоматически как зависимость. Сервис-провайдеры подключаются через package discovery — регистрировать их вручную не нужно.

2. Подготовьте таблицы очереди

Страница «Очередь» читает таблицы jobs и failed_jobs. В новом приложении Laravel они уже есть в стандартных миграциях. Если их нет:

php artisan make:queue-table
php artisan make:queue-failed-table
php artisan migrate

В .env должен быть указан драйвер database:

QUEUE_CONNECTION=database

Если основная очередь работает на другом драйвере, укажите нужное подключение в queue_connection конфига ядра (см. ниже). Страница «Планировщик» работает с любым драйвером.

3. Добавьте пункты в меню (необязательно)

php artisan backpack-jobs-monitor:install

Команда добавит в resources/views/vendor/backpack/ui/inc/menu_items.blade.php выпадающий пункт меню. Его можно вставить и вручную:

<x-backpack::menu-dropdown :title="trans('mikhailmelnikov.backpack-jobs-monitor::ui.menu.title')" icon="la la-tasks">
    <x-backpack::menu-dropdown-item :title="trans('mikhailmelnikov.backpack-jobs-monitor::ui.schedule.title')" icon="la la-clock" :link="route('jobs-monitor.schedule')" />
    <x-backpack::menu-dropdown-item :title="trans('mikhailmelnikov.backpack-jobs-monitor::ui.queue.title')" icon="la la-stream" :link="route('jobs-monitor.queue')" />
</x-backpack::menu-dropdown>

4. Ограничьте доступ (рекомендуется)

По умолчанию страницы доступны любому пользователю Backpack. Чтобы пустить только администраторов, опубликуйте конфиг и добавьте свой middleware:

php artisan vendor:publish --provider="MikhailMelnikov\BackpackJobsMonitor\AddonServiceProvider" --tag=config
// config/mikhailmelnikov/backpack-jobs-monitor.php
'middleware' => [\App\Http\Middleware\CheckIfAdmin::class],

5. Проверьте

Страницы доступны по адресам admin/jobs/schedule и admin/jobs/queue (префикс admin берётся из backpack.base.route_prefix). Язык интерфейса определяется локалью приложения (APP_LOCALE): в комплекте английский и русский.

Если в проекте включён кеш маршрутов или конфига, сбросьте его:

php artisan optimize:clear

Настройка

config/mikhailmelnikov/backpack-jobs-monitor.php:

Ключ По умолчанию Назначение
setup_routes true Регистрировать маршруты. Укажите false, чтобы описать свои маршруты к контроллерам аддона.
route_prefix jobs Путь внутри префикса Backpack.
middleware [] Дополнительные middleware поверх web и admin-middleware Backpack, например проверка роли: [\App\Http\Middleware\CheckIfAdmin::class].

Настройки ядра (подключение очереди, размер страницы, атрибут с адресом получателя и т. д.) находятся в config/jobs-monitor.php — см. README ядра. Опубликовать его можно так:

php artisan vendor:publish --tag=jobs-monitor-config

Ручные действия записываются в лог с id пользователя Backpack (backpack_auth()).

Переопределение

Шаблоны и переводы

# шаблоны → resources/views/vendor/mikhailmelnikov/backpack-jobs-monitor
php artisan vendor:publish --provider="MikhailMelnikov\BackpackJobsMonitor\AddonServiceProvider" --tag=views

# переводы → lang/vendor/mikhailmelnikov.backpack-jobs-monitor
php artisan vendor:publish --provider="MikhailMelnikov\BackpackJobsMonitor\AddonServiceProvider" --tag=lang

Замена контроллеров и хендлеров

Контроллеры аддона и хендлеры ядра создаются через сервис-контейнер Laravel, поэтому любой из них можно подменить своим классом через bind, например в AppServiceProvider::register():

use App\Http\Controllers\Admin\MyQueueJobsController;
use App\Jobs\Monitor\MyRetryFailedJobsHandler;
use MikhailMelnikov\BackpackJobsMonitor\Http\Controllers\QueueJobsController;
use MikhailMelnikov\JobsMonitor\UseCase\RetryFailedJobsHandler;

public function register(): void
{
    // свой контроллер для маршрутов admin/jobs/queue
    $this->app->bind(QueueJobsController::class, MyQueueJobsController::class);

    // свой хендлер вместо хендлера ядра
    $this->app->bind(RetryFailedJobsHandler::class, MyRetryFailedJobsHandler::class);
}
use MikhailMelnikov\JobsMonitor\UseCase\RetryFailedJobsHandler;

class MyRetryFailedJobsHandler extends RetryFailedJobsHandler
{
    public function handle(): string
    {
        // своя логика до/после
        return parent::handle();
    }
}

Контроллеры: ScheduledJobsController, QueueJobsController (namespace MikhailMelnikov\BackpackJobsMonitor\Http\Controllers). Свой контроллер удобнее всего унаследовать от исходного и переопределить нужные методы.

Хендлеры (namespace MikhailMelnikov\JobsMonitor\UseCase) и аргументы, которые контроллер передаёт в конструктор:

Хендлер Аргументы
GetScheduledTasksHandler, CountFailedJobsHandler, GetQueueOverviewHandler, GetQueuedJobsHandler, GetFailedJobsHandler, FlushFailedJobsHandler —
RunScheduledTaskHandler taskId, mode
DeleteQueuedJobHandler id
DeleteFailedJobHandler uuid
RetryFailedJobsHandler uuids (не передаётся при «Повторить все»)

Аргументы передаются по имени, поэтому в своём хендлере сохраните имена параметров конструктора. При привязке через замыкание они приходят вторым аргументом: fn ($app, array $parameters) => new MyHandler($parameters['id']).

Безопасность

Запуск задач планировщика и очистка упавших задач — мощные действия. По умолчанию страницы доступны всем пользователям Backpack — при необходимости ограничьте доступ через опцию middleware.

Тесты

composer install
vendor/bin/pest

Лицензия

MIT. См. LICENSE.md.