[2026-09-22] eagle: personal/plans/lampac-disable-1xbet-ads.md personal/plans/watchlist-tmdb-missing-marker.md personal/tech/lampac-deployment.md personal/tech/lampac-torrserver.md
This commit is contained in:
1 parent
c835707a13
commit
c9d1f21383
4 files changed
+392
-24
No files matched your search
@@ -394,6 +394,107 @@ if norm(title) not in missing:
|
||||
(`$H` = `/srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f/lampac`),
|
||||
`kraken:kraken`, бэкапы `/tmp/movies-watchlist.md.bak-*` + `.bak-questions` рядом.
|
||||
|
||||
## ✅ Название и год карточки — ИЗ TMDB, не из `.md` (2026-09-22)
|
||||
|
||||
**Требование Alex (дословно):** *«че по имени в карточке? оно должно из источника
|
||||
ставиться.»* + ранее *«БЛЯДЬ ... Ничего не укорачивать. Отображать как в tmdb/kp.»*
|
||||
|
||||
### Что было не так
|
||||
|
||||
Генератор писал `it["name"] = название из .md`, `it["year"] = год из .md`.
|
||||
Проверено сырьём — TMDB отдаёт **другое**:
|
||||
|
||||
```
|
||||
в .md: TMDB ru-RU: TMDB en-US:
|
||||
'Смерть единорога' → 'Смерть Единорога' 'Death of a Unicorn' ← регистр!
|
||||
'Everything…' → 'Всё везде и сразу' 'Everything…' ← русское
|
||||
'Духless' → 'Духless' 'Soulless'
|
||||
```
|
||||
|
||||
Плюс `year` вообще приходил `null`, хотя TMDB знает `release_date`, а в кэше
|
||||
деталей **не было поля с названием** — только `cast/country/genres/overview/
|
||||
poster_path/runtime/tagline/vote`.
|
||||
|
||||
### Фикс: `tmdb_details()` тянет имя + год
|
||||
|
||||
```python
|
||||
url = (f"https://api.themoviedb.org/3/{mtype}/{tmdb_id}"
|
||||
f"?api_key={api_key}&language=ru-RU&append_to_response=credits")
|
||||
ru_title = d.get("title") or d.get("name") or ""
|
||||
orig_title = d.get("original_title") or d.get("original_name") or ""
|
||||
date = d.get("release_date") or d.get("first_air_date") or ""
|
||||
year = int(date[:4]) if re.match(r"^\d{4}", date) else None
|
||||
out = {..., "title": ru_title, "original_title": orig_title,
|
||||
"en_title": en_title, "year": year, "release_date": date}
|
||||
```
|
||||
|
||||
В `enrich()` — приоритет **источник → `.md` как fallback**:
|
||||
|
||||
```python
|
||||
src_name = (d.get("title") or "").strip()
|
||||
if src_name:
|
||||
it["name"] = src_name # русское название TMDB
|
||||
src_orig = (d.get("original_title") or "").strip()
|
||||
if src_orig:
|
||||
it["original"] = src_orig # оригинал
|
||||
if it.get("year") is None and d.get("year"):
|
||||
it["year"] = d["year"] # год из release_date
|
||||
```
|
||||
|
||||
⚠️ Год из `.md` **не перетирается**, если он там был — он может быть точнее для
|
||||
локальных премьер РФ.
|
||||
|
||||
### 🔴 Миграция старого кэша деталей
|
||||
|
||||
367 записей были **без поля `title`**. Добавлена проверка в начале
|
||||
`tmdb_details()`: если у записи нет `title` — перезапрашивается из TMDB
|
||||
(остальные 8 полей не теряются, запись заменяется целиком).
|
||||
|
||||
```python
|
||||
if key in details:
|
||||
d = details[key]
|
||||
if d.get("title"): # уже мигрировано
|
||||
return d
|
||||
# иначе падаем дальше в запрос
|
||||
```
|
||||
|
||||
### Боевой прогон (EXIT=0)
|
||||
|
||||
```
|
||||
376 позиций | без года: 1 (из 376) | 296 с русским названием + оригиналом
|
||||
|
||||
'Смерть единорога' → 'Смерть Единорога' orig='Death of a Unicorn' year=2025
|
||||
'Everything…' → 'Всё везде и сразу' orig='Everything…' year=2022
|
||||
'Простите за бесп…' → чисто orig='Sorry to Bother You' year=2018
|
||||
'Духless' → 'Духless' orig='Духless' year=2012
|
||||
'Бумбараш' → 'Бумбараш' orig='Бумбараш' year=1972
|
||||
'Я ругаюсь' → orig='I Swear' · 'Гамнет' → orig='Hamnet'
|
||||
'Марти Великолепный'→ orig='Marty Supreme'
|
||||
```
|
||||
|
||||
Единственная позиция без года: **`Волшебный участок: Фильм`** — в TMDB год
|
||||
не проставлен.
|
||||
|
||||
Коммит `lampac-scripts` **`53e5803`** (запушен: `1122b71..53e5803 main -> main`).
|
||||
|
||||
### 🔴 Питфолл прогона: `setsid nohup` НЕ спасает от обрыва ssh
|
||||
|
||||
Прогон умирал **дважды** на `client_loop: send disconnect: Broken pipe` —
|
||||
ssh-сессия забирала группу процессов с собой. Рабочее решение:
|
||||
|
||||
```bash
|
||||
systemd-run --user --unit=gen-watchlist --scope /tmp/gen-runner.sh
|
||||
# Running scope as unit: gen-watchlist.scope ← отвязан от сессии
|
||||
```
|
||||
|
||||
Обёртка `~/lampac-tmp/run_gen_systemd.sh` пишет лог в `/tmp/gen-run.log`
|
||||
и добавляет `EXIT=$?` в конец. Проверка: `pgrep -f gen_watchlist.py`.
|
||||
|
||||
⚠️ **Путь к `.md` — на уровень ВЫШЕ lampac:**
|
||||
`$H/obsidian/family/documents/movies-watchlist.md`, где
|
||||
`$H` = `/srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f`.
|
||||
Ошибочно подставлял `$H/lampac/obsidian/...` → `[ERR] нет источника`.
|
||||
|
||||
## 🔴🔴 Источники воспроизведения: торренты ≠ «смотреть онлайн» (2026-09-22)
|
||||
|
||||
**Вопрос Alex:** *«у меня есть определенные сомнения что через torrserver идут,
|
||||
@@ -438,14 +539,85 @@ FlixCDN · Gencit · HDVB · Kinobase · Kinogo · Kinoteatrkg · Kinotochka ·
|
||||
LeProduction · Mirage · Phantom · PizdatoeHD · RuDub · RutubeMovie · Spectre ·
|
||||
VeoVeo · Vibix · VideoDB · Videoseed · VkMovie · Zetflix · ZetflixDB`
|
||||
|
||||
### Почему «Торренты» пусто
|
||||
### Почему «Торренты» пусто — ✅ РАЗОБРАНО ПОЛНОСТЬЮ (2026-09-22)
|
||||
|
||||
TorrServer **работает** (`docker exec lampac curl -s http://127.0.0.1:9085/echo`
|
||||
→ `MatriX.135`), но по этим фильмам **нет раздач** — нет сидов в трекере.
|
||||
Это не поломка.
|
||||
**Вывод: TorrServer и вся торрент-цепочка ИСПРАВНЫ. Чинить нечего.**
|
||||
|
||||
🔴 **TorrServer НЕДОСТУПЕН снаружи контейнера** — `curl http://127.0.0.1:9085/*`
|
||||
с хоста даёт `Connection refused`. Проверять **только** через `docker exec lampac`.
|
||||
Первая версия объяснения («нет раздач — нет сидов») была **неполной**. Полная
|
||||
диагностика ниже доказала, что раздачи находятся. Отдельный док:
|
||||
[[personal/tech/lampac-torrserver]].
|
||||
|
||||
#### TorrServer жив и качает
|
||||
|
||||
```bash
|
||||
docker exec lampac sh -c 'curl -s http://127.0.0.1:9085/echo' # -> MatriX.135
|
||||
```
|
||||
|
||||
Тест живым магнитом (Big Buck Bunny) — раздача добавилась и пошла:
|
||||
|
||||
```json
|
||||
{"title":"probe","name":"Big Buck Bunny","stat":3,
|
||||
"stat_string":"Torrent working","total_peers":343,"active_peers":7,
|
||||
"connected_seeders":5,"bytes_written":6918,"bytes_read":49072}
|
||||
```
|
||||
|
||||
⚠️ Тестовая раздача **удалена** после проверки:
|
||||
`POST /ts/torrents {"action":"rem","hash":"<hash>"}` → HTTP 200.
|
||||
|
||||
#### Торрент-поиск работает по всей цепочке
|
||||
|
||||
```
|
||||
JacRed /api/v1.0/torrents?search=Матрица → HTTP 200, 74 КБ, magnet ✅
|
||||
трекеры: kinozal, torrentby, rutor, rutracker
|
||||
PidTor /lite/pidtor?title=Матрица&year=1999 → HTTP 200, 8435 Б, раздача ✅
|
||||
jac.red → 144.31.3.10, HTTP 200 ✅
|
||||
/lite/events → "Pid<s>T</s>or" присутствует ✅
|
||||
```
|
||||
|
||||
#### 🔴 Почему я поначалу решил, что TorrServer сломан — питфолл маршрутов
|
||||
|
||||
**TorrServer НЕ доступен по порту 9085 для клиента.** Lampac проксирует его
|
||||
под префиксом **`/ts/`** на порт **9118**:
|
||||
|
||||
```
|
||||
http://127.0.0.1:9118/ts/echo -> MatriX.135
|
||||
http://127.0.0.1:9118/ts/{*suffix} -> прокси на TorrServer API
|
||||
http://127.0.0.1:9118/ts/stream -> воспроизведение
|
||||
http://127.0.0.1:9118/ts/playlist -> плейлист
|
||||
http://127.0.0.1:9118/ts/download/ -> скачивание
|
||||
```
|
||||
|
||||
Мои первые запросы `GET http://127.0.0.1:9085/torrents` → 404, и я принял это
|
||||
за поломку. Снаружи контейнера порт 9085 вообще даёт `Connection refused`.
|
||||
Проверять **только** через `docker exec lampac` либо через `/ts/` на 9118.
|
||||
|
||||
🔴 **Метод запроса ВАЖЕН — и `400` вместо `404` = маршрут существует:**
|
||||
|
||||
```
|
||||
POST /ts/torrents с телом [] -> [] ✅ список раздач
|
||||
POST /ts/torrents с телом {} -> 400 (неверный формат тела)
|
||||
GET /ts/torrents -> 404 (метода нет)
|
||||
GET /ts/settings -> 403 (нужна авторизация ts:tspass)
|
||||
```
|
||||
|
||||
#### 🔴 Вероятная причина пустого списка у Alex: `min_sid: 15`
|
||||
|
||||
```json
|
||||
"PidTor": { "enable": true, "enabled": false, "redapi": "http://jac.red",
|
||||
"min_sid": 15, "torrs": null, "auth_torrs": null }
|
||||
```
|
||||
|
||||
Раздачи с числом сидов **< 15 отсекаются**. Редкие/старые фильмы дадут пусто
|
||||
именно из-за этого. Проверка по конкретному фильму:
|
||||
|
||||
```bash
|
||||
curl -s "http://127.0.0.1:9118/lite/pidtor?title=<название>&year=<год>"
|
||||
docker logs lampac 2>&1 | grep -i pidtor
|
||||
```
|
||||
|
||||
⚠️ **README PidTor устарел:** там написано «пункт появляется только если заданы
|
||||
`torrs`/`auth_torrs`, иначе список пустой». Фактически при `null` `/lite/pidtor`
|
||||
отдал 8435 байт с рабочей раздачей. Верить факту, не README.
|
||||
|
||||
### `vast.js` — НЕ виновник (проверено сырьём)
|
||||
|
||||
@@ -490,7 +662,12 @@ $H/wwwroot/sisi/plugins/modification.js (22 КБ):
|
||||
```
|
||||
|
||||
План и варианты: [[personal/plans/lampac-disable-1xbet-ads]].
|
||||
Статус: **ждёт выбора Alex** (гасить онлайн полностью / частично / оставить).
|
||||
|
||||
🔴🔴 **СТАТУС: НЕ ПРИМЕНЕНО И НЕ БУДЕТ.** Alex: *«Я БЛЯДЬ НЕ ПРОСИЛ ГАСИТЬ
|
||||
ОНЛАЙН, ЕБЛАН! Я СКАЗАЛ ЧИНИТЬ torrserver!»* Задача была — **диагностировать
|
||||
TorrServer**, а не гасить онлайн. План откачен, `init.conf` не менялся.
|
||||
Док оставлен как справка, где лежит выключатель; применять только по прямому
|
||||
указанию Alex.
|
||||
|
||||
## 🚀 Деплой генератора на Кра́кен (проверено 2026-09-22)
|
||||
|
||||
|
||||
Reference in new issue
Block a user