Примеры → Аналитика¶
Компонент (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 и в отладке локально — одинаково.