Celery — вывод на фронт

Admin Flask, Python Errors

Выводим результаты работы периодических задач Celery на фронт.

Для этих целей можно установить flower. Но у него есть ряд недостатков:

  • Доступ на сервере настраивается витиевато: либо дополнительно писать конфиги в Nginx либо подключаться через google api. На мой взгляд слишком далеко от кода все это, потом не вспомнить где это лежит.
  • Нет мониторинга записанных в БД задач. Мониторинг только в лайв режиме.

Все недостатки легко обойти быстро соорудив страницу в админке для просмотра результатов работы периодических задач.

Весь код:

from flask import Blueprint, json
from flask_login import login_required
from app import db

celery_bp = Blueprint('celery_bp', __name__)


def serialize_query(msg):
    return {
        "task_id": msg.task_id,
        "status": msg.status,
        "result": msg.result.tobytes().decode('utf-8', errors='ignore').replace(
            '\x05C\x00\x00\x00\x00\x00\x00\x00?', ''),
        "date_done": msg.date_done.strftime('%H:%M | %d %B %Y'),
    }


@login_required
@celery_bp.route('/get-logs/', methods=['GET'])
def get_logs():
    query = [serialize_query(x) for x in db.engine.execute('select * from celery_taskmeta order by date_done')]
    return json.dumps(query)

Это получение данных с бэкенда. Здесь используются Flask, Blueprint, SQLAlchemy. Остается только на фронте отправить запрос на указанный урл, распарсить json и вывести на страницу.

Ошибки

TypeError: Object of type memoryview is not JSON serializable

Из особенностей Celery. Он сохраняет результат в БД в формате memoryview. Мы этот формат переводим в байты командой:

tobytes()

Затем декодируем игнорируя ошибки:

.decode('utf-8', errors='ignore')

Почему-то у меня celery сохраняет memoryview с неправильными символами на что собственно и ругается интерпретатор. Дальше эти символы удаляем командой:

.replace('\x05C\x00\x00\x00\x00\x00\x00\x00?', '')
Метки:

На сайте отсутствует реклама! Значете почему?

Помогать людям - моё хобби. А навыки разработчика позволяют не парится нулевой монетизизацией этого сайта. Хотя...

Если вам помогла информация, то даже от доната в 40 рублей мне будет приятно. Докину немного, куплю латте в макдаке, вспомню за чей счет банкет и карма вам зачтется!

Но и просто оставленный комментарий благодарности ниже принесет мне улыбку радости :)

А если захочется написать всякие гадости с переходом на личности, да тоже не стесняйтесь, но обычно я отправляю такое в спам. Люблю, когда дома чисто.

Добавить комментарий

Напишите свой комментарий, если вам есть что добавить/поправить/спросить по теме текущей статьи:
"Celery — вывод на фронт"