Асинхронная обработка запросов на рендеринг#

Основной сценарий:#

  • Клиентское приложение отправляет запрос на генерацию изображения дашборда.

  • Сервер принимает запрос и помещает задачу в очередь сообщений (например, RabbitMQ, Redis Queue).

  • Возвращает клиенту ответ с идентификатором задачи (task_id) и статусом accepted.

  • Отдельный воркер извлекает задачу из очереди.

  • Воркер запускает процесс рендеринга: открывает дашборд в headless-браузере, делает скриншот, сохраняет PNG.

  • После успешного завершения воркер сохраняет результат (ссылку на файл или бинарные данные) и обновляет статус задачи на completed.

  • Клиент периодически опрашивает API по task_id, чтобы проверить статус.

  • При получении статуса completed клиент забирает результат.

Альтернативный сценарий:#

  • Если очередь задач перегружена, новые задачи помещаются в очередь с приоритетом в зависимости от роли пользователя или типа дашборда.

  • Клиент может подписаться на вебхук-уведомление: после завершения обработки сервер отправляет результат на указанный URL.

  • При наличии кэшированной версии изображения (по параметрам запроса) задача не ставится в очередь — возвращается готовый результат.

Исключительный сценарий:#

  • Если воркер не может обработать задачу (ошибка рендеринга, недоступен дашборд), статус задачи обновляется на failed, в лог записывается ошибка.

  • При превышении времени обработки (тайм-аут) задача помечается как failed, клиенту возвращается ошибка 504 Gateway Timeout.

  • Если очередь недоступна, сервер возвращает 503 Service Unavailable.

  • При отсутствии прав доступа к дашборду — возвращается 403 Forbidden.

  • Если клиент опрашивает несуществующий task_id — возвращается 404 Not Found.