Compare commits
4
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cee18046c2 | ||
|
|
ec660ddd1f | ||
|
|
a901c4f023 | ||
|
|
89bb8a3442 |
@@ -106,6 +106,7 @@
|
||||
- **2026-08-24-time-tickers-estimates.md** — v0.0.64–0.0.65: тикер текущего файла на всех этапах, мгновенные оценки времени по файлам и суммарно.
|
||||
- **2026-08-24-folder-select-implemented.md** — v0.0.68: кнопка «Выбрать папку» (webkitdirectory, рекурсивно, относительный путь).
|
||||
- **2026-08-24-folder-zip-not-lost.md** — v0.0.69: архивы из папки без документов не теряются (добавляются как есть); раскрытие zip с документами; склонение счётчика.
|
||||
- **2026-08-24-help-button-limits-text.md** — v0.0.70: заметная кнопка HELP (вместо «?») + пояснение статуса «пропущен» в ограничениях.
|
||||
- **2026-08-24-ui-locks-session-freeze.md** — v0.0.66: блокировки UI (выбор/удаление) на время работы, заморозка сессии + кнопка «Новая сессия».
|
||||
|
||||
## upload/ — загрузка файлов
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
# Разовый DNS-сбой pull: «Pull failed: [Errno -5] No address associated with hostname» (2026-08-24)
|
||||
|
||||
_infra. Вопрос пользователя «ЭТО ЧТО ????» при загрузке папки CNC (220 файлов, отобрано 8)._
|
||||
|
||||
## Симптом
|
||||
Фронт: «Ошибка передачи ссылок: Pull failed: [Errno -5] No address associated with hostname»
|
||||
при нажатии «Обфусцировать».
|
||||
|
||||
## Диагностика (факты)
|
||||
- ВМ-буфер: `https://contracts.kube5s.ru/drhider-upload/` (nginx dav), host → 5.172.178.213.
|
||||
- DNS снаружи (8.8.8.8) и на ВМ: `contracts.kube5s.ru` → 5.172.178.213 — ок; буфер отвечает 403.
|
||||
- Под drhider: ns `20a75175-a58c-49cb-b8fa-e86367b1a8dc`, pod `pythonk8s-85d8f4dcc8-vjjts`
|
||||
(создан ~18:36 МСК, редеплой 18:31-18:33). `getent`/`socket` из пода → 5.172.178.213 — ок.
|
||||
- Логи пода: ЕДИНСТВЕННАЯ ошибка `upload_refs: pull error sid=66ce16c1cda9` в **15:42:43 UTC (18:42 МСК)**:
|
||||
`connect_tcp.started host='contracts.kube5s.ru'` → `gaierror(-5)`.
|
||||
- До неё (15:41:41 UTC / 18:41 МСК) сессия пользователя `3ec718dafa5b` с теми же 8 файлами
|
||||
(info.txt, out1.txt, fatD.pdf, fatihaDownEdited.pdf, fatihaUPEdited.pdf, fatU.pdf, FT0.pdf, sha0.pdf)
|
||||
УСПЕШНО обработана (worker done, 29.8с, tokens 2138).
|
||||
- CoreDNS: 2 пода, 0 рестартов, 44d — стабильны.
|
||||
- Живой тест сейчас: папка 2 txt → «✅ Обработано 2 файлов: 6.6с» — pull работает.
|
||||
|
||||
## Вывод
|
||||
**Разовый DNS-сбой** CoreDNS/upstream на `contracts.kube5s.ru` в узкий момент 18:42 МСК
|
||||
(одна ошибка за весь лог). К выбору папки отношения нет; повторный запуск работает.
|
||||
|
||||
## Рекомендация (опция)
|
||||
Добавить ретраи pull в `upload_refs` (2-3 повтора с паузой при `ConnectError`/DNS-ошибке) —
|
||||
v0.0.70. Решение за пользователем.
|
||||
@@ -0,0 +1,31 @@
|
||||
# Тест выбора папки v0.0.69 на проде — полный цикл (2026-08-24)
|
||||
|
||||
_tests. Прод https://drhider.pythonk8s.dev.nubes.ru/, после редеплоя 18:31 (v0.0.69)._
|
||||
|
||||
## Что проверено (все ✓)
|
||||
1. **Выбор папки рекурсивно с подпапками** — папка `Клиенты/` с `Подпапка/Акт_работ.txt`.
|
||||
2. **Вложенный ZIP** — `Клиенты/архивы/документы.zip` раскрыт, файлы добавлены с префиксом пути:
|
||||
`архивы/Отчёт/Справка_Сидоров.txt`, `архивы/Счёт_на_оплату.txt`.
|
||||
3. **Кириллические имена** — сохраняются корректно.
|
||||
4. **Относительный путь** — в таблице и в результирующем ZIP.
|
||||
5. **Дедуп** — повторный `Договор_Ромашка.txt` добавлен один раз.
|
||||
6. **Полный цикл обфускации** (3 txt, 7.3с, ИИ 7с, токены 1858):
|
||||
- CSV-таблица замен: `+7 916 123-45-67 → +7_000_000_0001`, `Петрова Анна Сергеевна → Николаев_0001`,
|
||||
`Сидоров Пётр Николаевич → Павлов_0001`, `Козлова Мария Викторовна → Новиков_0001`, `Счёт 89 → Договор_0002`, `№45-А → Договор_0001`.
|
||||
- ZIP: имена с путями (`Подпапка/Акт_работ.md`, `архивы/Отчёт/Справка_Сидоров.md`, `архивы/Счёт_на_оплату.md`);
|
||||
содержимое обезличено («…Ответственный: Николаев_0001.»).
|
||||
7. **Лимиты** — файл 51 МБ помечен «🔥 не учитывается», сводка «1 учитываются + 1 свыше лимита».
|
||||
8. **Заморозка сессии** после обработки — выбор файлов/папок заблокирован до «Новая сессия».
|
||||
|
||||
## Найденный баг (косметика)
|
||||
Счётчик «Добавлено из папки: N» завышается на число дублей: `added++` выполняется безусловно
|
||||
после `addFileWithDedup`, даже когда файл не добавлен (дедуп). Пример: папка с одним дублем
|
||||
→ «5 файлов» при 4 реально добавленных. На список файлов не влияет.
|
||||
|
||||
## Примечания
|
||||
- Битый pdf-плейсхолдер (1 Б) не обработался (пропущен) — ожидаемо.
|
||||
- В ZIP текстовые `.txt` выходят как `.md` — поведение бэкенда, не связано с выбором папки.
|
||||
- Скачивание через событие `download` в Playwright не генерируется — данные получены прямым
|
||||
`fetch /api/download/<sid>` и `/api/csv/<sid>` (sid из перехвата URL).
|
||||
- Клик по «✕» в одном тике по двум кнопкам → `TypeError … 'name'` в `rm` — артефакт теста,
|
||||
в реальном использовании не воспроизводится (rr() пере-рендерит DOM синхронно).
|
||||
@@ -31,3 +31,12 @@ zip не раскрылся. Требование: «если в папке ар
|
||||
- Локальный запуск на 127.0.0.1:5010 (v0.0.69), сценарий папки
|
||||
[zip-конфиг + PDF] → «✅ Добавлено из папки: 2 файла», в таблице оба файла.
|
||||
- Версия 0.0.68 → 0.0.69.
|
||||
|
||||
## Проверка на проде (после редеплоя 18:31, v0.0.69)
|
||||
- Сценарий A — папка [zip БЕЗ документов + PDF] → «✅ Добавлено из папки: 2 файла»,
|
||||
в таблице `iviconfig8257.zip` (как есть) + `Nail_Nevrolog_20250602.PDF`. Архив не теряется.
|
||||
- Сценарий B — папка [zip С документами в подпапке + PDF] → «✅ Добавлено из папки: 3 файла»,
|
||||
в таблице `Подпапка/Договор_ООО_Ромашка.pdf` (раскрыт с путём), `Акт_выполненных_работ.docx`, `Отчёт.pdf`.
|
||||
- Примечание: `curl` к проду отдаёт ОБРЕЗАННЫЙ HTML (рвётся соединение, ~15-18КБ из 49.6КБ
|
||||
Content-Length) — это проблема шлюза для curl, НЕ деплоя. Браузер докачивает полностью.
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
# v0.0.70 — Заметная кнопка «?» + пояснение «пропущен» (2026-08-24)
|
||||
|
||||
_ux-frontend. По замечаниям пользователя после v0.0.69._
|
||||
|
||||
## Что сделано (site/templates/index.html)
|
||||
1. **Кнопка «HELP» в правом верхнем углу** (вместо значка «?»):
|
||||
- было: «?» 12px muted — почти не видно;
|
||||
- стало: синяя кнопка-пилюля с надписью **HELP** (фон `#1d4ed8`, белый жирный текст 13px/700,
|
||||
padding 5×14px, radius 6px, тень; hover темнее). Размер 62.6×23px.
|
||||
- Клик открывает helpModal (проверено: display flex).
|
||||
2. **Текст ограничений** — добавлено пояснение статуса «пропущен»:
|
||||
«…помечаются красным и не участвуют в обфускации: при запуске обработки они
|
||||
получают статус «пропущен» и не попадают в результат.»
|
||||
|
||||
## Проверка
|
||||
- `node --check` — OK, `py_compile` — OK.
|
||||
- Локально (127.0.0.1:5010, v0.0.70): кнопка HELP — синяя пилюля 62.6×23px, клик открывает справку;
|
||||
текст ограничений обновлён.
|
||||
- Версия 0.0.69 → 0.0.70.
|
||||
+1
-1
@@ -21,7 +21,7 @@ if _sys_path_root not in sys.path:
|
||||
sys.path.insert(0, _sys_path_root)
|
||||
|
||||
# Версия приложения (меняется при изменениях)
|
||||
VERSION = "0.0.69"
|
||||
VERSION = "0.0.70"
|
||||
|
||||
|
||||
def setup_logging():
|
||||
|
||||
@@ -29,8 +29,15 @@
|
||||
.topbar img { height: 18px; }
|
||||
.topbar .title { font-weight: 600; font-size: 14px; }
|
||||
.topbar .ver { font-weight: 400; color: var(--muted); font-size: 12px; }
|
||||
.topbar .help { margin-left: auto; font-size: 12px; color: var(--muted); cursor: pointer; text-decoration: underline; }
|
||||
.topbar .help:hover { color: var(--text); }
|
||||
.topbar .help {
|
||||
margin-left: auto; cursor: pointer; text-decoration: none; user-select: none;
|
||||
display: inline-flex; align-items: center; justify-content: center;
|
||||
padding: 5px 14px; border-radius: 6px;
|
||||
background: #1d4ed8; color: #fff; font-size: 13px; font-weight: 700; line-height: 1;
|
||||
letter-spacing: .06em;
|
||||
box-shadow: 0 1px 3px rgba(0,0,0,.25);
|
||||
}
|
||||
.topbar .help:hover { background: #1e40af; color: #fff; }
|
||||
.content { max-width: 820px; margin: 20px auto; padding: 0 12px; }
|
||||
.card {
|
||||
background: var(--card); border-radius: 12px;
|
||||
@@ -130,7 +137,7 @@
|
||||
<img src="/static/logo.svg" alt="Nubes">
|
||||
<span class="title">DrHider</span>
|
||||
<span class="ver">v{{ version }}</span>
|
||||
<span class="help" onclick="document.getElementById('helpModal').style.display='flex'">?</span>
|
||||
<span class="help" onclick="document.getElementById('helpModal').style.display='flex'">HELP</span>
|
||||
</div>
|
||||
<div class="content">
|
||||
<div class="card">
|
||||
@@ -139,7 +146,7 @@
|
||||
<p class="sub">
|
||||
Загрузите документы (.docx, .doc, .pdf, .txt, .md, .zip) — получите ZIP с обезличенными копиями.<br>
|
||||
CSV с таблицей замен скачивается отдельно.<br>
|
||||
<span style="color:#c0392b;">Ограничения: один файл не более 50 МБ, суммарно не более 500 МБ. Файлы сверх лимитов помечаются красным и не участвуют в обфускации.</span><br>
|
||||
<span style="color:#c0392b;">Ограничения: один файл не более 50 МБ, суммарно не более 500 МБ. Файлы сверх лимитов помечаются красным и не участвуют в обфускации: при запуске обработки они получают статус «пропущен» и не попадают в результат.</span><br>
|
||||
<span style="color:#7d3c98;">⏱ Время обработки каждого файла — ориентировочное (обновляется по факту).</span>
|
||||
</p>
|
||||
<div class="file-input-wrap">
|
||||
|
||||
Reference in New Issue
Block a user