Сервис обрабатывает web-hook'и от трекера Taiga и размещает их в rabbitMQ с возможностью управляемого транспорта между очередями.
Проще: получаем web-hook на событие и перенаправляем его в нужную очередь в зависимости от типа события, типа сущности и проекта.
Данные можно использовать для:
Сервис публикует все сообщения в один общий topic_exchange (Название exchange уточняйте у администратора, при запросе прав), с routing_key
следующего формата:
<subject-type>.<action-type>.<project-number>
* Вместо <subject-type> один из "epic", "task", "issue", "userstory", "milestone", "wikipage"
* Вместо <action-type> один из "create, "delete", "change"
* Вместо <project-number> - проект
При подключении очереди к exchange нужно указать binding_key, он будет определять то, какие сообщения будут попадать в вашу очередь.
Разберем несколько примеров binding_key, для различных задач:
task.create.239
- все события, о созданных задачах в 239ом проектеepic.create.*
- информация о созданных эпиках во всех проектах*.*.239
- все события по проекту 239Рекомендется ознакомиться с документацией topic_exchange из RabbitMQ для лучшего понимания.
Спецификация данных размещаемых в RabbitMQ: ссылка
Спецификация web-hook'ов Taiga: ссылка
По всем вопросам к администратору сервиса или saloshkarev@edu.hse.ru
Язык реализации: python3 с asyncio (3.9+)
Дистрибуция: distutils-пакеты через setup.py и выгрузку зависимостей
Зависимости: ссылка
Дополнительные зависимости для разработки: ссылка
Развертка локального окружения для разработки:
> git clone https://git.miem.hse.ru/300/taiga-producer.git
> python -m venv dev-env
> . ./dev-env/bin/activate
> pip install -e .[dev]
Если вы хотите локально провести запуск основных инструментов сервиса понадоится тестовый rabbitMQ (либо общая тестовая шина). Рекомендую ознкомиться с документацией администратора для полного понимания процесса запуска.
Поддерживаемые обработчики от сервиса taiga-producer:
GET /ping
- обработчик проверки "живости" сервисаGET /metrics
- обработчик сборки метрик в prometheusPOST /taigaEvent
- обработчик приема web-hook'овВнутренняя архитектруа taiga-producer
Обоснование подхода к архитектуре:
На первый взгляд система может показаться через чур сложной, однако это решение применено не просто так. Структура сервиса выстроена так, что он не создает излишней нагрзуки на taiga, при этом ограничивает количество запросов к сервису, позволяет отпустить запрос на webhook и не упустить данных, потому что если Taiga начнет захлебываться от излишней нагрузки, которую может создать наш сервис при резком скачке нагрузки. Все не так просто)
В проекте применяется gitlabCI, который позволяет оптимизировать некоторые процессы в разработке:
Польза: Для сборки достаточно установить гит-тег версии в формате v0.0.0
и запустить пайплайн через интерфейс gitlab. После его завершения пакет станет достпен тут, docker-образ тут. При этом после выпуска новой версии старую даже нет необходимости пересобирать, достаточно лишь выгрузить и запустить версию с нужной ревизии.
После установки Вы получаете утилиты:
taiga-producer
- запуск сервера для обработки вебхуков с тайги и отправки их в соединение с rabbitMQ.taiga-mini-consumer
- запуск клиента для настройки и прослушивания очередей.taiga-prodcuer_make-webhook
- установка webhook'овpip install .
pip install .[dev]
pip install -e .[dev]
При запуске taiga-producer
обязательно должны быть указаны ключ для подписи данных из тайги, логин и пароль пользователя RabbitMQ
, логин и пароль пользователя в taiga
taiga-producer --taiga-secret 12345 --rabbit-login guest rabbit-password guest --taiga-login taiga-login --taiga-password taiga-password
При запуске taiga-consumer
:
taiga-mini-consumer
Конфигурацию для taiga-producer
можно указать либо через переменные среды, либо через CLI.
Жирным - обязательные, без них сервис просто не запустится.
taiga-producer
:
https://track.miem.hse.ru
INFO
, [Возможные значения: DEBUG
, INFO
, WARNING
, ERROR
]taiga-mini-consumer
:
queue-name
- название очереди, к которой надо подключиться (по умолчанию taigaQueue
)rout
- ключ соединения очереди с taiga_excahnge
rabbit-login
- логин пользователя RabbitMQ (по умолчанию guest
)rabbit-password
- пароль пользователя RabbitMQ (по умолчанию guest
)rabbit-host
- хоста Rabbit (по умолчанию 127.0.0.1
)rabbit-port
- порт Rabbot (по умолчанию 5672
)taiga-prodcuer_make-webhook
:
login
- админский логин в тайгеpassword
- админский пароль в тайгеhost
- хост тайгиname
- название вебхукаurl
- url, по которому отправляется webhookkey
- ключ подписи данных тайгиДля сбора мониторингов используется система prometheus с pull-схемой. Раз в 5 секунд система мониторинга автоматически обращается к сервису в ручку /metrics и собирает данные. Их подробное описание будет добавлено в соответствующем разделе.