wip1
This commit is contained in:
+16
-16
@@ -16,7 +16,7 @@ tags: ["iptvc", "разработка", "архитектура"]
|
||||
- `github.com/spf13/cobra` — CLI-фреймворк;
|
||||
- `gopkg.in/yaml.v3` — парсинг `config.yml`;
|
||||
- `github.com/joho/godotenv` — загрузка `.env`;
|
||||
- `github.com/redis/go-redis/v9` — клиент KeyDB/Redis.
|
||||
- `github.com/redis/go-redis/v9` — клиент кеша.
|
||||
|
||||
## Структура проекта
|
||||
|
||||
@@ -46,7 +46,7 @@ iptvc/
|
||||
│ ├── tagfile/
|
||||
│ │ └── tagfile.go # чтение channels.json, назначение тегов
|
||||
│ ├── cache/
|
||||
│ │ └── cache.go # подключение к KeyDB/Redis
|
||||
│ │ └── cache.go # подключение к кешу
|
||||
│ ├── logger/
|
||||
│ │ └── logger.go # настройка логирования
|
||||
│ ├── utils/
|
||||
@@ -76,9 +76,9 @@ iptvc/
|
||||
|
||||
### `app`
|
||||
|
||||
Глобальный контейнер: `Args` (CLI-флаги), `Config` (конфигурация), `Cache` (Redis-клиент).
|
||||
Глобальный контейнер: `Args` (CLI-флаги), `Config` (конфигурация), `Cache` (кеш-клиент).
|
||||
`Init()` загружает конфигурацию и инициализирует логгер.
|
||||
`InitCache()` подключается к KeyDB/Redis, если кеш включён.
|
||||
`InitCache()` подключается к кешу, если кеш включён.
|
||||
|
||||
### `app.config`
|
||||
|
||||
@@ -98,10 +98,10 @@ iptvc/
|
||||
Содержит логику проверки:
|
||||
|
||||
- **`PrepareListsToCheck(files, urls, codes)`** — формирует список плейлистов из файлов, URL и кодов ini-файла.
|
||||
- **`CheckPlaylists(lists)`** — параллельная проверка плейлистов (семфор `max-routines`), загрузка, парсинг, вызов `CheckChannels` для каждого.
|
||||
- **`CheckChannels(pls)`** — параллельная проверка каналов (семфор `max-routines`), HTTP-запрос с `Range` header.
|
||||
- **`CheckPlaylists(lists)`** — параллельная проверка плейлистов (семфор `maxRoutines`), загрузка, парсинг, вызов `CheckChannels` для каждого.
|
||||
- **`CheckChannels(pls)`** — параллельная проверка каналов (семфор `maxRoutines`), HTTP-запрос с `Range` header.
|
||||
- **`OnPlaylistChecked`** — глобальный callback, вызывается после проверки каждого плейлиста. Используется веб-сервером для обновления in-memory кеша.
|
||||
- **`cachePlaylist(pls)`** — сохранение результата в Redis (если включён).
|
||||
- **`cachePlaylist(pls)`** — сохранение результата в кеш (если включён).
|
||||
|
||||
Параметры проверки берутся из `app.Config.Check.Playlists` и `app.Config.Check.Channels`.
|
||||
|
||||
@@ -141,7 +141,7 @@ GET /{path...} — все остальные маршру
|
||||
Catch-all `/{path...}` используется для избежания конфликтов паттернов в Go 1.22 mux.
|
||||
|
||||
In-memory кеш (`memCache`) обновляется через `OnPlaylistChecked` callback.
|
||||
Это позволяет отображать результаты проверки в реальном времени без ожидания завершения цикла и без Redis.
|
||||
Это позволяет отображать результаты проверки в реальном времени без ожидания завершения цикла и без внешнего кеша.
|
||||
|
||||
ini-файл кешируется на 30 секунд, кеш сбрасывается при каждом обновлении `memCache`.
|
||||
|
||||
@@ -155,16 +155,16 @@ StartBackgroundChecker:
|
||||
runCheckerOnce()
|
||||
→ checker.PrepareListsToCheck()
|
||||
→ checker.CheckPlaylists()
|
||||
→ for each playlist (parallel, per-routine):
|
||||
→ for each playlist (parallel, perRoutine):
|
||||
→ Download() / ReadFromFs()
|
||||
→ Parse()
|
||||
→ CheckChannels()
|
||||
→ for each channel (parallel, per-routine):
|
||||
→ for each channel (parallel, perRoutine):
|
||||
→ HTTP GET with Range header
|
||||
→ check status + content type
|
||||
→ OnPlaylistChecked(pls) → memCache update
|
||||
→ one-cooldown sleep
|
||||
→ all-cooldown sleep
|
||||
→ oneCooldown sleep
|
||||
→ allCooldown sleep
|
||||
if repeat > 0 && iteration >= repeat: stop
|
||||
```
|
||||
|
||||
@@ -211,7 +211,7 @@ StartBackgroundChecker:
|
||||
|
||||
## Конфигурация
|
||||
|
||||
Подробное описание параметров — в разделе [config.yml](../../ref/config.md).
|
||||
Подробное описание параметров — в разделе [config.yml](../../reference/config.md).
|
||||
|
||||
Приоритет: Defaults < `config.yml` < Env < CLI-флаги.
|
||||
|
||||
@@ -235,7 +235,7 @@ SVG-логотипы каналов передаются через `encodeURICo
|
||||
|
||||
Два уровня кеша:
|
||||
|
||||
1. **Redis/KeyDB** (опционально) — постоянный кеш результатов проверки. TTL из `cache.ttl`.
|
||||
2. **In-memory** (`memCache`) — только при `serve --check`. Обновляется в реальном времени через callback. Не требует Redis.
|
||||
1. **Внешний кеш** (опционально) — постоянный кеш результатов проверки. TTL из `cache.ttl`.
|
||||
2. **In-memory** (`memCache`) — только при `serve --check`. Обновляется в реальном времени через callback. Не требует внешнего кеша.
|
||||
|
||||
In-memory кеш приоритетнее Redis при отображении в веб-интерфейсе.
|
||||
In-memory кеш приоритетнее внешнего кеша при отображении в веб-интерфейсе.
|
||||
|
||||
Reference in New Issue
Block a user