Files
autotest/DOCS/architecture-review-sonnet.md
T
2026-07-27 22:05:19 +04:00

72 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ⚠️ LEGACY — НЕАКТУАЛЬНО. Исторический документ.
# Архитектура app-autotest — ответы Sonnet + моё мнение
## Sonnet предложил
### Q1: Модель данных — SQLite, четыре таблицы, YAML-seed при старте
### Q2: Pipeline — последовательный в threading.Thread, поллинг 10s, таймаут 5мин
### Q3: UI — три вкладки (Тесты, Конфигурация, История)
### Q4: Архитектура — Flask + blueprints, sqlite3, без очередей/WS
### Q5: Multi-stand — отдельный деплой на стенд, env vars
## Мои замечания
### ⛔ 1. Factory pattern (`create_app()`) — НЕ СОВМЕСТИМ с pythonk8s
Sonnet предлагает `app/` с фабрикой. ЭТО НЕ РАБОТАЕТ.
Nubes pythonk8s запускает `python site/app.py`. Папка `site/` **не может быть пакетом** (конфликт с stdlib `site.py`). `__init__.py` в `site/` ломает импорты.
Правильная структура для Nubes:
```
site/ ← НЕ пакет, без __init__.py
├── app.py ← точка входа: app = Flask(__name__)
├── api/
│ └── client.py ← from api.client import ...
├── db.py
├── runner.py
├── yaml_loader.py
├── routes/
│ ├── config.py
│ └── history.py
├── static/
└── templates/
```
Все импорты — без префикса `site.`, например: `from api.client import HttpClient`.
### ⚠️ 2. SQLite + Persistent Volume
pythonk8s на Nubes — есть ли persistent volume? Если нет — данные теряются при редеплое. Варианты:
- `/tmp/` — теряется при рестарте пода
- Встроить SQLite внутрь? Но тогда это read-only FS
- Использовать env var для пути БД
Нужно проверить: монтирует ли pythonk8s какие-то persistent тома.
### ⚠️ 3. threading.Thread + Flask debug=True
Сейчас `debug=True` (как в шаблоне). С reloader'ом (watchdog) треды могут дублироваться. В проде `debug=False`, но gunicorn workers тоже создают проблемы с тредами. Лучше:
- Отдельный процесс (`subprocess`) вместо треда
- Или `threading` только при `debug=False`
### ⚠️ 4. YAML-файлы — где брать?
YAML лежат в основном репо: `/home/naeel/nubes/autotest/STANDS/`, а не в app-autotest. Нужно:
- Либо скопировать в app-autotest
- Либо сделать git submodule
- Либо mount volume с конфигами
## Вопросы к Sonnet
1. **Persistent storage**: как хранить SQLite на pythonk8s? Есть ли volume mounts у этого типа сервиса?
2. **YAML seeding**: если YAML не меняются (seed только при первом старте), может проще держать их прямо в репо app-autotest? Обновлять при изменениях в STANDS/?
3. **Threading**: не лучше ли `subprocess.Popen` вместо `threading.Thread` для pipeline? gunicorn workers + debug reloader могут создать проблемы.
4. **Параметры операций**: в YAML есть `dataDescriptor` (подполя map-fixed) и `valueList`. Как их показывать в UI? JSON textarea для каждого параметра или динамическая форма?
5. **Приоритет реализации**: что первое — pipeline (запуск тестов) или конфигурация (UI настроек)? Без pipeline нечего тестировать, без конфигурации нечего запускать. Может MVP: ручной запуск + жёстко закодированный набор тестов?