Перейти к основному содержимому
Версия: 1.7.5

Статусы выполнения (module_sdk.status)

Модуль может отправлять статусы выполнения в реальном времени через StatusSender. Статусы отображаются в UI в карточке выполнения автоправила и позволяют отслеживать прогресс, предупреждения и ошибки модуля.

Импорт

from module_sdk import status_sender, StatusType

StatusType

from module_sdk import StatusType
ЗначениеОписание
StatusType.INFOИнформационные сообщения (прогресс, этапы выполнения)
StatusType.WARNINGПредупреждения (модуль продолжил работу)
StatusType.ERRORКритические ошибки (модуль не может продолжить)

StatusSender

from module_sdk import status_sender

Синглтон status_sender -- глобальный экземпляр, используется для отправки статусов выполнения модуля на Keeper.

Метод send_status()

status_sender.send_status(
status_type: StatusType, # Тип статуса
message: str, # Сообщение (отображается в UI)
code: str = "", # Машиночитаемый код (опционально)
data: dict = None # Дополнительные данные (опционально)
) -> bool

Возвращает True при успешной отправке, False -- при ошибке (например, Keeper недоступен). Ошибка отправки логируется, но не прерывает работу модуля.

ПараметрТипОбязательныйОписание
status_typeStatusTypeдаТип статуса (INFO, WARNING, ERROR)
messagestrдаТекстовое сообщение для отображения в UI
codestrнетМашиночитаемый код ошибки (см. таблицу кодов ниже)
datadictнетПроизвольные дополнительные данные в формате словаря

Коды статусов

Рекомендуемые коды для использования в параметре code:

КодТипОписание
CONNECTION_ERRORERRORОшибка подключения к внешней системе
CREDENTIALS_ERRORERRORОшибка аутентификации (неверные учетные данные)
TIMEOUTERRORПревышено время ожидания при подключении или выполнении
EXECUTION_ERRORERRORОшибка выполнения операции
MODULE_ERRORERRORВнутренняя ошибка модуля
MODULE_WARNINGWARNINGПредупреждение модуля (некритичная проблема)
PARTIAL_DATAWARNINGПолучены неполные данные из внешней системы
RATE_LIMITWARNINGДостигнут лимит запросов к внешней системе

Коды не являются обязательными, но упрощают машинную обработку статусов и фильтрацию в UI.

Примеры использования

Базовый пример

from module_sdk import status_sender, StatusType

def my_scan():
status_sender.send_status(StatusType.INFO, "Запуск сканирования")

try:
# подключение
status_sender.send_status(StatusType.INFO, "Подключение к серверу")
connect()
status_sender.send_status(StatusType.INFO, "Подключение установлено")

# сканирование
results = scan()
status_sender.send_status(
StatusType.INFO,
f"Найдено {len(results)} объектов",
data={"count": len(results)}
)

except AuthError as e:
status_sender.send_status(StatusType.ERROR, str(e), code="CREDENTIALS_ERROR")
raise
except ConnectionError as e:
status_sender.send_status(StatusType.ERROR, str(e), code="CONNECTION_ERROR")
raise
except Exception as e:
status_sender.send_status(StatusType.ERROR, str(e), code="MODULE_ERROR")
raise

Пример с предупреждениями

from module_sdk import status_sender, StatusType

def collect_with_retries():
for page in range(total_pages):
try:
data = fetch_page(page)
process(data)
except TimeoutError:
status_sender.send_status(
StatusType.WARNING,
f"Таймаут при загрузке страницы {page}, пропущена",
code="TIMEOUT",
data={"page": page}
)
continue

status_sender.send_status(StatusType.INFO, "Сбор данных завершен")

Рекомендуемые точки вызова

МоментТипКодПример сообщения
Старт модуляINFO--"Запуск сканирования"
Подключение к внешней системеINFO--"Подключение к серверу 192.168.1.1"
Подключение установленоINFO--"Подключение установлено"
Начало этапа обработкиINFO--"Сканирование портов"
Промежуточный прогрессINFO--"Обработано 150 из 500 хостов"
Некритичная проблемаWARNINGMODULE_WARNING"Хост 10.0.0.5 не отвечает, пропущен"
Неполные данныеWARNINGPARTIAL_DATA"API вернул неполный ответ"
Ошибка аутентификацииERRORCREDENTIALS_ERROR"Неверный API-ключ"
Ошибка подключенияERRORCONNECTION_ERROR"Не удалось подключиться к серверу"
ТаймаутERRORTIMEOUT"Превышено время ожидания"
Необработанная ошибкаERRORMODULE_ERROR"Внутренняя ошибка модуля"
Завершение работыINFO--"Найдено 42 хоста"

Переменные окружения

ПеременнаяОписаниеУстанавливается
KEEPER_CALLBACK_URLURL Keeper для отправки статусовавтоматически
MODULE_RUN_IDID текущего запуска модуляавтоматически

Обе переменные устанавливаются Keeper автоматически при запуске контейнера модуля. Разработчику модуля не нужно их задавать вручную.

Как статусы отображаются в UI

Статусы отправляются модулем на Keeper через HTTP callback и далее передаются в WAS. В интерфейсе Solar LightHouse они отображаются в карточке выполнения автоправила:

  • Статусы INFO показываются как информационные записи в журнале выполнения

  • Статусы WARNING выделяются визуально и увеличивают счетчик предупреждений

  • Статусы ERROR выделяются как критические и отображаются в блоке ошибок

Все статусы сохраняются с временной меткой и доступны в истории выполнений автоправила.