Add README with quick start and crontab example.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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`.
|
||||||
Reference in New Issue
Block a user