Перейти к основному содержимому

sTask для Evolution CMS

sTask Latest Stable Version CMS Evolution PHP version License Issues Stars Total Downloads

Добро пожаловать в 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";
}

Случаи использования

Электронная коммерция

  • Импорт/экспорт товаров - Массовое управление данными товаров
  • Синхронизация инвентаря - Синхронизация остатков с внешними системами
  • Обработка заказов - Пакетная обработка заказов
  • Обновление цен - Массовые изменения цен
  • Реорганизация категорий - Реструктуризация каталогов товаров

Управление контентом

  • Миграция контента - Перемещение контента между системами
  • Оптимизация изображений - Пакетная обработка изображений
  • Перестройка индекса поиска - Обновление баз данных поиска
  • Генерация sitemap - Создание XML-карт сайта
  • Прогрев кеша - Предварительное создание кешированных страниц

Маркетинг

  • Email кампании - Массовая рассылка email
  • Распространение рассылок - Отправка подписчикам
  • Генерация отчетов - Создание аналитических отчетов
  • Экспорт данных - Экспорт данных пользователей
  • Обработка аналитики - Обработка данных отслеживания

Системное обслуживание

  • Очистка базы данных - Удаление старых записей
  • Архивирование логов - Архивирование и сжатие логов
  • Операции резервного копирования - Создание системных бекапов
  • Очистка файлов - Удаление временных файлов
  • Проверки здоровья - Задачи мониторинга системы

Требования

  • Evolution CMS 3.7+
  • PHP 8.3+
  • Composer 2.2+
  • Одна из: MySQL 8.0+ / MariaDB 10.5+ / PostgreSQL 10+ / SQLite 3.25+

Установка

cd core
composer update
php artisan package:installrequire seiger/stask "*"
php artisan vendor:publish --tag=stask
php artisan migrate

Настройте cron для обработки задач:

* * * * * cd /path/to/your/project && php artisan schedule:run >> /dev/null 2>&1

Смотрите Начало работы для детальных инструкций установки.

Производительность

sTask разработан для эффективности:

  • Отслеживание прогресса на основе файлов - Без нагрузки на базу данных во время выполнения
  • Атомарные файловые операции - Потокобезопасные обновления прогресса
  • Автоматическая сборка мусора - Очистка старых файлов прогресса
  • Пакетная обработка - Эффективная обработка множественных задач
  • Очередь приоритетов - Выполнение высокоприоритетных задач первыми
  • Управление памятью - Подходит для больших наборов данных

Показатели производительности

Типичная производительность на стандартном оборудовании:

ОперацияСкорость
Создание задачи~5мс
Обновление прогресса~2мс
Запись лога~3мс
Завершение задачи~8мс
Обнаружение воркеров~100мс

Обработка 10,000 элементов:

  • Малые элементы (< 1KB): ~30 секунд
  • Средние элементы (< 100KB): ~2 минуты
  • Большие элементы (< 1MB): ~5 минут

Производительность зависит от сложности задачи и системных ресурсов.

Будущие возможности

  • Планирование задач - Планирование задач как cron
  • Зависимости задач - Цепочки задач
  • Email уведомления - Получайте уведомления о завершении
  • Метрики производительности - Аналитика и статистика задач
  • Поддержка вебхуков - Интеграция внешних систем
  • Шаблоны задач - Многоразовые конфигурации задач
  • Поддержка мультисерверов - Распределение задач между серверами
  • Расширенные алгоритмы очереди - Лучшая приоритизация
  • Группы задач - Группировка связанных задач
  • Условное выполнение - Запуск задач на основе условий

Сообщество и поддержка

Вклад

Вклады приветствуются! Пожалуйста:

  1. Сделайте форк репозитория
  2. Создайте ветку для функции
  3. Сделайте свои изменения
  4. Напишите тесты, если возможно
  5. Подайте pull request

Лицензия

sTask — это программное обеспечение с открытым исходным кодом, лицензированное по MIT лицензии.

Авторы

Разработано и поддерживается Seiger.

Построено с: