sTask для Evolution CMS
Добро пожаловать в sTask!
sTask — это мощная система управления асинхронными задачами, разработ анная специально для Evolution CMS. Она предоставляет надежный фреймворк для создания, выполнения и мониторинга фоновых задач с автоматическим обнаружением воркеров, комплексным логированием и отслеживанием прогресса в реальном времени.
Независимо от того, нужно ли вам обрабатывать большие импорты данных, генерировать отчеты, отправлять массовые email-рассылки, синхронизировать с внешними системами, или выполнять другие ресурсоемкие операции, sTask предоставляет инструменты для эффективной обработки этих задач без блокировки основного приложения.
👉 Начните с Начало работы или исследуйте Руководство разработчика.
Ключевые возможности
✅ Управление асинхронными задачами
- Создание и выполнение фоновых задач - Выполняйте длинные операции без блокировки
- Система приоритетов задач (низкий, обычный, высокий) - Контролируйте порядок выполнения
- Автоматический механизм повторных попыток - Настраиваемое количество попыток для неудачных задач
- Отслеживание прогресса задач (0-100%) - Обновления прогресса в реальном времени
- Мониторинг статуса задач - Отслеживайте задачи в течение их жизненного цикла
pending- Ожидает выполненияrunning- Выполняется сейчасcompleted- Успешно завершеноfailed- Выполнение неудачноcancelled- Отменено вручную
✅ Система воркеров
- Автоматическое обнаружение воркеров - Сканирование установлен ных пакетов на наличие воркеров
- Регистрация и управление воркерами - Активация/деактивация воркеров
- Валидация воркеров - Проверка соответствия требованиям интерфейса
- Множественные действия на воркер - Один воркер может обрабатывать несколько типов задач
- Организация по scope - Фильтрация воркеров по модулю/пакету
- Собственная реализация воркеров - Расширяйте
BaseWorkerдля собственной логики
✅ Логирование на основе файлов
- Комплексные логи выполнения задач - Детальные логи для каждой задачи
- Фильтрация логов по уровню (info, warning, error) - Находите нужные записи
- Загрузка и управление логами - Экспортируйте логи для анализа
- Автоматическая очистка логов - Удаление старых логов автоматически
- Снимки прогресса - Файлы прогресса в реальном времени в
storage/stask/
✅ Административный интерфейс
- Панель со статистикой задач - Обзор всех задач
- Панель управления воркерами - Обнаружение, активация, управление воркерами
- Мониторинг задач в реальном времени - Наблюдайте за выполнением задач
- Элементы управления выполнением задач - Запуск, остановка, повтор задач
- Чистый и современный UI - Построено с Tailwind CSS
✅ Интеграция
- Интеграция с менеджером Evolution CMS - Доступ из меню Инструменты
- Интеграция меню с собственным логотипом - Фирменный пункт меню
- Artisan команды - CLI инструменты для управления задачами
- Composer пакет - Легкая установка и обновление
- Автоматическая публикация ресурсов - Автоматическое управление ресурсами
✅ Удобство для разработчиков
- Простой API - Легкий в использовании facade и модели
- Хорошо задокументировано - Комплексная документация
- PSR-4 автозагрузка - Стандартная PHP структура
- Laravel интеграция - Использует компоненты Laravel
- Расширяемая архитектура - Легко расширять и настраивать
Архитектура системы
┌──────────────────────────────────────────┐
│ Архитектура sTask │
├──────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Воркеры │ │ Задачи │ │
│ ├──────────────┤ ├──────────────┤ │
│ │ Product │─────>│ Import CSV │ │
│ │ Email │─────>│ Send Campaign│ │
│ │ Report │─────>│ Generate PDF │ │
│ │ Cleanup │─────>│ Archive Data │ │
│ └──────────────┘ └──────────────┘ │
│ │ │ │
│ v v │
│ ┌────────────────────────────────┐ │
│ │ BaseWorker Класс │ │
│ ├────────────────────────────────┤ │
│ │ - createTask() │ │
│ │ - invokeAction() │ │
│ │ - pushProgress() │ │
│ │ - markFinished() │ │
│ │ - markFailed() │ │
│ └────────────────────────────────┘ │
│ │ │ │
│ v v │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Прогресс │ │ Логи │ │
│ │ Tracking │ │ Система │ │
│ ├──────────────┤ ├──────────────┤ │
│ │ storage/ │ │ storage/ │ │
│ │ stask/ │ │ stask/ │ │
│ │ {id}.json │ │ {id}.log │ │
│ └──────────────┘ └──────────────┘ │
│ │
└──────────────────────────────────────────┘
Быстрый пример
Создайте воркер
<?php namespace MyPackage\Workers;
use Seiger\sTask\Workers\BaseWorker;
use Seiger\sTask\Models\sTaskModel;
class ProductWorker extends BaseWorker
{
public function identifier(): string { return 'product'; }
public function scope(): string { return 'mypackage'; }
public function icon(): string { return '<i class="fa fa-cube"></i>'; }
public function title(): string { return 'Product Worker'; }
public function description(): string { return 'Импорт и экспорт товаров'; }
public function renderWidget(): string
{
return view('mypackage::widgets.product')->render();
}
public function settings(): array
{
return ['batch_size' => 100];
}
// Действие: Импорт товаров
public function taskImport(sTaskModel $task, array $options = []): void
{
$file = $options['file'];
$products = $this->readCsv($file);
$total = count($products);
foreach ($products as $i => $product) {
$this->importProduct($product);
// Обновление прогресса
$this->pushProgress($task, [
'progress' => (int)(($i + 1) / $total * 100),
'processed' => $i + 1,
'total' => $total,
]);
}
$this->markFinished($task, null, "Импортировано {$total} товаров");
}
}
Используйте воркер
use Seiger\sTask\Facades\sTask;
// Создать задачу
$task = sTask::create(
identifier: 'product',
action: 'import',
data: ['file' => 'products.csv'],
priority: 'high'
);
// Обработать задачи
$processed = sTask::processPendingTasks();
// Проверить статус
if ($task->fresh()->isFinished()) {
echo "Импорт завершен!\n";
}