6.6 KiB
Общая структура
Основной код приложения написан на TypeScript и фреймворке NestJS (это такой Angular для backend-а)
Монолитное приложение включает в своём составе:
- основная функциональность
- кеш и промежуточный коллектор для данных на couchdb
- http api для внешних интеграций
- webhook-и и websocket-ы
- telegram-бот - есть возможность для реализации новых интеграций с другими чат-ботами
- cron-task-и для выполнения повторяющихся задач
- frontend server-side на простой шаблонизации
- frontend на react
- специальный плагин для lowcode платформы n8n
Основной процесс
Двигателем приложения служит redmine-issue-event-emitter - это основной процесс поступления данных в Pinkmine.
- Подписка на источники событий - по email, через cron-таски, через rss. Позволяет обнаруживать факты изменений в задачах в redmine. (подробнее)
- Redmine Issue Event Emitter - это очередь для синхронизации данных из redmine. На выход кладётся номер задачи, на выходе данные полученные с помощью redmine api. Очередь обеспечивает бережное отношение к боевому redmine, так как позволяет выполнять выгрузки не выходя за выставленный лимит обращений. (подробнее про работу очереди и подробнее про загрузку задач из redmine)
- Преобразование задачи - это набор вспомогательных обработчиков. Позволяет при получении данных произвести попутно полезные изменения, например, привести текстовые теги к массиву, определить текущего ответственного за задачу, обнаружить в описании или в комментариях ссылки на gitlab на MR-ы, в т.ч. можно реализовать специализированный обработчик. (подбронее)
- Сохранение задачи в кеш в CouchDB (подробнее)
- Анализ изменений в задаче - это сравнение предыдущего состояния задачи с новым. Позволяет организовать процессы связанные с жизненным циклом самой задачи и, например, разослать уведомления с учётом происходящих изменений (подробнее)
- Сохранение событий изменения в журнал - вспомогательная коллекция данных (подробнее)
Точки расширения
Платформа Pinkmine предполагает в т.ч. реализацию конкретных задач в рамках основного кода. Допускается реализация специализированных внутренних сервисов.
В рамках ядра redmine-issue-event-emitter:
- новые стратегии получения задач из Redmine
- специализированные обработчики задач для отдельных проектов
- интеграция событий в новые процессы - чат-боты или простая передача данных с помощью webhook-ов и websocket-ов
В рамках расширенной платформы pinkmine:
Благодаря CouchDB стало возможным предоставить api для поиска задач с более гибкими условиями для выборки чем во встроенном в redmine api. Можно использовать в выборках комбинированные выражения через "и"/"или". Богатый набор операторов - "есть значение", "нет значения", "больше", "меньше", "равно", "поиск по регулярному выражению". Для поиска можно пользоваться расширенными данными.
CouchDB позволяет выгружать для работы и анализа больший объём данных чем основной api redmine.
Webhook-и и websocket-ы могут сделать api ещё более гибким.
В рамках реализованного telegram chat бота можно дописывать логику работы под узкоспециализированные задачи.
С помощью фреймворка NestJS можно сделать сервисы для решения узких задач. Например, сделать cron-task-у с аналитической выгрузкой с сохранением промежуточных результатов во вспомогательную коллекцию в CouchDB и предостатить уже к ней доступ через http api и сделать человеко-читаемое представление с помощью шаблона.

