diff --git a/.gitignore b/.gitignore index bc87c70..548f754 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ dogovora/ testgen/out/ testgen/out_100files/ contracts-flask/hz/ +llm.key diff --git a/DOC/how-to-test-upload-devops.md b/DOC/how-to-test-upload-devops.md new file mode 100644 index 0000000..fbebace --- /dev/null +++ b/DOC/how-to-test-upload-devops.md @@ -0,0 +1,61 @@ +# Как проверить загрузку файлов в Contracts (для DevOps Nubes) + +Цель: воспроизвести «чистую» загрузку файла с клиента на сервер, без обработки, +чтобы поймать обрыв на ингрессе/периметре (граница ~64 КБ, плавает по маршруту). + +## 1. Какой инстанс / где смотреть + +- Деплой и домен: смотри `contracts-flask/deploy/` и `VM.md` (в этой репе). +- Внешний путь: NSX Edge + AVI ALB → Kubernetes Ingress (nginx) → поды Flask. +- Сервер отдаёт **именно загрузку файлов**: интерфейс = выбор файла в локали → + клиент режет на чанки 50 КБ → POST `/chunk` → сервер копит и собирает файл. + +## 2. Что важно знать (контекст из истории) + +- Проблема ингресса уже встречалась: прямой POST файла резался + `client_max_body_size` (весной, PDF 153 КБ → «✗ Сеть»). +- Сейчас обход — **чанковая загрузка по 50 КБ** (`file.slice(0,50KB)` → `/chunk`). + Значит, «большой файл» для проверки = много чанков, а не один POST. +- Для диагностики полезно проверить ОБА способа: + а) обычная загрузка через UI (чанки); + б) прямой большой POST = то, что ближе к «чистому» обрыву на шлюзе. + +## 3. Как проверять (по шагам) + +### Шаг 1. Поднять/найти инстанс +- Определи, где сейчас развёрнут сервис (см. `deploy/`, `VM.md`). +- Убедись, что сервис отвечает (лендинг/UI). + +### Шаг 2. Чистая загрузка через UI (чанки) +- В веб-интерфейсе выбери файл в локали (начни с 1–5 МБ). +- Наблюдай прогресс: чанки должны идти последовательно. +- Критерий сбоя: прогресс встаёт, «✗ Сеть», или не хватает чанков при сборе. + +### Шаг 3. Прямой большой POST (обнажает границу шлюза) +- Одним запросом отправь файл ~1–5 МБ на endpoint загрузки. +- Ожидание: если проблема есть — запрос обрывается на ~середине, + частичная передача, таймаут. +- Сравни с малым файлом (~10 КБ): должен пройти мгновенно. + +### Шаг 4. Серия размеров (найти границу) +- Прогони один и тот же файл в размерах: ~10 КБ, ~50 КБ, ~64 КБ, ~100 КБ, + ~1 МБ, ~5 МБ. +- Зафиксируй порог, с которого начинаются сбои (у нас он плавает ~64 КБ). + +### Шаг 5. Снять симптомы «глазами пользователя» +- Что видит пользователь: прогресс%, код ошибки браузера, «Сеть»/таймаут. +- Если есть доступ к подам: логи nginx-ингресса и пода на момент обрыва + (хватит ли байт пришло). + +## 4. Что сообщить DevOps по результатам + +- Размер, на котором воспроизводится обрыв (порог). +- Это чанки или прямой POST. +- Точное время и домен инстанса (у нас баг нестабилен — плавает по маршруту, + поэтому важно поймать момент и передать «на горячем»). + +## 5. Полезные ссылки из репо + +- `History/sessions/session-07-chunks.md` — вся история чанковой загрузки и + обхода `client_max_body_size`. +- `History/architecture-research-v2-2026-06-27.md` — поток Upload→Parse→…