6.3 KiB
6.3 KiB
История разработки 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 - Исправление: ищет по конкретным ключам:
instanceOperationUid→instanceUid→uid→Uid - Как пропустили: не проверил реальный формат ответа API
Баг #3: Сироты при ошибке params (СРЕДНИЙ)
- Где:
api_test.py: порядок —POST /instances→POST /instanceOperations→ params loop →tracker_add - Симптом: если params падает — инстанс и операция созданы в Nubes, трекер пуст → сироты
- Исправление:
tracker_addвызывается ДО params loop, сразу после полученияinstanceUid - Как пропустили: не трассировал линейно порядок вызовов
Баг #4: flock без таймаута (НИЗКИЙ)
- Где:
tracker.py:_locked_read/_write—fcntl.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 APIinstance_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)