Files
autotest/DOCS/architecture-next.md
T
naeel 28dee4632a v1.2.0: unified executor + flexible instance refs + params-render.js
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
2026-07-31 08:54:57 +04:00

2.1 KiB

Архитектура app-autotest — план рефакторинга (2026-07-31)

Полный план: DOCS/opus-plan-2026-07-31.md Ветка: opus-architecture-2026-07-31

Проблемы

  1. Дублирование CREATE-флоу: routes/api_test.py и operations/scenario.py содержат идентичную логику POST /instances → POST /instanceOperations → send_params_terraform → /run.
  2. Ограничение instance_map: сценарий привязан к service_id, нельзя два инстанса одного сервиса.
  3. Нет общей функции — правки Terraform-флоу надо делать в двух местах.

Решение

Новые файлы

  • operations/executor.pyexecute_operation() (единый флоу до /run)
  • operations/poll.pypoll_until_done() (общий цикл поллинга)
  • api/utils.pyfind_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_runs
  • static/js/scenario-form.js — модальный редактор с параметрами
  • static/js/operations.js — использовать params-render.js
  • templates/index.html — модал + params-render.js
  • app.py — bump VERSION

Порядок

Фаза 1 (общие модули) → Фаза 2 (формат шагов) → Фаза 3 (миграция вызывающих) → Фаза 4 (UI)