v1.0.93: HISTORY + ARCHITECTURE updated with v1.0.90-1.0.93 changes

This commit is contained in:
2026-07-28 09:51:30 +04:00
parent 5e120db0d6
commit 203c12638d
2 changed files with 44 additions and 3 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
# Архитектура app-autotest — текущее состояние # Архитектура app-autotest — текущее состояние
v1.0.87, 27.07.2026 v1.0.93, 28.07.2026
--- ---
+43 -2
View File
@@ -1,11 +1,52 @@
# История разработки app-autotest # История разработки app-autotest
## Инфраструктура ## Инфраструктура
- **Кластер**: `iot-naeel` (resourceRealm K8s, DEV-стенд) - **Кластер**: `iot-naeel` (resourceRealm K8s)
- **URL**: `https://atest.pythonk8s.dev.nubes.ru` - **URL**: `https://atest.pythonk8s.dev.nubes.ru`
- **Деплой**: git push → managed service pythonk8s → gunicorn - **Деплой**: git push → managed service pythonk8s → gunicorn
- **PostgreSQL**: `foriot` (509145c3-...), PG 17, `iot-naeel`
## v1.0.89 (27.07.2026) — Sonnet Round 3: практические вопросы ## v1.0.93 (28.07.2026) — отдельные DB_* переменные
### Что изменилось
- `db/pool.py`: `_dsn()` собирает DSN из отдельных переменных: DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASSWORD, DB_SSLMODE
- `db/init_db.py`: проверка `DB_USER` вместо `DATABASE_URL`
- `secrets/pg-foriot.md`: полный jsonEnv для pythonk8s (6 DB-переменных + 2 существующие)
- `app.py`: NUBES_API_ENDPOINT по умолчанию TEST
## v1.0.92 (27.07.2026) — Steps 5-9: динамические сервисы + PostgreSQL история
### Шаг 5: JS → /static/app.js
- JS вынесен из index.html в отдельный файл
- `window.APP = {version, stand, hasUserToken}` — передача Jinja2-переменных
### Шаг 6: Динамические сервисы
- `currentSvcId` вместо хардкода `SVC_ID=1`
- `initServices()` — загрузка из `/api/services` при старте
### Шаг 7-8: PostgreSQL
- `db/pool.py` — ThreadedConnectionPool (lazy-init, 1-5 соединений)
- `db/init_db.py` — таблица `runs` с индексами (идемпотентно)
- `db/save_run.py` — запись результатов в БД
- `requirements.txt` — добавлен `psycopg2-binary`
### Шаг 9: /api/history
- GET `/api/history` — последние 50 записей (фильтр по client_id + stand)
## v1.0.90 (27.07.2026) — Steps 1-4: auth.py + TTL + cookie
### Шаг 1-2: api/auth.py
- Новый модуль: `get_token()`, `get_client()`, `get_client_id()`, `get_stand()`, `get_token_info()`, `get_token_masked()`
- Убраны дубликаты из main.py и api_test.py
### Шаг 3: Cookie httponly + samesite
- `set_cookie(..., httponly=True, samesite="Strict")`
### Шаг 4: _op_results TTL
- Максимум 500 записей, удаление старше 1 часа
- `_ts` timestamp в каждой записи
## v1.0.89 (27.07.2026) — Sonnet Rounds 1-3 + документирование
### 1. PostgreSQL connection string ### 1. PostgreSQL connection string
- `os.getenv("DATABASE_URL")` — никакого service discovery - `os.getenv("DATABASE_URL")` — никакого service discovery