Комментарий пользователя
Обновились с шестой версии Сканер-ВС на седьмую, и скрипт автоматизации, который до этого спокойно работал год, перестал функционировать корректно. Отчеты не формируются, задачи местами зависают. Прежде чем лезть разбираться построчно, хотим понять масштаб: там точечные правки или логика работы с API поменялась настолько, что проще переписать?
Ответ специалиста
Здравствуйте, Олег!
Готовьтесь скорее к переработке, чем к точечным правкам: логика работы с API изменилась, и наш скрипт для Сканер-ВС 6 тоже пришлось адаптировать и заново тестировать. Но переписывать с нуля при этом не придется — основные изменения касаются двух вещей: управления состоянием и обработки ошибок.
Управление состоянием. В новой схеме скрипт сохраняет прогресс в JSON при каждом запуске и смотрит, на каком этапе находится каждая отдельная задача. После завершения очередного этапа состояние сохраняется и следующий запуск продолжает работу с нужного места, а не с начала.
Обработка ошибок. Если API возвращает 401 или 403, скрипт пытается повторно авторизоваться. Если задача перешла в состояние ошибки, она удаляется и создается заново:
if знasset_id:
delete_assets(auth_cookies, asset_id)
if netscan_task_id:
delete_task(auth_cookies, netscan_task_id)
if vulnscan_task_id:
delete_task(auth_cookies, vulnscan_task_id)
client_to_keep = {
"id": client.get("id"),
"name": client.get("name"),
"ip": client.get("ip")
}
client.clear()
client.update(client_to_keep)
save_client_list(client_list_file, clients)
За счет этого блока зависшая задача больше не блокирует весь цикл сканирования — а судя по вашему описанию, именно это у вас сейчас и происходит.
Отдельно отмечу отказ от прямой работы с базой данных. Раньше была проблема с очисткой зависших записей, и техподдержка предлагала пользоваться SQL-командами. В новой реализации созданные активы и задачи удаляются через API, а при ошибке удаляются и пересоздаются, не ломая конвейер. Если в вашем старом скрипте остались SQL-запросы к базе сканера — это первое, что стоит убрать.