pinkmine/docs/Как это работает/Как работают стратегии синхронизации redmine и pinkmine.md

106 lines
No EOL
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Стратегия по email
![](../_resources/Папка%20в%20почте%20с%20уведомлениями%20из%20Redmine.png)
1. В задаче в redmine делается любое изменение - смена статуса, обновление описания, добавление нового комментария.
2. Redmine отправляет сообщение о факте обновления задачи по email
3. Pinkmine читает новые письма протоколу imap, находит в заголовках номер задачи с помощью регулярного выражения
4. Pinkmine помещает номер задачи в очередь для выполнения обновления
Параметры работы стратегии задаются в конфигурационном файле `configs/issue-event-emitter-config.jsonc` в секции `mailListener`:
```json
{
// ...
"mailListener": {
// регулярное выражение для определения номера задачи в заголовке письма:
"issueNumberParser": "\\b(?<=#)\\d+\\b",
// параметры для доступа к почте через протокол imap:
"imapSimpleConfig": {
"imap": {
"user": "",
"password": "",
"host": "",
"port": 143,
// tls: true,
"autotls": "always",
"authTimeout": 5000
}
},
// интервал через который происходит проверка почты:
"updateInterval": 180000, // 3 min
// имя папки в которой следует искать входящие письма
"boxName": "INBOX"
},
// ...
}
```
# Стратегия через cron-таски
![Преднастроенный фильтр в Redmine](../_resources/Преднастроенный%20фильтр%20в%20Redmine.png)
1. Pinkmine загружает данные из преднастроенных query-запросов в redmine в формате csv. Выбирает данные по двум полям - id задачи и "обновлено" (дата+время обновления задачи)
2. Pinkmine проверяет какие задачи в своём кеше (CouchDB) уже успели устареть
3. Номера устаревших задач кладёт в очередь для дальнейшего обновления
Параметры работы стратегии задаются в конфигурационном файле `configs/issue-event-emitter-config.jsonc` в секциях `csvListener` и `rootIssueListener`:
```json
{
// ...
// таски для синхронизации по преднастроенным запросам:
"csvListener": {
"tasks": [
{
// расписание для выполнения задачи (синтаксис crontab)
"schedule": "* * * * *",
// поле в csv-файле с датой и временем обновления задачи
"updatedAtFieldName": "Обновлено",
// формат даты и времени
"dateTimeFormat": "dd.MM.yyyy HH:mm",
// ссылки на предстароенные запросы выборки задач в формате csv
"csvLinks": [
"https://<redmine_host>/projects/proj/issues.csv?utf8=%E2%9C%93&query_id=2"
]
}
]
},
// таски для синхронизации корневых и суммирующих задач:
"rootIssueListener": {
"tasks": [
{
// расписание для выполнения задачи (синтаксис crontab)
"schedule": "15 6,12 * * *",
// номера задач
"rootIssues": [
1,
3,
7,
11
]
}
]
},
// ...
}
```
Эта стратегия позволяет догружать данные, которые не пришли по email рассылке: закрытые задачи, shady-mode, изменение структуры дерева при смене привязки к родительской задаче и т.п.