mikhailmelnikov / filament-jobs-monitor
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
Requires
- php: ^8.3
- filament/filament: ^5.0
- mikhailmelnikov/laravel-jobs-monitor: ^1.2
Requires (Dev)
- laravel/pint: ^1.13
- orchestra/testbench: ^10.0|^11.0
- pestphp/pest: ^3.0|^4.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
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.