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