Search by

mikhailmelnikov / filament-jobs-monitor

MikhailMelnikov

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

Package info

github.com/MikhailMelnikov/filament-jobs-monitor

pkg:composer/mikhailmelnikov/filament-jobs-monitor

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-10-14 17:47 UTC

This package is auto-updated.

Last update: 2026-10-14 18:13:51 UTC


README

Плагин для Filament 5, который показывает в панели планировщик Laravel и очередь на базе БД:

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

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

Требования

  • PHP 8.3+, Laravel 12 или 13
  • Filament 5.x
  • для страниц очереди — драйвер очереди database

Установка

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

composer require mikhailmelnikov/filament-jobs-monitor

Ядро установится автоматически как зависимость. Сервис-провайдеры подключаются через package discovery.

2. Подключите плагин к панели

В провайдере панели (обычно app/Providers/Filament/AdminPanelProvider.php):

use MikhailMelnikov\FilamentJobsMonitor\FilamentJobsMonitorPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->plugin(FilamentJobsMonitorPlugin::make());
}

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

Страницы очереди читают таблицы 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 конфига ядра (см. README ядра). Страница «Планировщик» работает с любым драйвером.

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

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

FilamentJobsMonitorPlugin::make()
    ->authorize(fn (): bool => auth()->user()?->isAdmin() ?? false)

5. Проверьте

Страницы появятся в меню панели в группе «Задачи» и доступны по адресам /{путь панели}/jobs/schedule, /jobs/queue и /jobs/failed. Язык интерфейса определяется локалью приложения (APP_LOCALE): в комплекте английский и русский.

Настройка плагина

FilamentJobsMonitorPlugin::make()
    ->navigationGroup('Система')   // своя группа меню; null — без группы
    ->navigationSort(90)           // позиция первой страницы, остальные идут следом
    ->authorize(fn (): bool => auth()->user()->can('manage-jobs'))
    ->failedJobsPage(null)         // отключить страницу
Метод По умолчанию Назначение
navigationGroup(string|Closure|null) «Задачи» / «Jobs» Группа меню. null — страницы без группы.
navigationSort(?int) null Сортировка в меню.
authorize(bool|Closure) true Кто может открывать страницы.
schedulePage(?string) ScheduledTasks Класс страницы «Планировщик»; null — отключить.
queuePage(?string) QueuedJobs Класс страницы «Очередь»; null — отключить.
failedJobsPage(?string) FailedJobs Класс страницы «Упавшие задачи»; null — отключить.

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

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

Ручные действия записываются в лог с id пользователя текущей панели Filament.

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

Страницы

Унаследуйте страницу и передайте свой класс плагину:

use MikhailMelnikov\FilamentJobsMonitor\Pages\FailedJobs;

class MyFailedJobs extends FailedJobs
{
    protected static ?string $slug = 'system/failed-jobs';
}
FilamentJobsMonitorPlugin::make()->failedJobsPage(MyFailedJobs::class)

Страницы: ScheduledTasks, QueuedJobs, FailedJobs (namespace MikhailMelnikov\FilamentJobsMonitor\Pages). Таблица каждой страницы описана в методе table(), его можно переопределить целиком или дополнить через parent::table($table).

Хендлеры

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

use MikhailMelnikov\JobsMonitor\UseCase\RetryFailedJobsHandler;

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

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

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

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

Переводы и шаблоны

# переводы → lang/vendor/filament-jobs-monitor
php artisan vendor:publish --tag=filament-jobs-monitor-lang

# шаблоны модальных окон → resources/views/vendor/filament-jobs-monitor
php artisan vendor:publish --tag=filament-jobs-monitor-views

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

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

Тесты

composer install
vendor/bin/pest

Лицензия

MIT. См. LICENSE.md.