Перейти к содержанию

Примеры → Аналитика

Компонент (A)syncStats отвечает за сбор и форматированный вывод диагностической информации по приложению QTasks и его задачам. Он инициализируется экземпляром QueueTasks и предоставляет набор методов для интроспекции. Синхронная версия дополнительно интегрирована в CLI как команда qtasks stats.


🚀 Где это используется

  • Прямо из кода: создаётся экземпляр (A)syncStats и вызываются методы анализа.
  • Через CLI: синхронная версия доступна как qtasks stats.

Пример команды (для ориентира):

qtasks stats inspect tasks my_task json=true

Эта команда выведет структуру с описанием задач (в JSON при json=true).


🔎 inspect()

Метод inspect() создаёт объект InspectStats, который содержит функции для детального осмотра:

  • app(json: bool = False) — информация о самом приложении
  • task(task_name: str, json: bool = False) — информация о конкретной задаче
  • tasks(*tasks: Tuple[str], json: bool = False) — сводка по нескольким задачам или по всем

Все эти функции поддерживают два формата вывода:

  • Текстовый (по умолчанию): выровненные колонки + разделители
  • JSON (json=True): сериализованная структура, удобная для парсинга и автоматизации

🧭 app(json: bool = False) — сводка по приложению

Что выводится в текстовом режиме:

  • Имя приложения
  • Метод запуска
  • Версия QTasks
  • Текущая конфигурация (как строка)
  • Количество зарегистрированных задач и роутеров
  • Общее количество подключённых плагинов (суммируется по ядру, брокеру, воркеру, стартеру, сториджу и глобальной конфигурации)
  • Количество зарегистрированных инициализаций (событий on)
  • Классы задействованных компонентов: Брокер, Воркер, Стартер (или ), Хранилище, GlobalConfig (или ), Логер

Формат — блочный, с выравниванием меток по ширине и горизонтальной линией-разделителем. Пример формы (данные условные):

Имя                       : QueueTasks
Метод                     : async
Версия                    : 1.6.0
Конфигурация              : QueueConfig(max_tasks_process=10,
running_older_tasks=True, delete_finished_tasks=True, default_task_priority=0,
logs_default_level_server=20, logs_default_level_client=20,
logs_format='%(asctime)s [%(name)s: %(levelname)s] (%(subname)s) %(message)s',
result_time_interval=0.1, result_statuses_end=['success', 'error', 'cancel'])
Количество задач          : 14
Количество роутеров       : 1
Количество плагинов       : 3
Количество инициализаций  : 0
Брокер                    : AsyncRedisBroker
Воркер                    : AsyncWorker
Стартер                   : —
Хранилище                 : AsyncRedisStorage
GlobalConfig              : AsyncRedisGlobalConfig
Лог                       : Logger
--------------------------------------------------

При json=True возвращается JSON-объект с теми же ключами и значениями.


🧩 task(task_name, json: bool = False) — детально о задаче

Что выводится в текстовом режиме: один блок по задаче с полями:

  • Имя задачи
  • Приоритет
  • Описание (или )
  • Теги (списком через запятую или )
  • Асинхронность (флаг «awaiting»)
  • Генерация (yield-режим, флаг «generating»)
  • «Self перед задачей» (echo)
  • Сигнатура аргументов: Args (позиционные) и Kwargs (ключевые с дефолтами)

Условные поля, если заданы в задаче:

  • Повторов (retry)
  • Искл. для повторов (retry_on_exc, красиво форматируется)
  • Декодирование (decode)
  • Генератор (generate_handler)
  • Исполнитель (executor)
  • Мидлвари до / Мидлвари после
  • Дополнительно — многострочный раздел, где каждая пара ключ-значение выводится отдельной строкой с маркером *

Пример формы (данные условные):

Имя задачи              : send_email
Приоритет               : 0
Описание                : Рассылка писем
Теги                    : email, marketing
Асинхронность           : True
Генерация               : False
Self перед задачей      : False
Args                    : recipient: str, subject: str
Kwargs                  : retries: int=3, timeout: int=30
Повторов                : 3
Искл. для повторов      : [<class 'KeyError'>]
Мидлвари до             : [<class 'AuthMiddleware'>]
Мидлвари после          : [<class 'MetricsMiddleware'>]
Дополнительно           :
 * concurrency: 5
 * queue: high
--------------------------------------------------

При json=True возвращается объект с теми же данными (ключи соответствуют меткам выше).

Если задача не найдена — выводится соответствующее диагностическое сообщение (текст), а при json=True — пустая структура или описательная ошибка (в зависимости от реализации CLI/обёртки).


📚 tasks(*tasks, json: bool = False) — несколько или все задачи

Поведение аналогично task(...), но для набора задач:

  • Если имена задач переданы — выводятся только они, в порядке перечисления
  • Если ничего не передано — выводится весь реестр задач
  • Блоки задач следуют друг за другом, разделены линией --------------------------------------------------

Пример формы (условные данные):

Имя задачи              : ping
Приоритет               : 0
Описание                : —
Теги                    : —
Асинхронность           : True
Генерация               : False
Self перед задачей      : False
Args                    : host: str
Kwargs                  : timeout: int=5
--------------------------------------------------
Имя задачи              : report_daily
Приоритет               : 1
Описание                : Ежедневный отчёт
Теги                    : analytics
Асинхронность           : False
Генерация               : False
Self перед задачей      : False
Args                    : date: datetime.date
Kwargs                  : format: str=pdf
--------------------------------------------------

При json=True возвращается список JSON-объектов — по одному на каждую задачу в выборке.


🧱 Форматирование и удобство чтения

Текстовый вывод выравнивает метки по фиксированной ширине (через внутренний label_width), поэтому таблицы выглядят аккуратно в терминале и логах. Разделители - используются для визуального отделения блоков.


✅ Что это даёт на практике

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

Эта аналитика полезна в проде, на CI и в отладке локально — одинаково.