Поля progress и progressmsg удалены из схемы таблицы data БД SQLite. Теперь прогресс хранится и обрабатывается исключительно через кеш.
Добавлен новый метод GetProgress (modules/Queue/__call/GetProgress.inc) для централизованного получения статуса выполнения задачи.
Обновлены функции GetState, GetTaskInfo и ClearTimeoutedTasks: теперь они используют UseModule('Queue')->GetProgress() вместо прямого чтения из кеша.
Метод SetProgress улучшен: добавлена проверка актуального состояния задачи в БД перед обновлением прогресса. Это предотвращает "воскрешение" (фантомную работу) уже завершенных или удаленных задач.
Мониторинг прогресса через лог-файлы:
Диспетчер задач (ProcessDispatcher) теперь умеет отслеживать прогресс выполнения, читая внешний лог-файл (monitorLogFile), если он задан.
Добавлена поддержка метода GetProgressByLog для пользовательских Action-классов, который позволяет парсить строки лога и извлекать из них текущий прогресс.
Добавлен метод SetMonitorLogFile для динамической привязки лога к задаче.
Улучшение управления процессами (убийство зависших потоков):
Команды принудительного завершения процессов в KillThread, KillAllStuck и ProcessDispatcher обновлены для корректного завершения дочерних процессов.
Для Windows добавлен флаг /T (убивает древо процессов).
Для Linux добавлена предварительная команда pkill -9 -P (убивает дочерние процессы по PID родителя).
Защита от критических сбоев в потоках:
В ProcessThread.inc добавлен вызов ignoreuserabort(true).
Выполнение полезной нагрузки задачи ($c->Exec()) теперь обернуто в блок try...catch (Throwable). Если задача падает с фатальной ошибкой (Exception/Error), перехватчик запишет ошибку и stack trace в Queue.log и корректно пометит задачу статусом 3 (ошибка), не позволяя потоку "зависнуть" навсегда.
Отображение в интерфейсе (UI):
В InfoQueue.page (JavaScript) улучшена логика отображения статусов. Теперь бейдж с процентами рисуется только если прогресс строго больше 0, а текстовые сообщения (progressmsg) могут корректно отображаться даже без числового прогресса.
Мелкие исправления:
В SqlInsert запрос INSERT переписан с явным указанием столбцов (т.к. поля прогресса были убраны).
В StartThread в URL добавлен параметр qworkerid для более точной синхронизации.