No description
- Go 97.5%
- Dockerfile 2.2%
- Shell 0.3%
| .githooks | ||
| .zed | ||
| app | ||
| cmd | ||
| contracts | ||
| internal | ||
| mock-ml | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| .golangci.yml | ||
| Dockerfile | ||
| go.mod | ||
| go.sum | ||
| policy.yml | ||
| README.md | ||
| Taskfile.yml | ||
Crawler
Что это?
Это отдельный сервис для получения данных из Telegram каналов и веб-сайтов
Как это работает? (Telegram)
- В публичном канале появляется пост.
- Бот проверяет, находится ли канал в списке отслеживаемых каналов
- Если канал отслеживается, то бот отправляет пост в NATS
Генерация Telegram session через номер телефона
Для авторизации пользовательского аккаунта и сохранения session в sqlite:
go run ./cmd/tg-session --phone "+79991234567" --session-path "crawler-tg-user.session.db"
Что нужно перед запуском:
- задать
TELEGRAM_API_IDиTELEGRAM_API_HASH(в.envили в переменных окружения); - при необходимости передать
--api-idи--api-hashфлагами.
Во время запуска утилита запросит OTP-код (и 2FA-пароль, если включен), затем сохранит session в указанный sqlite-файл.
Если нужен string session, добавьте флаг:
--print-string-session
Локальный dev-стек для экспорта сообщений (MinIO + NATS)
Поднять MinIO, init-контейнер для создания приватного bucket и NATS:
docker compose -f dev-compose.yml up -d
Что делает init-контейнер:
- ждёт готовности MinIO;
- создаёт bucket
messages(если его нет); - выставляет bucket как private.
Нужные переменные окружения для экспортера:
MINIO_ENDPOINT(по умолчаниюlocalhost:9000)MINIO_ACCESS_KEY(по умолчаниюminioadmin)MINIO_SECRET_KEY(по умолчаниюminioadmin)MINIO_BUCKET(по умолчаниюmessages)MINIO_USE_SSL(по умолчаниюfalse)NATS_URL(по умолчаниюnats://localhost:4222)NATS_SUBJECT(по умолчаниюraw.mentions)SOURCES_PROVIDER_URL(по умолчаниюhttp://localhost:8080/sources)SOURCES_PROVIDER_TIMEOUT(по умолчанию15s)OBSERVABILITY_ADDR(по умолчанию:8091)OBSERVABILITY_PROBE_TIMEOUT(по умолчанию3s)
Healthcheck и Prometheus metrics
Crawler поднимает отдельный HTTP endpoint для наблюдаемости:
GET /healthиGET /health/live— liveness (процесс запущен).GET /health/ready— readiness (пингует зависимости Backend и ML).GET /metrics— Prometheus-метрики.
Порт задаётся через OBSERVABILITY_ADDR (по умолчанию :8091).
Ключевые метрики:
crawler_posts_total{source_type,status}— количество обработанных постов (received/exported/skipped/failed).crawler_errors_total{component,kind}— счётчик ошибок по компонентам.crawler_dependency_up{dependency}— статус зависимостей (1— up,0— down).
Формат ответа источника:
{"telegram": [], "web": [], "web-rss": []}
QA tooling
Основные команды в Taskfile.yml:
task format— форматирование Go-кода;task lint— проверкаgolangci-lint;task test— запуск тестов.go test -tags e2e ./...— запуск e2e-тестов (включая проверки реальных web/rss источников).
Установить pre-commit hook:
task pre-commit:install
Запустить локально тот же пайплайн, что и hook:
task pre-commit:run
Как это работает? (Web)
- Раз в определенный интервал бот посещяет веб-сайт
- Бот парсит страницу на предмет изменений в контенте
- Если таковые обнаружены, то бот парсит их и отправляет в NATS
TODO
- cd