Правило автоматизации отвечает на три вопроса: когда (событие), при каком состоянии (условие) и что сделать (действия). Каждое автоматическое изменение записывается в журнал с именем правила и номером ревизии: у всего, что произошло само, есть подпись.
Правило и его область
Правило принадлежит компании и называет свою область: перечень проектов или все проекты сразу. У правила есть владелец и аккаунт правила: права проверяются по этому аккаунту в момент, когда правило действует. По умолчанию это создатель; администратор компании может заменить его на сервисный аккаунт, и только на сервисный: правило, работающее от имени уволившегося, перестает работать вместе с ним, а сервисный аккаунт переживает людей.
Создавать правила может администратор хотя бы одного проекта. Редактировать правило может тот, кто администрирует каждый проект его области; правило на все проекты редактируют только администраторы компании. Видит правило тот, кому видна вся его область.
События
| Событие | Когда наступает |
|---|---|
| Задача создана | Появилась новая задача. |
| Задача изменена | Изменились поля задачи. Можно сузить: срабатывать только на перечисленные поля. |
| Задача переведена | Задача сменила статус. Можно сузить: из каких статусов и в какие. |
| Комментарий добавлен | К задаче добавили комментарий. |
| По расписанию | Наступило время из расписания правила. |
Событие говорит об изменении: какие поля изменились, из какого статуса в какой. Условие говорит о настоящем: каким состояние является сейчас. «Статус сменился с X» это настройка события; «статус равен Y» это условие.
Условия
Условие пишется на QQL, тем же языком, что и поиск, с теми же полями и функциями. Пустое условие означает «на каждое подходящее событие». Условие проверяется глазами аккаунта правила: задача, которую этот аккаунт не видит, никогда не подходит, поэтому правило не может тронуть то, что его аккаунту не показали бы.
Условие с ошибкой не публикуется: разбор происходит при публикации, и сообщение указывает на место в запросе.
Действия
Действия делятся на два вида, и это различие стоит понимать до того, как оно понадобится:
Выполняются внутри действия пользователя: назначить исполнителя, установить поле, добавить метку. Они входят в само изменение: если такое действие не может выполниться, отменяется и изменение, которое разбудило правило. Человек видит отказ сразу, на экране.
Выполняются после: добавить комментарий, перевести статус, уведомить человека, связать задачи, записать время, вызвать внешний адрес. Они выполняются после того, как изменение сохранено, и их сбой никогда не отменяет ничью работу: несостоявшийся комментарий это несостоявшийся комментарий, а не потерянная правка.
Значения проверяются при публикации: правило, пишущее в поле выбора несуществующий вариант, не публикуется, а не портит данные молча при первом событии. Длительность для записи времени разбирается тогда же: «полтора часа» отклоняется при публикации, 1h 30m принимается.
Черновики, публикация, ревизии
Правило рождается черновиком: выключенным и никогда не действующим. Действует только опубликованное: публикация замораживает содержимое в ревизию, и исполнение читает только ревизии. Отредактированное, но не опубликованное изменение не действует, даже у включенного правила: оно действует голосом последней публикации.
Ревизии не переписываются. Возврат к старой ревизии это новая публикация со старым содержимым: история только растет. Каждая запись в журнале называет ревизию, которой правило действовало, и это остается проверяемым всегда, даже после удаления правила: удаление мягкое, журнал и ревизии остаются читаемыми.
Проверка
Проверка это главный экран раздела: правило прогоняется по настоящим задачам, не записывая ничего. Тот же разбор условия, те же права, тот же порядок действий; вместо выполнения собирается план: какие задачи подошли, какие действия были бы выполнены, каким был бы внешний вызов, вплоть до тела запроса с замаскированным секретом. Какие задачи не подошли, тоже видно.
Проверить можно и черновик: это единственный способ увидеть, что правило будет делать, до того, как оно начнет. Проверка ограничена, потому что откатываемый прогон стоит как настоящая работа: до 50 задач за прогон, до 6 прогонов в минуту на человека, до 10 секунд на прогон.
Расписания
Правило по расписанию не ждет события: оно называет собственную выборку на QQL, время и повторение: ежедневно, еженедельно по дням недели, ежемесячно по числам.
- Часовой пояс принадлежит правилу, а не компании. В распределенной компании «каждый понедельник в 9:00» это разное время для разных правил; пояс компании лишь подсказка при создании.
- Пропущенное не догоняется. Если продукт был недоступен в назначенное время, правило выполнится в следующее назначенное время один раз. Проснувшись, оно не наверстывает пропущенные запуски: три пропущенных понедельника не означают три прогона во вторник.
- Один запуск обрабатывает до 500 задач. Если выборка шире, правило обрабатывает 500 и помечает, сколько осталось; после трех подрезанных запусков подряд владельцу приходит письмо.
- Каждая задача выборки обрабатывается в собственной транзакции: сбой на одной задаче записывается и считается, остальная выборка продолжается.
- Пока предыдущий запуск не закончился, назначенное время пропускается с записью в журнал: правило не выполняется рядом с самим собой.
Каскады и их предел
Действие правила может разбудить другие правила: перевод статуса это событие «задача переведена». Такая цепочка ограничена:
- Правило не встречает собственных последствий: в пределах одной цепочки каждое правило срабатывает не больше одного раза. Замкнувшаяся петля обрывается с записью в журнал.
- Глубина каскада ограничена: по умолчанию 3. Дальше цепочка останавливается с записью в журнал.
- Частота ограничена: по умолчанию 60 срабатываний в минуту на компанию. Сверх этого срабатывания откладываются в отказ с записью.
Вся цепочка несет один идентификатор корреляции: в журнале видно, что чем было разбужено и на какой глубине.
Внешние вызовы
Правило может отправить данные за пределы Quevell. Это устроено так, чтобы «куда» и «что» были решениями компании, а не правила:
- Разрешенные адреса. Вызовы идут только на хосты из списка компании, который ведет администратор компании. Пустой список означает, что внешние вызовы выключены. Удаление адреса из списка не удаляет правила: их вызовы начинают отклоняться, с записью в журнал.
- Только HTTPS. Адрес всегда собирается как
https://хост/путь; вызов по открытому протоколу невыразим. Методы: POST, PUT, PATCH. - Уходит только перечисленное. Правило называет поля, которые покидают продукт:
key,type,status,link,summary,priorityи кастомные поля по имени. «Вся задача» не вариант: ничего не уходит по умолчанию. - Секрет авторизации хранится зашифрованным, в интерфейсе всегда показывается маской и не записывается в журнал. Заменить его можно, увидеть снова нельзя.
Тело запроса фиксированного формата, версия 1: version, event, sentAt, idempotencyKey, rule (идентификатор, имя, ревизия) и issue ровно с перечисленными полями. Ограничения: 5 секунд на вызов, 64 КБ на запрос и на читаемую часть ответа. В журнал записывается факт вызова и статус ответа; тело ответа не записывается никогда.
Автоотключение
Правило, чьи отложенные действия падают подряд, выключается само: по умолчанию после 5 сбоев подряд. Это записывается в журнал, а в списке правил такое правило помечено как выключенное продуктом, а не рукой.
Что делать: открыть журнал правила, найти причину последних сбоев, исправить и включить правило заново. Включение обнуляет счетчик сбоев.
Журнал
Журнал это одна лента: срабатывания и отказы вместе. Каждая запись называет правило, ревизию, задачу, глубину каскада и идентификатор корреляции. Отказы записываются с причиной: петля оборвана, глубина исчерпана, частота превышена, задача не видна аккаунту правила, правило выключено.
Журнал одного правила лежит внутри правила и виден каждому, кто видит само правило. Лента по всей компании это отдельное право: его выдают, по умолчанию оно есть у администраторов компании.
Ограничения
Ограничения принадлежат компании и изменяются администратором компании. Значения по умолчанию:
| Ограничение | По умолчанию |
|---|---|
| Правил в компании | 100 |
| Действий в правиле | 10 |
| Срабатываний в минуту на компанию | 60 |
| Глубина каскада | 3 |
| Автоотключение после сбоев подряд | 5 |
| Задач за прогон проверки | 50 |
| Прогонов проверки в минуту на человека | 6 |
| Задач за один запуск по расписанию | 500 |
| Время на внешний вызов | 5 секунд |