Как реализовать отслеживание для долгосрочного импорта в Laravel

Это скорее архитектурный вопрос.

Я собираюсь кодировать кучу реализаций импорта. Все они ожидают некоторых параметров (то есть файла CSV), а затем займут некоторое время, чтобы продолжить. В моем предыдущем проекте я отправлял эти Imports в фоновом режиме, используя команду «shell_exec ()», а затем отслеживал файл журнала в браузере, чтобы сообщить о состоянии. Теперь я очень надеюсь, что Laravel возьмет на себя ответственность за то, чтобы упорядочить всю эту ручную работу.

На данный момент мой вопрос будет о предлагаемой архитектуре класса за этим.


Мои требования К куче импортных товаров относятся:

  • Каждый импорт нужно запускать как фоновый процесс
  • Мониторинг прогресса в браузере (и лог-файл)
  • Начать импорт в консоли и через HTTP

Прямо сейчас я планирую использовать «Задание» в L5.1 для реализации базового импорта. То, с чем я борюсь, это реализация какой-то «индикатора выполнения» и отслеживание (самых последних) «сообщений журнала» в браузере. Мне не нужен реальный «живой» вид через сокеты, но должна быть возможность регулярно обновлять вид прогресса работающего импорта.

  • У кого-нибудь есть намеки, как реализовать этот прогресс?

Мой подход пока:
Прочитайте файл CSV, поместите каждую строку в элемент очереди и следите за очередью. Сообщения журнала могут вызвать событие, которое заполняет стек самых последних сообщений журнала. (Я могу столкнуться с условиями гонки, потому что некоторые строки могут зависеть от предыдущей обработки другой строки)

1

Решение

Я хотел бы сделать модель ActiveBackgroundTask, как это:

  • handler_class_name
  • государство
  • прогресс
  • latest_log_messages
  • результат

И создайте задачу cron в вашей системе, чтобы периодически проверять эту таблицу и запускать задачи, которые появляются в этой таблице в состоянии created, Каждое задание проходит свое id в таблице периодически обновлять result а также latest_log_messages поле.

Вы можете расширить эту идею, например, стандартизировав расположение файлов журналов для каждой задачи, чтобы можно было извлечь не только последние сообщения, но и загрузить полный журнал задач.

В этом случае состояние каждой задачи можно очень легко проверить с помощью любого скрипта в вашей системе.

Будет проблема с обнаружением мертвых задач, которые были прерваны из-за ошибки или исключения PHP. Если вам это нужно, вы можете сохранить процесс PHP PIDs и этот скрипт cron может проверить, если задачи с running государство все еще действительно работает.

Это соответствует вашим потребностям?

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]