Лог пользовательских операций

Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine

Лог пользовательских операций содержит вхождения для многих API-операций и может использоваться для целей аудита. Он предоставляет данные о том, какие операции были произведены, а также подробности изменений, связанных с операцией. Операции логируются по мере выполнения в контексте залогиненного пользователя. Чтобы появилась возможность пользоваться логом операций, уровень истории на движке управления процессами должен быть установлен в FULL.

Запись вхождений лога независимо от контекста аутентификации

Если есть необходимость того, чтобы операции логировались независимо от того, выполняются ли они в контексте залогиненного пользователя или нет, тогда в конфигурации движка управления процессами флаг под названием restrictUserOperationLogToAuthenticatedUsers может быть установлен в false.

Доступ к логу пользовательских операций

Доступ к логу пользовательских операций можно получить через Java API.Сервис истории может использоваться для выполнения UserOperationLogQuery`через вызов `historyService.createUserOperationLogQuery().execute(). Запрос можно ограничить с помощью различных опций фильтрации. Запрос также является доступным извне в REST API.

Вхождения лога пользовательских операций

Лог состоит из операций (operations) и вхождений (entries). Операция соответствует одному выполненному действию и состоит из нескольких вхождений, как минимум из одного. Вхождения содержат подробные изменения, являющиеся частью операции. При выполнении запроса к логу пользовательских операций возвращаемые вхождения принадлежат к типу UserOperationLogEntry, в соответствии с вхождениями. Все вхождения из одной и той же операции связаны между собой через id операции.

Вхождение лога пользовательских операций имеет следующие свойства:

  • Operation ID: Сгенерированный id, который уникально идентифицирует выполненную операцию. Если несколько вхождений являются частью одной и той же операции, они ссылаются на один и тот же operation ID.

  • Operation Type: Имя выполненной операции. Доступные типы операций перечислены в интерфейсе io.openbpm.bpm.engine.history.UserOperationLogEntry. Отметим, что одна операция может состоять из нескольких типов, например, каскадная API операция является одной пользовательской операцией, но подразделяется на несколько типов операций.

  • Entity Type: Идентификатор типа сущности, к которому обращалась операция. Доступные типы сущностей перечислены в классе io.openbpm.bpm.engine.EntityTypes. Как и в случае с типом операции, одна операция может обращаться более чем к одному типу сущностей.

  • Category: Имя категории, с которой ассоциируется операция. Доступные категории перечислены в интерфейсе io.openbpm.bpm.engine.history.UserOperationLogEntry. Например, все рантайм операции, относящиеся к задачам, например, к операциям запроса на задачу и выполнения задачи, попадают в категорию TaskWorker.

  • Annotation: Произвольная текстовая аннотация, установленная пользователем для целей аудита. Многочисленные вхождения лога, принадлежащие одной операции, имеют одинаковые аннотации.

  • Entity IDs: Вхождение лога джобы содержит ID сущностей, которые служат для идентификации сущностей, к которым обращается операция. Например, вхождение лога операций по задаче содержит id задачи, а также id экземпляра процесса, к которому задача относится. Вторым примером можно считать вхождение лога, соответствующее приостановке всех экземпляров процесса из определения процесса; оно не содержит индивидуальные id экземпляров процесса, а содержит только id определения процесса.

  • User ID: ID пользователя, который выполнил операцию.

  • Timestamp: Момент времени, когда была выполнена операция.

  • Changed Property: Пользовательская операция может изменить несколько свойств. Например, приостановка работы экземпляра процесса меняет свойство состояния приостановки (suspension state). Для каждого измененного свойства, задействованного в операции, создается вхождение в логе.

  • Old Property Value: Предыдущее значение измененного свойства. Значение null означает, что свойство ранее имело значение null либо предыдущее значение неизвестно.

  • New Property Value: Новое значение измененного свойства.

Аннотация логов пользовательских операций

Логи пользовательских операций могут быть полезны при аудите ручных операций. Чтобы сделать очевидной причину выполнения той или иной операции, иногда бывает недостаточно залогировать только техническую информацию (например, момент времени, тип тперации и т.д.), необходимо также добавить аннотацию, которая помещает операцию в правильный бизнес-контекст.

Вы можете напрямую передать аннотацию для следующих операций:

  • Модификация экземпляра процесса

Вы также можете поставить аннотацию на уже существующий лог операций:

Аннотация может быть установлена и снята через Java API:

String operationId = historyService.createUserOperationLogQuery()
    .singleResult()
    .getOperationId();

String annotation = "Instances restarted due to wrong turn";
historyService.setAnnotationForOperationLogById(operationId, annotation);

historyService.clearAnnotationForOperationLogById(operationId);

Внимание: Аннотации присутствуют на всех вхожденичх, которые принадлежат логу операций.

См. также справочник по REST API для установки и сбрасывания аннотаций.

Глоссарий операций, логируемых в лог пользовательских операций

Следующая таблица описывает операции, логируемые в лог пользовательских операций и вхождения, которые создаются как часть этих операций:

Тип сущности Тип операции Категория Свойства

Task

Assign

TaskWorker

  • assignee: id пользователя, на которого назначена задача

Claim

TaskWorker

  • assignee: id пользователя, который запрашивает себе задачу

Complete

TaskWorker

  • delete: Новое состояние удаления, true

Create

TaskWorker

Дополнительные свойства не логируются

Delegate

TaskWorker

При делегировании задачи создаются три вхождения в лог, содержащие одно из следующих свойств:

  • delegation: Результирующее состояние делегации, PENDING

  • owner: Оригинальный владелец задачи

  • assignee: Пользователь, на которого назначена задача

Delete

TaskWorker

  • delete:Новое состояние удаления, true

Resolve

TaskWorker

  • delegation: Результирующее состояние делегации, RESOLVED

SetOwner

TaskWorker

  • owner: Новый владелец задачи

SetPriority

TaskWorker

  • priority: Новый приоритет задачи

Update

TaskWorker

Измененное вручную свойство задачи, где "вручную" означает, что свойство было изменено напрямую. Запрос на задачу через TaskService не залогируется с вхождением типа update, но установка назначенного пользователя напрямую залогируется. Возможен один из следующих вариантов:

  • description: Новое описание задачи

  • owner: Новый владелец задачи

  • assignee: Новый назначенный на задачу сотрудник

  • dueDate: Новая дата окончания выполнения задачи

DeleteHistory

Operator

  • nrOfInstances: количество удаленных экземпляров решения

  • async: по умолчанию false, поскольку эта операция может выполняться только синхронно

ProcessInstance

Create

Operator

Дополнительные свойства не логируются

Activate

Operator

  • suspensionState: Новое состояние приостановки, active

Delete

Operator

Для случая обычных операций:

  • Дополнительные свойства не логируются

Для режима batch:

  • nrOfInstances: количество удаленных экземпляров процесса

  • async: true, если операция была выполнена асинхронно как batch, false, если операция была выполнена синхронно

  • deleteReason: причина удаления

  • type: history в случае удаления исторических экземпляров процесса

ModifyProcessInstance

Operator

  • nrOfInstances: Количество модифицированных экземпляров процесса

  • async: true, если модификации были произведены асинхронно в режиме batch, false, если модификации производились синхронно

  • processDefinitionVersion: Версия определения процесса

Suspend

Operator

  • suspensionState: Новое состояние приостановки выполнения, suspended

Migrate

Operator

  • processDefinitionId: id определения процесса, в которое мигрировали экземпляры

  • nrOfInstances: Количество мигрировавших экземпляров процесса

  • nrOfVariables: Количество установленных переменных. Присутствует только тогда, когда были установлены какие-либо переменные.

  • async: true, если миграция производилась асинхронно в режиме batch, false, если миграция производилась синхронно

RestartProcessInstance

Operator

  • nrOfInstances: Количество перезапущенных экземпляров процессов

  • async: true, если перезапуск производился асинхронно в режиме batch, false, если перезапуск производился синхронно

DeleteHistory

Operator

  • nrOfInstances: количество удаленных экземпляров процесса

  • async: true, если операция была выполнена асинхронно в режиме batch, false, если операция была выполнена синхронно

  • deleteReason: причина удаления. Это свойство существует только если операция была выполнена синхронно

CreateIncident

Operator

  • incidentType: Тип созданного инцидента

  • configuration: Конфигурация созданного инцидента

Resolve

Operator

  • incidentId: id разрешенного инцидента

SetRemovalTime

Operator

  • async: true, если операция была выполнена асинхронно в режиме batch

  • nrOfInstances: Количество обновленных экземпляров

  • removalTime: Дата, когда экземпляр должен быть удален

  • mode: CALCULATED_REMOVAL_TIME, если время удаления было вычислено, ABSOLUTE_REMOVAL_TIME, если время удаления будо установлено в явном виде, if the removal time was set explicitly, CLEARED_REMOVAL_TIME, если время удаления было очищено

  • hierarchical: true, если время удаления было установлено по всей иерархии, false, если иерархией пренебрегли

SetVariables

Operator

  • async: true, если операция была выполнена асинхронно в режиме batch

  • nrOfInstances: Количество экземпляров, на которые повлияла операция установки переменных

  • nrOfVariables: Количество установленных переменных

CorrelateMessage

Operator

  • async: true, если операция была выполнена асинхронно в режиме batch

  • nrOfInstances: Количество экземпляров, на которые повлияла операция корелляции

  • nrOfVariables: Количество установленных переменных

  • messageName: Имя коррелируемого сообщения

Incident

SetAnnotation

Operator

  • incidentId: id аннотированного инцидента

ClearAnnotation

Operator

  • incidentId: id аннотированного инцидента

IdentityLink

AddUserLink

TaskWorker

  • candidate: Новый ассоциированный пользользователь-кандидат

DeleteUserLink

TaskWorker

  • candidate: Прежний ассоциированный пользователь

AddGroupLink

TaskWorker

  • candidate: Новая ассоциированная группа

DeleteGroupLink

TaskWorker

  • candidate: Прежняя ассоциированная группа

Attachment

AddAttachment

TaskWorker

  • name: Имя добавленного аттачмента

DeleteAttachment

TaskWorker

  • name: Имя удаленного аттачмента

JobDefinition

ActivateJobDefinition

Operator

  • suspensionState: новое состояние приостановки выполнения active

SetPriority

Operator

  • overridingPriority: новый приоритет переопределяющей джобы. Равен null, если приоритет был очищен.

SuspendJobDefinition

Operator

  • suspensionState: новое состояние приостановки выполнения suspended

ProcessDefinition

ActivateProcessDefinition

Operator

  • suspensionState: новое состояние приостановки выполнения active

SuspendProcessDefinition

Operator

  • suspensionState: новое состояние приостановки выполнения suspended

Delete

Operator

  • cascade: если значение установлено в true, тогда все экземпляры, включая историю, также удаляются.

UpdateHistoryTimeToLive

Operator

  • historyTimeToLive: Новое время жизни для истории.

DecisionDefinition

UpdateHistoryTimeToLive

Operator

  • historyTimeToLive: Новое время жизни для истории.

  • decisionDefinitionId: id определения решения, чье время жизни было обновлено.

  • decisionDefinitionKey: Ключ определения решения, чье время жизни было обновлено.

Evaluate

Operator

  • decisionDefinitionId: id определения решения, которое было оценено.

  • decisionDefinitionKey: ключ определения решения, которое было оценено.

CaseDefinition

UpdateHistoryTimeToLive

Operator

  • historyTimeToLive: Новое время жизни для истории.

  • caseDefinitionKey: Ключ определения сценария, чье время жизни истории было обновлено.

Job

ActivateJob

Operator

  • suspensionState: новое состояние приостановки выполнения active

SetPriority

Operator

  • priority: новый приоритет джобы

SetJobRetries

Operator

  • retries: новое количество повторных попыток

  • nrOfInstances: количество обновленных джоб .

  • async: true true, если операция была выполнена асинхронно в режиме batch, false, если операция была выполнена синхронно

SuspendJob

Operator

  • suspensionState: новое состояние приостановки выполнения suspended

  • async: true, если операция была выполнена асинхронно в режиме batch, false, если операция была выполнена синхронно

Execute

Operator

Дополнительные свойства не логируются

Delete

Operator

Дополнительные свойства не логируются

SetDueDate

Operator

  • duedate: новая дата выполнения для джобы

RecalculateDueDate

Operator

  • creationDateBased: если значение установлено в true, новая дата выполнения была вычеслена на основании даты создания джобы. В противном случае она была вычислена на основании даты, когда произошло повторное вычисление.

  • duedate: новая дата выполнения для джобы

CreateHistoryCleanupJobs

Operator

  • immediatelyDue: true, если операция была выполнена немедленно, false, если операция была добавлена в расписания для регулярного выполнения

Variable

ModifyVariable

Operator/TaskWorker

Дополнительные свойства не логируются

RemoveVariable

Operator/TaskWorker

Дополнительные свойства не логируются

SetVariable

Operator/TaskWorker

Дополнительные свойства не логируются

DeleteHistory

Operator

В случае одиночной операции: - name: имя переменной, чья история была удалена В случае перечисления операций по экземплярам процесса: - Дополнительные свойства не логируются

Deployment

Create

Operator

  • duplicateFilterEnabled: если значение установлено в true, тогда во время создания деплоймента заданные ресурсы проверются на дубликаты в наборе предыдущих деплойментов. В противном случае фильтр дубликатов не выполняется.

  • deployChangedOnly: это свойство логируется только тогда, когда duplicateFilterEnabled установлено в true. Если значпение свойства установлено в true, деплоятся только измененные ресрсы. В противном случае при изменении любого ресурса передеплоиваются все ресурсы.

Delete

Operator

  • cascade: Если значение установлено в true, то все экземпляры, включая историю, тоже удаляются.

Batch

ActivateBatch

Operator

  • suspensionState: новое состояние приостановки выполнения active

SuspendBatch

Operator

  • suspensionState: новое состояние приостановки выполнения suspended

Delete

Operator

  • cascadeToHistory: true, если исторические данные, относящиеся к batch-джобе, тоже удаляются, false, если удаляются только рантайм-данные.

DeleteHistory

Operator

Дополнительные свойства не логируются

SetRemovalTime

Operator

  • async: true, если операция выполняется асинхронно в режиме batch

  • nrOfInstances: Количество обновленных экземпляров

  • removalTime: Дата, когда экземпляр должен быть удален

  • mode: CALCULATED_REMOVAL_TIME если время удаления было вычислено, ABSOLUTE_REMOVAL_TIME, если время удаления было установлено в явном виде, CLEARED_REMOVAL_TIME, если время удаления было очищено

ExternalTask

SetExternalTaskRetries

Operator

  • retries: Новое количество повторных попыток

  • nrOfInstances: количество обновленных внешних задач

  • async: true, если операция была выполнена асинхронно в режиме batch, false, если операция была выполнена синхронно

SetPriority

Operator

  • priority: новый приоритет

Unlock

Operator

Дополнительные свойства не логируются

DecisionInstance

DeleteHistory

Operator

  • nrOfInstances: количество удаленных экземпляров решений

  • async: true, если операция была выполнена асинхронно в режиме batch, false, если операция была выполнена синхронно

  • deleteReason: причина удаления. Это свойство существует только если операция была выполнена асинхронно

SetRemovalTime

Operator

  • async: true, если операция была выполнена асинхронно в режиме batch

  • nrOfInstances: Количество обновленных экземпляров

  • removalTime: Дата, когда экземпляр должен быть удален

  • mode: CALCULATED_REMOVAL_TIME если время удаления было вычислено, ABSOLUTE_REMOVAL_TIME, если время удаления было установлено в явном виде, CLEARED_REMOVAL_TIME, если время удаления было очищено

  • hierarchical: true, если время удаления установлено по всей иерархии, false, если иерархией пренебрегли

CaseInstance

DeleteHistory

Operator

  • nrOfInstances: Количество удаленных экземпляров сценария. Присутствует только при массовом (bulk) удалении.

Metrics

Delete

Operator

  • timestamp: Дата, для которой все метрики старше этой даты удалены. Присутствует только если задано пользователем.

  • reporter: Репортер, для которого все метрики, включенные им в отчеты, удалены. Присутствует только если задано пользователем.

TaskMetrics

Delete

Operator

  • timestamp: Дата, для которой все метрики старше этой даты удалены. Присутствует только если задано пользователем.

OperationLog

SetAnnotation

Operator

  • operationId: id аннотированного лога операций

ClearAnnotation

Operator

  • operationId: id аннотированного лога операций

Filter

Create

TaskWorker

  • filterId: id созданного фильтра

Update

TaskWorker

  • filterId: id обновленного фильтра

Delete

TaskWorker

  • filterId: id удаленного фильтра

Comment

Update

TaskWorker

  • Дополнительные свойства не логируются

Delete

TaskWorker

  • Дополнительные свойства не логируются

User

Create

Admin

  • userId: id созданного пользователя

Update

Admin

  • userId: id обновленного пользователя

Delete

Admin

  • userId: id удаленного пользователя

Unlock

Admin

  • userId: id разблокированного пользователя

Group

Create

Admin

  • groupId: id созданной группы

Update

Admin

  • groupId: id обновленной группы

Delete

Admin

  • groupId: id удаленной группы

Tenant

Create

Admin

  • tenantId: id созданного арендатора

Update

Admin

  • tenantId: id обновленного арендатора

Delete

Admin

  • tenantId: id удаленного оператора

Group membership

Create

Admin

  • userId: id пользователя, добавленного к группе

  • groupId: id группы, к которой был добавлен пользователь

Delete

Admin

  • userId: id пользователя, который был удален из группы

  • groupId: id группы, из которой был удален пользователь

TenantMembership

Create

Admin

  • tenantId: id арендатора, с которым была связана группа или пользователь

  • userId: id пользователя, связанного с арендатором. Отсутствует, если задано groupId

  • groupId: id группы, с которой связан арендатор. Отсутствует, если задано userId

Delete

Admin

  • tenantId: id арендатора, у которого была удалена связь с пользователем или группой

  • userId: id пользователя, связь с которым була удалена у арендатора. ОТсутствует, если задано groupId

  • groupId: id группы, связь с которой была удалена у арендатора. Отсутствует, если задано userId

Authorization

Create

Admin

  • permissions: список разрешений, которые были выданы или отобраны

  • permissionBits: битовая маска разрешений, сохраняемая вместе с авторизацией

  • type: тип авторизации, может равняться 0 (GLOBAL), 1 (GRANT) или 2 (REVOKE)

  • resource: имя типа ресурса

  • resourceId: id ресурса. Может быть '*', если выдан или отобран у всех экземпляров типа ресурса.

  • userId: id пользователя, к которому привязана авторизация. Может быть '*', если выдается или отбирается у всех пользователей. Отсутствует, если задано groupId.

  • groupId: id группы, к которой привязана авторизация. Отсутствует, если задано userId.

Update

Admin

  • permissions: список разрешений, которые были выданы или отобраны

  • permissionBits: битовая маска разрешений, сохраняемая вместе с авторизацией

  • type: тип авторизации, может равняться 0 (GLOBAL), 1 (GRANT) или 2 (REVOKE)

  • resource: имя типа ресурса

  • resourceId: id ресурса. Может быть '*', если выдан или отобран у всех экземпляров типа ресурса.

  • userId: id пользователя, к которому привязана авторизация. Может быть '*', если выдается или отбирается у всех пользователей. Отсутствует, если задано groupId.

  • groupId: id группы, к которой привязана авторизация. Отсутствует, если задано userId.

Delete

Admin

  • permissions: список разрешений, которые были выданы или отобраны

  • permissionBits: битовая маска разрешений, сохраняемая вместе с авторизацией

  • type: тип авторизации, может равняться 0 (GLOBAL), 1 (GRANT) или 2 (REVOKE)

  • resource: имя типа ресурса

  • resourceId: id ресурса. Может быть '*', если выдан или отобран у всех экземпляров типа ресурса.

  • userId: id пользователя, к которому привязана авторизация. Может быть '*', если выдается или отбирается у всех пользователей. Отсутствует, если задано groupId.

  • groupId: id группы, к которой привязана авторизация. Отсутствует, если задано userId.

Property

Create

Admin

  • name: имя созданного свойства

Update

Admin

  • name: имя обновленного свойства

Delete

Admin

  • name: имя удаленного свойства

Лицензия и атрибуция

Эта документация была создана на базе материала "Camunda 7 Docs" от Camunda, находится под лицензией Creative Commons Attribution-ShareAlike 3.0 Unported License .

Оригинал документации: https://docs.camunda.org