Хранилище данных (module_sdk.storage)
ScanStatusStorage
from module_sdk.storage.storage import scan_status_storage
Синглтон scan_status_storage -- глобальный экземпляр, используется для добавления ассетов и управления статусом модуля.
Методы добавления ассетов
| Метод | Тип данных | Описание |
|---|---|---|
append_host_in_storage(data) | CollectionHost | Добавить один хост |
append_account_in_storage(data) | CollectionAccount | Добавить один аккаунт |
append_network_in_storage(data) | CollectionNetwork | Добавить одну сеть |
append_external_address_in_storage(data) | CollectionExternalAddress | Добавить один внешний адрес |
extend_external_address_in_storage(data) | list[CollectionExternalAddress] | Добавить список внешних адресов |
append_global_metadata_in_storage(data) | object | Добавить глобальные метаданные |
Все методы append_* и extend_* автоматически проверяют порог max_chunk_size. Когда суммарное количество ассетов достигает порога, текущий набор сериализуется в JSON-файл и помещается в очередь пакетов.
Методы управления состоянием
| Метод | Описание |
|---|---|
total_exist_assets_count() -> int | Количество ассетов в текущем (еще не упакованном) наборе |
create_and_enqueue_packet() | Вручную создать пакет из текущих данных и добавить в очередь |
clear_data() | Очистить текущие данные (host, account, network, external_address). global_metadata не очищается |
clear_data_scan_status() | Сбросить data в scan_info |
Методы для работы с пакетами
| Метод | Описание |
|---|---|
if_all_packet_ids_exist() -> bool | Есть ли неподтвержденные пакеты |
get_first_all_packet_ids_id() -> Optional[int] | Вернуть ID первого неподтвержденного пакета или None |
find_packet_by_id(packet_id) -> Optional[Packet] | Найти пакет по ID или вернуть None |
confirm_packet_delivery(packet_id) | Подтвердить доставку пакета. Если это был последний -- статус переходит в FINISH |
Свойство scan_info
scan_status_storage.scan_info # -> ScanStatus
scan_status_storage.scan_info.status # -> "CREATE" | "RUN" | "ASSETS_READY" | "FINISH" | "ERROR"
Сериализация
scan_status_storage.to_json() # -> str (JSON-строка ScanStatus)
ScanStatusEnum
from module_sdk.storage.storage import ScanStatusEnum
| Значение | Строка |
|---|---|
ScanStatusEnum.CREATE | "CREATE" |
ScanStatusEnum.RUN | "RUN" |
ScanStatusEnum.FINISH | "FINISH" |
ScanStatusEnum.ASSETS_READY | "ASSETS_READY" |
ScanStatusEnum.ERROR | "ERROR" |
Packet
from module_sdk.storage.storage import Packet
Pydantic-модель пакета данных.
| Поле | Тип | Описание |
|---|---|---|
id | int | Номер пакета (начинается с 1) |
packet | str | Путь к JSON-файлу с данными |
Механизм чанкинга (подробно)
-
Каждый вызов
append_*_in_storage()добавляет ассет вCollectionAssets.__data -
После добавления SDK считает
total_exist_assets_count()= суммаlen(host) + len(account) + len(network) + len(external_address) + len(global_metadata) -
Если сумма >=
max_chunk_size:-
create_and_enqueue_packet()сериализует__data.to_dict()в файл{packet_id}.json -
Пакет добавляется в
__packet_queue -
ID пакета добавляется в
__all_packet_ids -
__dataочищается (host, account, network, external_address -- очищаются; global_metadata -- нет) -
__next_packet_idинкрементируется
-
-
После завершения
custom_py_functionвapp_create_and_do_py():-
Если в
__dataостались ассеты -- создается финальный пакет -
Если
__all_packet_idsнепустой -> статусASSETS_READY -
Иначе -> статус
FINISH
-