From 203c12638d4ec631356216f1881d267f0bf32295 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Tue, 28 Jul 2026 09:51:30 +0400 Subject: [PATCH] v1.0.93: HISTORY + ARCHITECTURE updated with v1.0.90-1.0.93 changes --- DOCS/ARCHITECTURE.md | 2 +- DOCS/HISTORY.md | 45 ++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/DOCS/ARCHITECTURE.md b/DOCS/ARCHITECTURE.md index 78ab86d..aa553db 100644 --- a/DOCS/ARCHITECTURE.md +++ b/DOCS/ARCHITECTURE.md @@ -1,6 +1,6 @@ # Архитектура app-autotest — текущее состояние -v1.0.87, 27.07.2026 +v1.0.93, 28.07.2026 --- diff --git a/DOCS/HISTORY.md b/DOCS/HISTORY.md index 75bad40..39b9e3f 100644 --- a/DOCS/HISTORY.md +++ b/DOCS/HISTORY.md @@ -1,11 +1,52 @@ # История разработки app-autotest ## Инфраструктура -- **Кластер**: `iot-naeel` (resourceRealm K8s, DEV-стенд) +- **Кластер**: `iot-naeel` (resourceRealm K8s) - **URL**: `https://atest.pythonk8s.dev.nubes.ru` - **Деплой**: 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 - `os.getenv("DATABASE_URL")` — никакого service discovery