use of com.evolveum.midpoint.audit.api.AuditEventRecord in project midpoint by Evolveum.
the class WfTestUtil method checkWfProcessAuditRecords.
public static void checkWfProcessAuditRecords(Map<String, WorkflowResult> expectedResults, DummyAuditService dummyAuditService) {
List<AuditEventRecord> records = dummyAuditService.getRecordsOfType(AuditEventType.WORKFLOW_PROCESS_INSTANCE);
assertEquals("Unexpected number of workflow process instance audit records", expectedResults.size() * 2, records.size());
for (AuditEventRecord record : records) {
if (record.getEventStage() != AuditEventStage.EXECUTION) {
continue;
}
Set<AuditReferenceValue> targetRef = record.getReferenceValues(AuditingConstants.AUDIT_TARGET);
assertEquals("Wrong # of targetRef values in " + record.debugDump(), 1, targetRef.size());
String oid = targetRef.iterator().next().getOid();
assertTrue("Unexpected role to approve: " + oid, expectedResults.containsKey(oid));
assertEquals("Unexpected result for " + oid + ": " + record.getResult(), expectedResults.get(oid), WorkflowResult.fromNiceWfAnswer(record.getResult()));
if (expectedResults.get(oid) == WorkflowResult.APPROVED) {
assertEquals("Wrong # of deltas in " + record.debugDump(), 1, record.getDeltas().size());
}
}
}
use of com.evolveum.midpoint.audit.api.AuditEventRecord in project midpoint by Evolveum.
the class WfTestUtil method checkWorkItemAuditRecords.
public static void checkWorkItemAuditRecords(Map<String, WorkflowResult> expectedResults, DummyAuditService dummyAuditService) {
List<AuditEventRecord> workItemRecords = dummyAuditService.getRecordsOfType(AuditEventType.WORK_ITEM);
assertEquals("Unexpected number of work item audit records", expectedResults.size() * 2, workItemRecords.size());
for (AuditEventRecord record : workItemRecords) {
if (record.getEventStage() != AuditEventStage.EXECUTION) {
continue;
}
if (record.getDeltas().size() != 1) {
System.out.println("Record:\n" + record.debugDump());
fail("Wrong # of deltas in work item audit record: " + record.getDeltas().size());
}
ObjectDelta<? extends ObjectType> delta = record.getDeltas().iterator().next().getObjectDelta();
Containerable valueToAdd = ((PrismContainerValue) delta.getModifications().iterator().next().getValuesToAdd().iterator().next()).asContainerable();
String oid;
if (valueToAdd instanceof AssignmentType) {
oid = ((AssignmentType) valueToAdd).getTargetRef().getOid();
} else if (valueToAdd instanceof ShadowAssociationType) {
oid = ((ShadowAssociationType) valueToAdd).getShadowRef().getOid();
} else {
continue;
}
assertTrue("Unexpected target to approve: " + oid, expectedResults.containsKey(oid));
assertEquals("Unexpected result for " + oid + ": " + record.getResult(), expectedResults.get(oid), WorkflowResult.fromNiceWfAnswer(record.getResult()));
}
}
use of com.evolveum.midpoint.audit.api.AuditEventRecord in project midpoint by Evolveum.
the class ModelController method auditTaskOperation.
private void auditTaskOperation(PrismReferenceValue taskRef, AuditEventType event, AuditEventStage stage, Task operationTask, OperationResult parentResult, @Nullable OperationResult taskOperationResult) {
AuditEventRecord auditRecord = new AuditEventRecord(event, stage);
String requestIdentifier = ModelImplUtils.generateRequestIdentifier();
auditRecord.setRequestIdentifier(requestIdentifier);
auditRecord.setTargetRef(taskRef);
ObjectDelta<TaskType> delta;
if (AuditEventType.DELETE_OBJECT == event) {
delta = prismContext.deltaFactory().object().createDeleteDelta(TaskType.class, taskRef.getOid());
} else {
// TODO should we somehow indicate deltas which are executed in taskManager?
delta = prismContext.deltaFactory().object().createEmptyModifyDelta(TaskType.class, taskRef.getOid());
}
ObjectDeltaOperation<TaskType> odo = new ObjectDeltaOperation<>(delta, taskOperationResult);
auditRecord.addDelta(odo);
if (taskOperationResult != null) {
// for EXECUTION stage
auditRecord.setOutcome(taskOperationResult.getStatus());
}
auditHelper.audit(auditRecord, null, operationTask, parentResult);
}
use of com.evolveum.midpoint.audit.api.AuditEventRecord in project midpoint by Evolveum.
the class ModelController method executeChangesRaw.
private Collection<ObjectDeltaOperation<? extends ObjectType>> executeChangesRaw(Collection<ObjectDelta<? extends ObjectType>> deltas, ModelExecuteOptions options, Task task, OperationResult result) throws ExpressionEvaluationException, PolicyViolationException, SecurityViolationException, SchemaException, ObjectNotFoundException, CommunicationException, ConfigurationException, ObjectAlreadyExistsException {
String requestIdentifier = ModelImplUtils.generateRequestIdentifier();
PrismReferenceValue targetRef = ModelImplUtils.determineAuditTarget(deltas, prismContext);
AuditEventRecord auditRecordRequest = createAuditEventRecordRaw(AuditEventStage.REQUEST, requestIdentifier, targetRef, ObjectDeltaOperation.cloneDeltaCollection(deltas));
// we don't know auxiliary information (resource, objectName) at this moment -- so we do nothing
ExpressionType eventRecordingExpression = null;
PrismObject<SystemConfigurationType> config = systemObjectCache.getSystemConfiguration(result);
if (config != null && config.asObjectable().getAudit() != null && config.asObjectable().getAudit().getEventRecording() != null) {
SystemConfigurationAuditEventRecordingType eventRecording = config.asObjectable().getAudit().getEventRecording();
eventRecordingExpression = eventRecording.getExpression();
}
if (eventRecordingExpression != null) {
// MID-6839
auditRecordRequest = auditHelper.evaluateRecordingExpression(eventRecordingExpression, auditRecordRequest, null, null, task, result);
}
if (auditRecordRequest != null) {
auditHelper.audit(auditRecordRequest, null, task, result);
}
Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeltas = new ArrayList<>();
try {
for (ObjectDelta<? extends ObjectType> delta : deltas) {
executeChangeRaw(executedDeltas, delta, options, task, result);
}
return executedDeltas;
} catch (Throwable t) {
result.recordFatalError(t);
throw t;
} finally {
cleanupOperationResult(result);
AuditEventRecord auditRecordExecution = createAuditEventRecordRaw(AuditEventStage.EXECUTION, requestIdentifier, targetRef, executedDeltas);
auditRecordExecution.setTimestamp(System.currentTimeMillis());
auditRecordExecution.setOutcome(result.getStatus());
if (eventRecordingExpression != null) {
// MID-6839
auditRecordExecution = auditHelper.evaluateRecordingExpression(eventRecordingExpression, auditRecordExecution, null, null, task, result);
}
if (auditRecordExecution != null) {
auditHelper.audit(auditRecordExecution, null, task, result);
}
}
}
use of com.evolveum.midpoint.audit.api.AuditEventRecord in project midpoint by Evolveum.
the class ModelController method createAuditEventRecordRaw.
private AuditEventRecord createAuditEventRecordRaw(AuditEventStage stage, String requestIdentifier, PrismReferenceValue targetRef, Collection<ObjectDeltaOperation<? extends ObjectType>> deltas) {
AuditEventRecord auditRecord = new AuditEventRecord(AuditEventType.EXECUTE_CHANGES_RAW, stage);
auditRecord.setRequestIdentifier(requestIdentifier);
auditRecord.setTargetRef(targetRef);
auditRecord.addDeltas(deltas);
return auditRecord;
}
Aggregations