Каждое успешное изменение в Quevell записывается в журнал. Не выборочно и не по настройке: запись делает то же ядро, которое проводит само изменение, поэтому «забыть записать» отдельная функция не может.
Что записывается
Одна запись журнала это одно изменение. В ней:
| Поле | Что это |
|---|---|
| Команда | что произошло, например issue.transitioned или workflow.updated |
| Объект | тип и идентификатор того, что изменилось, и его версия после изменения |
| Автор | кто это сделал |
| Время | когда это произошло |
| Изменения | значения до и после |
| Итог | SUCCEEDED: журнал записывает состоявшиеся изменения |
| Связь | идентификатор цепочки и идентификатор события-причины |
| От чьего имени | если действие выполнялось под чужим именем, записаны оба пользователя |
| Правило | если действовало правило автоматизации, записаны его идентификатор, ревизия и глубина каскада |
Два последних поля стоит прочитать внимательно. Вход под чужим именем не бывает незаметным: в записи стоят оба имени, и тот, под чьим именем вошли, получает об этом письмо. И действие правила автоматизации не выглядит как действие пользователя: в записи видно, какое правило и какой его ревизии сработало.
Цепочка связывает следствия с причиной. Если одно изменение вызвало правило, а оно изменило что-то еще, все звенья несут один идентификатор цепочки, и вопрос «почему это вдруг поменялось» решается одним фильтром.
Где смотреть
Журнал есть на двух уровнях.
История задачи. На карточке задачи лента показывает, что с этой задачей происходило: изменения полей, переходы, комментарии, вложения. Это то, что нужно в работе, и оно открыто всем, кто видит задачу.
Журнал компании. Администрирование, раздел безопасности: все записи компании с фильтрами и постраничной выдачей. Для него нужно право просматривать журнал; администраторы компании держат его по должности.
Как искать
Журнал компании фильтруется по трем вещам, и они складываются:
- автор: все, что сделал конкретный пользователь;
- команда: конкретный вид изменения. Список команд отдается продуктом, а не набирается руками, поэтому опечатка невозможна;
- итог: поле есть в фильтре, но сегодня в журнале только успешные изменения, поэтому оно ничего не сужает.
Выдача идет страницами по курсору, от новых к старым, и рядом с ней стоит полное число записей, а не размер страницы. Это различие важное: на вопрос «сколько раз это произошло» раньше отвечал размер первой страницы, и ответ был всегда двадцать пять.
Чего в журнале нет
Журнал записывает состоявшиеся изменения. Попытка сделать то, на что не хватило прав, изменением не становится и в журнал не попадает: отказ виден тому, кто его получил, и в логах сервера, но не здесь.
Правила автоматизации на этот счет устроены иначе: отказ по правам у правила записывается в журнал автоматизации, отдельный от этого. Смотрите автоматизацию.
Записи нельзя изменить
Запись журнала нельзя отредактировать и нельзя удалить: это запрещено не проверкой в коде, а самой базой. Любая попытка изменить или удалить строку журнала прерывается с ошибкой «audit events are immutable».
Это важнее, чем кажется. Запрет стоит на самой таблице, а не в слое приложения, поэтому его не обходят ни ошибка в новой функции, ни администратор компании, ни тот, кто получил доступ к учетной записи приложения. Пока компания существует, подчистить журнал за собой нельзя.
Исключение ровно одно, и оно про удаление самой компании: строки журнала можно удалить только тогда, когда компании, к которой они относятся, уже нет. Это не флаг, который выставляет приложение, а условие, которое проверяет база: чтобы стереть журнал, придется сначала удалить компанию, а это не заметание следов.
Сколько живут записи
Журнал не чистится по расписанию и не имеет глубины, после которой записи стираются. Записи компании живут столько же, сколько сама компания.