From 437aa7a1d1b2087d0bdd5a7441f338744e482f70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Mon, 27 Jul 2026 22:08:24 +0400 Subject: [PATCH] =?UTF-8?q?v1.0.89:=20Sonnet=20review=20prompt=20=E2=80=94?= =?UTF-8?q?=20architecture=20audit=20request?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DOCS/sonnet-architecture-review-v1.0.89.md | 144 +++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 DOCS/sonnet-architecture-review-v1.0.89.md diff --git a/DOCS/sonnet-architecture-review-v1.0.89.md b/DOCS/sonnet-architecture-review-v1.0.89.md new file mode 100644 index 0000000..7a3c1ee --- /dev/null +++ b/DOCS/sonnet-architecture-review-v1.0.89.md @@ -0,0 +1,144 @@ +# Запрос к Claude (Sonnet): архитектурный аудит app-autotest v1.0.89 + +> **Цель**: получить анализ текущей архитектуры и рекомендации по развитию проекта. +> **Дата**: 27.07.2026 +> **Версия**: 1.0.89 + +--- + +## 1. О проекте + +### Что делает +Flask-приложение для ручного тестирования операций облачной платформы Nubes: +- CREATE — создать инстанс сервиса с параметрами +- MODIFY — изменить параметры существующего инстанса +- DELETE / SUSPEND / RESUME / REDEPLOY — управление инстансом + +### Как работает сейчас +- Один HTML-файл (index.html) с ванильным JS — без фреймворков, без SPA +- Бэкенд: Flask + gunicorn (несколько воркеров) +- Все данные — из REST API Nubes (никакого локального кеша, кроме краткосрочного трекера) +- Трекер инстансов: JSON-файлы в /tmp/ под fcntl.flock +- Автоопределение стенда (dev/test) по JWT-токену + +### Текущая файловая структура +``` +app-autotest/ +├── site/ +│ ├── app.py ← Flask(__name__), blueprints, /health +│ ├── api/ +│ │ └── http_client.py ← HttpClient, автостенд +│ ├── operations/ +│ │ ├── get_params.py ← слияние state.params + шаблон +│ │ ├── get_services.py ← API-обёртки +│ │ ├── get_instances.py ← пагинация +│ │ └── tracker.py ← /tmp/instances-{clientId}-{stand}.json +│ ├── routes/ +│ │ ├── main.py ← GET/POST /, /api/operations/ +│ │ ├── api.py ← [LEGACY] раннер тестов +│ │ └── api_test.py ← /api/test, /api/params, /api/log +│ ├── templates/ +│ │ └── index.html ← весь UI (~400 строк) +│ └── static/ +│ └── style.css +├── DOCS/ +│ ├── ARCHITECTURE.md ← актуальная архитектура +│ ├── ARCHITECTURE.legacy.md ← старая версия +│ ├── HISTORY.md ← история версий +│ └── ... ← 12+ legacy-документов +└── secrets/ ← токены (не в git) +``` + +### Ключевые детали реализации +- **Multi-worker safety**: все общие данные в /tmp/ под fcntl.flock +- **CREATE vs non-CREATE**: раздельные потоки в бэкенде и фронтенде +- **Текущие значения параметров**: GET /instances/{uid} → state.params + GET /instanceOperations/default/{opId} → слияние +- **Логирование**: /tmp/app-autotest.log + /api/log + скрытая UI-панель +- **Валидация**: HTML-escape + JSON-валидация map-полей (onblur + pre-submit) + +--- + +## 2. Что нужно проанализировать + +### A. Decoupling и модульность +Сейчас всё в одном HTML и одном api_test.py (300+ строк). Нужны рекомендации: +- Как разбить index.html на компоненты/модули? +- Как разбить api_test.py на независимые модули по операциям? +- Стоит ли переходить на микро-фронтенд (HTMX, Alpine.js, что-то ещё) или оставить ванильный JS? +- Как организовать роутинг если добавится больше страниц? + +### B. Хранение данных тестов +Сейчас никакие результаты тестов не сохраняются. Нужно: +- Где и как хранить историю запусков (каждый запуск = запись)? +- Какие данные сохранять: параметры, длительность, статус, этапы, ошибки? +- Формат хранения: SQLite? JSON-файлы? Внешняя БД? +- Как привязать к конкретному инстансу и пользователю? +- Нужна ли страница истории/отчётов? + +### C. Оптимизация для развития +- Что мешает добавить второй сервис (сейчас только Болванка, svcId=1)? +- Как сделать конфигурацию сервисов (какие сервисы показывать, какие операции)? +- Нужен ли config.yaml или всё из API? +- Как масштабировать на множество пользователей (изоляция данных)? + +### D. Улучшения архитектуры +- Сейчас _client() определяется в двух местах (main.py и api_test.py) — как унифицировать? +- Стоит ли вынести общие хелперы (_client_id, _stand, _token_info) в отдельный модуль? +- Нужен ли middleware для токена (вместо ручного извлечения в каждом роуте)? +- Как улучшить обработку ошибок (сейчас много try/except с голым str(e))? + +### E. Безопасность +- Токен передаётся в cookie и форме — достаточно ли этого? +- Нужна ли CSRF-защита для POST-запросов? +- Логи могут содержать чувствительные данные? + +--- + +## 3. Ожидаемый формат ответа + +### 1. Общая оценка +- Что сделано хорошо +- Что требует внимания +- Критические проблемы (если есть) + +### 2. Decoupling — план +- Пошаговый план разбиения на модули +- Рекомендации по фронтенду (ванильный JS / HTMX / Alpine / SPA) +- Рекомендации по бэкенду (структура модулей) + +### 3. Хранение данных тестов — план +- Схема данных (какие поля, какие таблицы/файлы) +- Технология (SQLite / PostgreSQL / JSON-файлы) +- API для чтения/записи +- UI для просмотра истории + +### 4. Оптимизация — конкретные шаги +- Приоритизированный список улучшений +- Что можно сделать быстро, что требует переписывания + +### 5. Риски и ограничения +- Что может пойти не так при предлагаемых изменениях +- Ограничения платформы (gunicorn, /tmp/, DDoS-Guard) + +--- + +## 4. Файлы для изучения + +**Код (в порядке важности):** +1. `site/routes/api_test.py` — основной модуль операций +2. `site/templates/index.html` — весь фронтенд +3. `site/routes/main.py` — главная страница и API операций +4. `site/api/http_client.py` — HTTP-клиент и автостенд +5. `site/operations/get_params.py` — слияние параметров +6. `site/operations/tracker.py` — файловый трекер +7. `site/app.py` — точка входа +8. `site/operations/get_services.py` + `get_instances.py` — API-обёртки + +**Документация:** +1. `DOCS/ARCHITECTURE.md` — актуальная архитектура +2. `DOCS/HISTORY.md` — история версий +3. `DOCS/terraform-operations-full-logic.md` — логика API из Terraform-провайдера + +**Данные (HAR-файлы):** +1. `development/dummycreate.har` — полный flow CREATE +2. `development/dummymodify.har` — полный flow MODIFY