Phase 1 — New modules: - api/utils.py: find_uid(), uid_from_location() (replaces 2 duplicates) - operations/poll.py: poll_until_done() (shared sync/async polling) - operations/executor.py: execute_operation() (single CREATE/non-CREATE flow) Phase 2 — Format + validation: - routes/api_scenario_defs.py: _validate_steps with output/instance_ref/instance_uid - operations/scenario.py: resolve instance_uid > instance_ref > service_id, use executor + poll_until_done, persist instance_bindings Phase 3 — Migration: - routes/api_test.py: create/non-create through executor, _finish_op through poll_until_done - db/init_db.py: startup cleanup of stuck scenario_runs (>1h) Phase 4 — UI shared module: - static/js/params-render.js: renderParamRow, renderMapFixedRow, collectParams - static/js/operations.js: use params-render.js (remove duplicates) - templates/index.html: include params-render.js - app.py: bump 1.1.57 → 1.2.0
2.1 KiB
2.1 KiB
Архитектура app-autotest — план рефакторинга (2026-07-31)
Полный план:
DOCS/opus-plan-2026-07-31.mdВетка:opus-architecture-2026-07-31
Проблемы
- Дублирование CREATE-флоу:
routes/api_test.pyиoperations/scenario.pyсодержат идентичную логику POST /instances → POST /instanceOperations → send_params_terraform → /run. - Ограничение instance_map: сценарий привязан к
service_id, нельзя два инстанса одного сервиса. - Нет общей функции — правки Terraform-флоу надо делать в двух местах.
Решение
Новые файлы
operations/executor.py—execute_operation()(единый флоу до /run)operations/poll.py—poll_until_done()(общий цикл поллинга)api/utils.py—find_uid(),uid_from_location()(вместо дублей)static/js/params-render.js— общий рендер параметров
Новый формат шагов
{"service_id": 1, "operation": "create", "params": {}, "output": "d1"}
{"service_id": 1, "operation": "modify", "params": {}, "instance_ref": "d1"}
{"service_id": 1, "operation": "delete", "params": {}, "instance_uid": "UUID"}
Исправляемые файлы
routes/api_test.py— через executor (+ CMDB delete отдельно)operations/scenario.py— через executor + poll_until_done + output/ref резолвингroutes/api_scenario_defs.py— _validate_steps с новыми ключамиdb/init_db.py— startup cleanup зависших scenario_runsstatic/js/scenario-form.js— модальный редактор с параметрамиstatic/js/operations.js— использовать params-render.jstemplates/index.html— модал + params-render.jsapp.py— bump VERSION
Порядок
Фаза 1 (общие модули) → Фаза 2 (формат шагов) → Фаза 3 (миграция вызывающих) → Фаза 4 (UI)