[2026-09-21] eagle: family/how-to/arr-stack-kraken.md family/plans/watchlist-cleanup.md family/projects/watchlist-automation.md
This commit is contained in:
1 parent
5fed6aef4a
commit
21505ec241
3 files changed
+87
-7
No files matched your search
@@ -284,6 +284,14 @@ curl -s -H "X-Api-Key: $PKEY" "http://localhost:9696/prowlarr/api/v1/search?quer
|
||||
|
||||
## Известные проблемы
|
||||
|
||||
- **✅ 2026-09-21 — ДИСК ЗАПОЛНИЛСЯ НА 100%, ПРИЧИНА УСТРАНЕНА.** `sync-down` добавлял
|
||||
**5 фильмов ежедневно без проверки свободного места** → диск 0 байт, Radarr отдавал
|
||||
`disk I/O error` (SQLite не мог писать). Освобождено вручную: удалены **5 remux = 403 ГБ**
|
||||
(Babylon 93 / Schindler's List 90 / Midsommar 86 / Triangle of Sadness 80 / Unhinged 57 ГБ),
|
||||
`monitored=false` выставлен всем 5 → диск **100% → 77%** (404 ГБ свободно).
|
||||
В код добавлен `MIN_FREE_GB = 100`. Полный разбор — [[family/plans/watchlist-disk-overflow-fix]].
|
||||
⚠️ **Профиль `WEB-4K (no remux)` НЕ защищает от переполнения** — он фильтрует тип релиза,
|
||||
но не размер файла и не проверяет свободное место.
|
||||
- **⚠️ 2026-09-20: compose-файл может ВРАТЬ про сеть.** Ранее в compose Radarr был указан `jellyfin_default`, а реально контейнер жил в `docker_default`; при починке выяснилось, что compose уже писал `media_net`, но контейнеры не были пересозданы. **Всегда проверять фактическое `docker inspect -f '{{range $k,$v := .NetworkSettings.Networks}}{{$k}} {{end}}' <container>`, а не docker-compose.yml.**
|
||||
- **17 фильмов в Radarr `hasFile=False`** — ждут подходящего релиза в Prowlarr. Scream (1996) в процессе загрузки.
|
||||
- **Prowlarr** — если долго не находит релизы, проверить статус индексеров (`/api/v1/health`). ⚠️ health врёт, реальную причину блокировки смотреть в `config/logs/prowlarr.debug.txt` — см. секцию «🔴 Индексера Prowlarr — починка Cloudflare (2026-09-20)» ниже.
|
||||
|
||||
@@ -1,9 +1,27 @@
|
||||
# План: авто-удаление просмотренного (watchlist cleanup)
|
||||
|
||||
**Дата:** 2026-09-20 (обновлено 2026-09-21)
|
||||
**Статус:** ✅ РЕАЛИЗОВАНО И В КРОНЕ. Корзина закрыта (без неё). ⚠️ **Бесполезен сейчас: диск 100%, пересечение `[x]` ∩ Radarr = 0. Блокер — заполнение диска, см. [[family/plans/watchlist-disk-overflow-fix]]**
|
||||
**Статус:** ✅ РЕАЛИЗОВАНО И В КРОНЕ. Корзина закрыта (без неё). ⚠️ **По-прежнему бесполезен: пересечение `[x]` ∩ Radarr = 0 + не покрывает `/media/movies`. Диск освобождён 2026-09-21 вручную (100% → 77%), см. [[family/plans/watchlist-disk-overflow-fix]]**
|
||||
**Связано:** [[watchlist-automation]], [[arr-stack-kraken]], [[watchlist-disk-overflow-fix]]
|
||||
|
||||
> ## ✅ 2026-09-21 — ИНЦИДЕНТ ЗАКРЫТ (краткая выжимка для будущих сессий)
|
||||
>
|
||||
> Задачу «диск 100%» решали **не через cleanup**, а правкой `sync-down`. Полный разбор —
|
||||
> [[family/plans/watchlist-disk-overflow-fix]]. Здесь — только то, что касается cleanup:
|
||||
>
|
||||
> 1. **cleanup НЕ виноват в заполнении** — он только удаляет (Alex поправил первичный неверный вывод).
|
||||
> 2. **Корень:** `sync-down --batch 5` ежедневно без проверки места. Починено: `MIN_FREE_GB = 100`,
|
||||
> фильтр ужасов, надёжный `mark_queued` (коммиты `2642882`, `a131208`).
|
||||
> 3. **Диск освобождён вручную** — удалены 5 remux (403 ГБ), `monitored=false`. Не cleanup'ом.
|
||||
> 4. **cleanup всё ещё не освободит место**, потому что:
|
||||
> - пересечение `[x]` ∩ Radarr-файлы = **0** (просмотренное лежит в `/media/movies` — ручные торренты);
|
||||
> - cleanup смотрит **только Radarr-библиотеку** и не покрывает `/media/movies`.
|
||||
> → **Открытая задача.** Расширять cleanup на `/media/movies` — отдельная работа.
|
||||
> 5. Крон cleanup (`0 2 * * *`) **оставлен активным** — безвреден, сработает когда появится `[x]` ∩ Radarr.
|
||||
>
|
||||
> **Порядок правок для будущих сессий:** коммит ДО → правка → заливка → проверка Alex → коммит ПОСЛЕ.
|
||||
> `~/scripts/` на kraken — root:root, писать только через `sudo install -m 755`, `sudo` без пароля.
|
||||
|
||||
---
|
||||
|
||||
## 🟢 ИТОГ 2026-09-21: в кроне, корзины нет
|
||||
@@ -155,8 +173,10 @@ Triangle of Sadness 79.7 / Unhinged 56.7). Остальные 22 файла —
|
||||
**Сделано:** крон `watchlist-nightly` + `watchlist-discover` **остановлен** (бэкап `~/crontab-backup-20260921.txt`).
|
||||
`watchlist-cleanup` (02:00) **оставлен активным** — он безвреден.
|
||||
|
||||
**Ожидает апрува:** удаление 5 remux-файлов + снятие `⬇️` у Неистового.
|
||||
Полный план ремонта — [[family/plans/watchlist-disk-overflow-fix]].
|
||||
**⚪ УСТАРЕЛО (историческая запись):** «ожидает апрува удаление 5 remux + снятие `⬇️`».
|
||||
**Фактически выполнено 2026-09-21:** 5 remux удалены (403 ГБ), `monitored=false` всем 5,
|
||||
`⬇️` снята у Неистового (стр. 107) и Списка Шиндлера (стр. 396), крон возвращён с `--batch 2`.
|
||||
Итог и верификация — [[family/plans/watchlist-disk-overflow-fix]].
|
||||
|
||||
### Что это меняет для cleanup
|
||||
|
||||
|
||||
@@ -47,27 +47,41 @@ Jellyfin (8096) → rescan → виден контент
|
||||
| `👎` | не хочу (новинка) | process-thumbs перемещает в `## Новинки👎` |
|
||||
| `🗓️` | upcoming (ещё не вышел) | discover помечает, не скачивается |
|
||||
| `❓` | не найдено / ambiguous | ждёт ручного уточнения |
|
||||
| `🧟♀️` | horror (genre_id=27) | информационный маркер |
|
||||
| `⭐` | **приоритет к загрузке** (U+2B50) | sync-down берёт в первую очередь, **фильтр рейтинга не применяется** ✅ реализовано 2026-09-20 |
|
||||
| `🧟♀️` | horror (genre_id=27) | **не скачивается** (фильтр в `sync-down` с 2026-09-21), если нет `⭐` |
|
||||
| `⭐` | **приоритет к загрузке** (U+2B50) | sync-down берёт в первую очередь, **обходит ВСЕ фильтры** (рейтинг + ужасы) ✅ 2026-09-20/21 |
|
||||
|
||||
⚠️ **`✭` (U+272D) — НЕ приоритет.** Alex 2026-09-20 явно указал: звёздочкой-приоритетом считается только `⭐` (U+2B50). Символ `✭` используется в файле как обычная пометка «выделенное», приоритетом не является.
|
||||
|
||||
Также: `⭐` засчитывается **только в строке фильма** (`- [ ] Название ⭐ …`), НЕ в под-буллетах кандидатов, которые генерирует `mark_ambiguous` (там формат «Название (год) ★N.N»). `[x]` (просмотренные) с `⭐` игнорируются. Работает **из всех секций** (`## Фильмы`, `## Новинки`, `## Мультфильмы`, `## Аниме`).
|
||||
|
||||
## Правила отбора в `sync-down` (актуально с 2026-09-20)
|
||||
## Правила отбора в `sync-down` (актуально с 2026-09-21)
|
||||
|
||||
Приоритет определяется **двумя факторами**, а не позицией строки:
|
||||
|
||||
| Условие | Поведение |
|
||||
|---------|-----------|
|
||||
| `⭐` (U+2B50) в строке фильма | **первыми**, фильтр рейтинга **не применяется** |
|
||||
| `⭐` (U+2B50) в строке фильма | **первыми**, фильтры рейтинга И ужасов **не применяются** |
|
||||
| ужас (`is_horror()`, genre_id=27) без `⭐` | **отсеивается**, с логом `[🧟] … horror, skipped` ⬅️ новое 2026-09-21 |
|
||||
| все остальные `[ ]` | **по порядку файла** (сверху вниз), рейтинг ≥ 6.0 |
|
||||
| рейтинг < 6.0 (включая `0.0`) | отсеивается, с логом `[−] … skipped` |
|
||||
| `[x]` | пропускается |
|
||||
| `❓` / `🗓️` (ambiguous) | пропускается, обрабатывается отдельно |
|
||||
|
||||
⚠️ **Стоп-кран по месту (2026-09-21):** перед любым добавлением проверяется `MIN_FREE_GB = 100`.
|
||||
Если свободно меньше — прогон останавливается (`[STOP] free space … — nothing queued`).
|
||||
Проверка через **`shutil.disk_usage`**, не `df`. Именно отсутствие этой проверки заполнило диск
|
||||
на 100% 2026-09-21 — см. [[family/plans/watchlist-disk-overflow-fix]].
|
||||
|
||||
**Фильтр ужасов работает по ЖАНРУ (`candidate.is_horror()`, TMDB genre_id=27), а не по эмодзи `🧟♀️`.**
|
||||
В dry-run 2026-09-21: **33 horror item(s) skipped**, 14 rating skipped.
|
||||
Результат для Alex: 41 фильм с `🧟♀️` (многие — свежие релизы 2025–2026) больше не качается.
|
||||
Обход — поставить `⭐` в строку фильма.
|
||||
|
||||
⚠️ **Порядок файла ≠ рейтинг.** До 2026-09-20 код сортировал по рейтингу TMDB и игнорировал позицию в списке — из-за этого в батч попадали фильмы «не из начала списка». Исправлено коммитом `ada47da`.
|
||||
|
||||
⚠️ **`--batch` снижен 5 → 2** (2026-09-21) после инцидента с диском. Меняется в
|
||||
`~/scripts/watchlist-nightly.sh` (root:root — править через `sudo cp`).
|
||||
|
||||
⚠️ **`⭐` = обход фильтров, а не смена сортировки.** Это принципиальная позиция Alex («Я блядь сказал в приоритете завела»): звёздочка означает явное «хочу», поэтому рейтинг для неё не проверяется вовсе.
|
||||
|
||||
## Структура секций movies-watchlist.md
|
||||
@@ -111,6 +125,44 @@ crontab -l # проверка
|
||||
|
||||
⚠️ **В `docker exec hermes-kraken hermes cron list` по-прежнему «No scheduled jobs»** — это НЕ про watchlist. Watchlist-скрипты детерминированные, живут в системном cron, в Hermes-планировщике их не должно быть. Не искать их там.
|
||||
|
||||
## 🔴 2026-09-21: ДИСК 100% — инцидент и починка `sync-down`
|
||||
|
||||
**Симптом:** диск `/dev/sda1` на Kraken — **0 байт свободно** (`df` 100%). Radarr API отдавал
|
||||
`disk I/O error` (SQLite не может писать при нуле места) — метаданные недоступны.
|
||||
|
||||
**Причина (НЕ cleanup):** `sync-down` в кроне `watchlist-nightly` (01:00) добавлял
|
||||
**5 фильмов ежедневно** (`--batch 5`), **без проверки свободного места** и **без фильтра ужасов**.
|
||||
Radarr качал remux'ы по 57–93 ГБ, пока диск не кончился. Профиль `WEB-4K (no remux)` фильтрует
|
||||
**тип релиза**, но НЕ размер файла и НЕ проверяет место — от переполнения не защищает.
|
||||
|
||||
**Освобождено вручную:** удалены 5 remux = **403 ГБ** (Babylon 93 / Schindler's List 90 /
|
||||
Midsommar 86 / Triangle of Sadness 80 / Unhinged 57 ГБ), всем выставлен `monitored=false`
|
||||
через Radarr API. Диск: **100% → 77%** (404 ГБ).
|
||||
|
||||
**Починено в коде (коммиты `2642882`, `a131208`):**
|
||||
|
||||
| Что | Деталь |
|
||||
|---|---|
|
||||
| Стоп-кран по месту | `MIN_FREE_GB = 100.0` в `sync_down.py`, проверка через `shutil.disk_usage` (не `df`) |
|
||||
| Фильтр ужасов | `candidate.is_horror()` (genre_id=27) пропускает ужасы, если нет `⭐` |
|
||||
| `mark_queued` | возвращает `bool`, поглощает эмодзи-префикс, логирует промах через `_mark()` |
|
||||
| `unmark_queued` | **новая функция** — снятие `⬇️` (не существовала) |
|
||||
| `_clean` | чистит **множественные** эмодзи (`^(?:[chars]+\s*)+`) и **одиночный** год (`*` вместо `+`) |
|
||||
| `sync_up._mark_watched` | видит эмодзи-префикс (иначе фильм не переходил в `[x]`) |
|
||||
| `--batch` | **5 → 2** в `~/scripts/watchlist-nightly.sh` (root:root, править `sudo cp`) |
|
||||
|
||||
**Питфоллы, найденные в процессе:**
|
||||
- `~/scripts/` на Kraken — **root:root 755**, `scp` падает с `Permission denied`. Только `sudo cp`.
|
||||
- Крон-файлы вернуть можно только через `crontab /tmp/файл`; `crontab -l > f` для бэкапа обязателен.
|
||||
- `du` по USB-HDD не влезает в SSH-таймаут на 100%-заполненном диске — запускать в фоне через `systemd-run`.
|
||||
- Когда диск в нуле, **сначала освободить место**, только потом любые API-вызовы Radarr: SQLite мёртв.
|
||||
|
||||
**Открытая задача:** `cleanup` ([[family/plans/watchlist-cleanup]]) **не покрывает `/media/movies`** —
|
||||
смотрит только Radarr-библиотеку, поэтому просмотренное из ручных торрентов не удаляется.
|
||||
Пересечение `[x]` ∩ Radarr-файлы = 0.
|
||||
|
||||
**Полный разбор инцидента:** [[family/plans/watchlist-disk-overflow-fix]]
|
||||
|
||||
## 🔴 Аудит 2026-09-20: как выглядело состояние ДО восстановления (историческая справка)
|
||||
|
||||
**На момент аудита автодобавление фильмов НЕ работало по расписанию.** Скрипты были живы, но их никто не запускал.
|
||||
|
||||
Reference in new issue
Block a user