Files
app-autotest/DOCS/HISTORY.md
T

6.3 KiB
Raw Blame History

История разработки app-autotest

v1.0.58 (27.07.2026) — version bump

  • Поднята версия проекта до 1.0.58.
  • Синхронизированы заголовки в site/app.py и DOCS/ARCHITECTURE.md.

v1.0.57 (27.07.2026) — UI hardening + history sync

Что изменилось

  • В site/templates/index.html финальное состояние кнопки вынесено в setFinishedState(), чтобы не держать логику завершения операции в двух местах.
  • После завершения операции кнопка «Готово» теперь гарантированно сбрасывает обработчик через btn.onclick = null.
  • Повторный CREATE через старый обработчик больше не воспроизводится.
  • displayName больше не теряется в нормальном сценарии завершения CREATE.
  • В site/app.py версия поднята до 1.0.57.
  • В DOCS/ARCHITECTURE.md отмечено закрытие бага с повторным CREATE и синхронизирован статус по displayName.

Зачем это было сделано

  • Убрать хрупкость вокруг состояния кнопки после завершения операции.
  • Привести документацию и версию к текущему состоянию кода.

v1.0.54 (27.07.2026) — Аудит #3: 4 бага исправлено

Баг #1: _client() не автоопределял стенд (КРИТИЧЕСКИЙ)

  • Где: api_test.py:_client() — использовал current_app.config["NUBES_API_ENDPOINT"] (raw env var)
  • Симптом: main.py автоопределял стенд для главной, но POST /api/test падал с 401 если токен от другого стенда
  • Исправление: detect_endpoint() вынесен в api/http_client.py, используется в _client()
  • Как пропустили: анализировал main.py и api_test.py в изоляции, не сравнил

Баг #2: _find_uid() возвращал не тот UUID (КРИТИЧЕСКИЙ)

  • Где: api_test.py:_find_uid() — итерировал по ВСЕМ значениям dict, искал 36-символьную строку
  • Симптом: /instanceOperations возвращает оба instanceUid + instanceOperationUid, функция брала первый попавшийся → run шёл на неправильный URL
  • Исправление: ищет по конкретным ключам: instanceOperationUidinstanceUiduidUid
  • Как пропустили: не проверил реальный формат ответа API

Баг #3: Сироты при ошибке params (СРЕДНИЙ)

  • Где: api_test.py: порядок — POST /instancesPOST /instanceOperations → params loop → tracker_add
  • Симптом: если params падает — инстанс и операция созданы в Nubes, трекер пуст → сироты
  • Исправление: tracker_add вызывается ДО params loop, сразу после получения instanceUid
  • Как пропустили: не трассировал линейно порядок вызовов

Баг #4: flock без таймаута (НИЗКИЙ)

  • Где: tracker.py:_locked_read/_writefcntl.flock(fd, LOCK_EX) без LOCK_NB
  • Симптом: при зависшем процессе с локом все воркеры блокируются навсегда
  • Исправление: _acquire_lock() с LOCK_EX | LOCK_NB + retry до 2 секунд
  • Как пропустили: новый код flock не перечитал с нуля после добавления

Архитектурное: detect_endpoint вынесен в http_client.py

  • Раньше был в main.py → недоступен для api_test.py
  • Теперь в api/http_client.py → оба модуля используют

v1.0.53 (27.07.2026) — Файловый трекер с fcntl.flock

  • In-memory dict заменён на /tmp/instances.json с fcntl.LOCK_EX
  • Multi-worker gunicorn: все воркеры читают/пишут один файл под локом

v1.0.52 (27.07.2026) — _tmpl() helper

  • Все переменные шаблона передаются во всех трёх return-путях index()
  • Исправлен UndefinedError при «Выйти»

v1.0.51 (27.07.2026) — Автоопределение стенда + UnboundLocalError

  • detect_endpoint() в main.py: пробует токен против dev и test API
  • instance_groups = {} инициализирован до if
  • _finish_op обёрнут в полный try/except

v1.0.50 (27.07.2026) — showStages + api_operations fix

  • showStages(): dtFinish вместо isSuccessful для //
  • api_operations(): не фильтровать "not created", добавлять tracked-сирот

v1.0.49 (27.07.2026) — In-memory tracker + refreshInstances

  • Трекер: in-memory dict вместо файла /tmp/instances.json
  • refreshInstances() добавляет новые инстансы в DOM (не только бейджи)
  • selectService() заменён на refreshInstances() после OK

v1.0.48 (27.07.2026) — tracker_add синхронно

  • tracker_add в api_test() до threading.Thread
  • Лог is_ok в _finish_op
  • Flexbox-кнопки горизонтально

v1.0.47 (27.07.2026) — displayName fix

  • displayName захватывается до очистки формы
  • tracker_add до _op_results[OK]
  • autotest-1 в _INITIAL

v1.0.46 (27.07.2026) — _finish_op signature

  • Добавлены op_name, svc_op_id в _finish_op()

v1.0.45 и ранее

  • Базовый CREATE/MODIFY/SUSPEND/DELETE/RESUME/REDEPLOY
  • UI с этапами, поллинг, params форма
  • Множественные баги CREATE flow (документированы в DOCS/api-create-flow.md)