8.1 KiB
8.1 KiB
Запрос к 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/<svc_id>
│ │ ├── 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. Файлы для изучения
Код (в порядке важности):
site/routes/api_test.py— основной модуль операцийsite/templates/index.html— весь фронтендsite/routes/main.py— главная страница и API операцийsite/api/http_client.py— HTTP-клиент и автостендsite/operations/get_params.py— слияние параметровsite/operations/tracker.py— файловый трекерsite/app.py— точка входаsite/operations/get_services.py+get_instances.py— API-обёртки
Документация:
DOCS/ARCHITECTURE.md— актуальная архитектураDOCS/HISTORY.md— история версийDOCS/terraform-operations-full-logic.md— логика API из Terraform-провайдера
Данные (HAR-файлы):
development/dummycreate.har— полный flow CREATEdevelopment/dummymodify.har— полный flow MODIFY