106 lines
No EOL
4.3 KiB
Markdown
106 lines
No EOL
4.3 KiB
Markdown
# Стратегия по email
|
||
|
||

|
||
|
||
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-таски
|
||
|
||

|
||
|
||
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, изменение структуры дерева при смене привязки к родительской задаче и т.п. |