From eb2c9bab1956c4c42ea9f9a698d5da567651e01c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9=20=D0=9C=D0=B0=D1=80?= =?UTF-8?q?=D0=B8=D0=BD=D0=BA=D0=B5=D0=B2=D0=B8=D1=87?= Date: Thu, 1 Oct 2026 11:55:13 +0700 Subject: [PATCH] Add README with quick start and crontab example. Co-authored-by: Cursor --- README.md | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..5b29549 --- /dev/null +++ b/README.md @@ -0,0 +1,84 @@ +# mattermost-dl + +Локальная выгрузка истории Mattermost в JSON и поиск по ней (SQLite FTS и MCP). + +- `mattermost-dl.py` — скачивает каналы в `results/YYYYMMDD/` +- `mm_index.py` — индексирует выгрузки в `mattermost_index.sqlite` +- `mm_search.py` — поиск из командной строки +- `mm_search_mcp.py` — тот же поиск как MCP-сервер +- `renew.sh` — инкрементальная выгрузка команд и обновление индекса + +`config.json`, `cookies.pkl`, `results/` и база индекса в git не попадают. + +## Быстрый старт + +```bash +cd /home/grayhook/Documents/mattermost-dl +python3 -m venv .venv +.venv/bin/pip install mattermostdriver requests beautifulsoup4 fastmcp +cp config.json.example config.json +``` + +В `config.json` укажите хост Mattermost (без `https://`), `login_mode` (`gitlab`, `token` или `password`) и логин. Пароль в файл не пишется. + +Первый запуск интерактивный: скрипт спросит недостающие поля и сохранит токен. + +```bash +.venv/bin/python mattermost-dl.py +``` + +Дальше выгрузка без вопросов — оба флага обязательны. `--channel all` берёт все каналы команды, иначе список имён через запятую. + +```bash +.venv/bin/python mattermost-dl.py --team esr-daily --channel all +``` + +После первого успешного прогона в конфиг пишутся `incremental`, `last_export_at` и `output_base`. Следующие запуски дописывают только новые сообщения в ту же папку. + +Индекс (для быстрого поиска и вложений): + +```bash +.venv/bin/python mm_index.py +``` + +Поиск: + +```bash +.venv/bin/python mm_search.py "текст" --user sergey.marinkevich --limit 20 +``` + +Обновить все настроенные команды и индекс одной командой: + +```bash +./renew.sh +``` + +`renew.sh` выгружает `esr-daily`, `esr-developers` и `esr-dev-and-qa`, затем вызывает `mm_index.py`. + +## Crontab + +Каждые 15 минут в рабочие часы будней — выгрузка и инкрементальный индекс. По субботам в 10:15 — полная переиндексация. + +```cron +*/15 8-22 * * 1-5 cd /home/grayhook/Documents/mattermost-dl && /usr/bin/bash renew.sh >> /tmp/mattermost-dl.log 2>&1 +15 10 * * 6 cd /home/grayhook/Documents/mattermost-dl && ./.venv/bin/python3 mm_index.py --reindex-all >> /tmp/mattermost-dl-weekly.log 2>&1 +``` + +## Поиск + +| Задача | Команда | +|---|---| +| Текст сообщения | `mm_search.py "запрос"` | +| Пользователь, канал, команда | `--user`, `--channel`, `--team` | +| Даты | `--after 2026-01-01 --before 2026-02-01` | +| Имя вложения | `--file-name` (нужен индекс) | +| Текст внутри вложения | `--file-content` (нужен индекс, только UTF-8) | +| Каталог пользователей | `--resolve-user "Фамилия"` / `--search-users "запрос"` | + +Корень выгрузки по умолчанию `results`, база — `mattermost_index.sqlite`. Переопределение: `-r` / `--root` и `--db`. Полный проход без кэша файлов: `mm_index.py --reindex-all`. + +## MCP + +`mm_search_mcp.py` по умолчанию работает через stdio. Общий HTTP-процесс: `MM_MCP_TRANSPORT=http`, хост и порт — `MM_MCP_HOST` / `MM_MCP_PORT` (по умолчанию `127.0.0.1` и `8766`), путь — `MM_MCP_PATH` (`/mcp`). Пример юнита — `mm-search-mcp.service`. + +Переменные поиска: `MM_SEARCH_ROOT` (по умолчанию `results`), `MM_SEARCH_DB` (`mattermost_index.sqlite`), `MM_CONFIG_PATH` (`config.json`). Подробности инструментов — в `mattermost-search/SKILL.md`.