public AuditEventRecord clone() { AuditEventRecord clone = new AuditEventRecord(); clone.channel = this.channel; clone.deltas.addAll(MiscSchemaUtil.cloneObjectDeltaOperationCollection(this.deltas)); clone.eventIdentifier = this.eventIdentifier; clone.eventStage = this.eventStage; clone.eventType = this.eventType; clone.hostIdentifier = this.hostIdentifier; clone.remoteHostAddress = this.remoteHostAddress; clone.nodeIdentifier = this.nodeIdentifier; clone.initiator = this.initiator; clone.attorney = this.attorney; clone.outcome = this.outcome; clone.sessionIdentifier = this.sessionIdentifier; clone.target = this.target; clone.targetOwner = this.targetOwner; clone.taskIdentifier = this.taskIdentifier; clone.taskOID = this.taskOID; clone.timestamp = this.timestamp; clone.result = this.result; clone.parameter = this.parameter; clone.message = this.message; clone.properties.putAll(properties); // TODO deep clone? clone.references.putAll(references); // TODO deep clone? return clone; }
protected void auditLogin(Task task) { AuditEventRecord record = new AuditEventRecord(AuditEventType.CREATE_SESSION, AuditEventStage.REQUEST); record.setInitiatorAndLoginParameter(task.getOwner()); record.setChannel(SchemaConstants.CHANNEL_WEB_SERVICE_URI); record.setTimestamp(System.currentTimeMillis()); record.setOutcome(OperationResultStatus.SUCCESS); auditService.audit(record, task); }
@Override public void auditLogout(ConnectionEnvironment connEnv, Task task) { AuditEventRecord record = new AuditEventRecord(AuditEventType.TERMINATE_SESSION, AuditEventStage.REQUEST); record.setInitiatorAndLoginParameter(task.getOwner()); record.setTimestamp(System.currentTimeMillis()); record.setOutcome(OperationResultStatus.SUCCESS); storeConnectionEnvironment(record, connEnv); auditService.audit(record, task); }
protected void auditLogout(Task task) { AuditEventRecord record = new AuditEventRecord(AuditEventType.TERMINATE_SESSION, AuditEventStage.REQUEST); record.setInitiatorAndLoginParameter(task.getOwner()); record.setChannel(SchemaConstants.CHANNEL_WEB_SERVICE_URI); record.setTimestamp(System.currentTimeMillis()); record.setOutcome(OperationResultStatus.SUCCESS); auditService.audit(record, task); }
private void auditLogin(@Nullable String username, @Nullable UserType user, @NotNull ConnectionEnvironment connEnv, @NotNull OperationResultStatus status, @Nullable String message) { Task task = taskManager.createTaskInstance(); task.setChannel(connEnv.getChannel()); LOGGER.debug("Login {} username={}, channel={}: {}", status == OperationResultStatus.SUCCESS ? "success" : "failure", username, connEnv.getChannel(), message); AuditEventRecord record = new AuditEventRecord(AuditEventType.CREATE_SESSION, AuditEventStage.REQUEST); record.setParameter(username); if (user != null ) { record.setInitiator(user.asPrismObject()); } record.setTimestamp(System.currentTimeMillis()); record.setOutcome(status); record.setMessage(message); storeConnectionEnvironment(record, connEnv); auditService.audit(record, task); }
private void processErrorFinal(TaskRunResult runResult, String errorDesc, Exception ex, TaskRunResultStatus runResultStatus, PrismObject<ResourceType> resource, Task task, OperationResult opResult) { String message = errorDesc+": "+ex.getMessage(); LOGGER.error("Reconciliation: {}-{}", new Object[]{message, ex}); opResult.recordFatalError(message, ex); TaskHandlerUtil.appendLastFailuresInformation(OperationConstants.RECONCILIATION, task, opResult); // TODO implement more seriously runResult.setRunResultStatus(runResultStatus); AuditEventRecord executionRecord = new AuditEventRecord(AuditEventType.RECONCILIATION, AuditEventStage.EXECUTION); executionRecord.setTarget(resource, prismContext); executionRecord.setOutcome(OperationResultStatus.FATAL_ERROR); executionRecord.setMessage(ex.getMessage()); auditService.audit(executionRecord , task); }
@Test public void testAuditSimple() throws FileNotFoundException, InterruptedException { // GIVEN AuditEventRecord auditRecord = new AuditEventRecord(AuditEventType.ADD_OBJECT); Task task = taskManager.createTaskInstance(); // WHEN auditService.audit(auditRecord, task); // THEN //Thread.sleep(2000); System.err.println("FOOOOOOOOOOOOO"); String auditLine = parseAuditLineFromLogFile(LOG_FILENAME); assertNotNull(auditLine); System.out.println("Audit line:"); System.out.println(auditLine); }
private void prepareAuditEventRecords() throws Exception { long start = System.currentTimeMillis(); for (int i = 0; i < RECORDS;) { AuditEventRecord record = new AuditEventRecord(); record.addDelta(createObjectDeltaOperation(i)); record.setTimestamp(System.currentTimeMillis()); record.addPropertyValue("prop1", "val1"); record.addReferenceValue("ref1", ObjectTypeUtil.createObjectRef("oid1", ObjectTypes.USER).asReferenceValue()); auditService.audit(record, new SimpleTaskAdapter()); i++; if (i%1000 == 0 || i == RECORDS) { long duration = System.currentTimeMillis() - start; System.out.println(i + " records created in " + duration + " ms (" + duration / i + " ms per record)"); } } try (Session session = getFactory().openSession()) { session.beginTransaction(); Query query = session.createQuery("select count(*) from " + RAuditEventRecord.class.getSimpleName()); Long count = (Long) query.uniqueResult(); AssertJUnit.assertEquals(RECORDS, (long) count); session.getTransaction().commit(); } }
for (int iteration = 0; iteration < ITERATIONS; iteration++) { display("Executing iteration " + iteration + " in worker " + index); AuditEventRecord record = new AuditEventRecord(AuditEventType.MODIFY_OBJECT, AuditEventStage.EXECUTION); record.setEventIdentifier( String.valueOf(iteration + ":" + System.currentTimeMillis()) + "-" + (int) (Math.random() * 1000000));
@Test public void test110AuditSecond() throws Exception { LOGGER.info("===[ test110AuditSecond ]==="); // WHEN AuditEventRecord record = new AuditEventRecord(); record.addPropertyValue("prop", "val"); LOGGER.info("Adding audit record {}", record); auditService.audit(record, new SimpleTaskAdapter()); // THEN System.out.println("Record written:\n" + record.debugDump()); System.out.println("Repo ID: " + record.getRepoId()); AuditEventRecord loaded = getAuditEventRecord(2, 1); System.out.println("Record loaded:\n" + loaded.debugDump()); System.out.println("Repo ID: " + loaded.getRepoId()); assertEquals("Wrong # of properties", 1, loaded.getProperties().size()); assertEquals("Wrong prop values", new HashSet<>(Collections.singletonList("val")), loaded.getPropertyValues("prop")); assertEquals("Wrong # of references", 0, loaded.getReferences().size()); }
private void prepareAuditEventRecords() throws Exception { Calendar calendar = create_2013_07_12_12_00_Calendar(); for (int i = 0; i < 3; i++) { long timestamp = calendar.getTimeInMillis(); AuditEventRecord record = new AuditEventRecord(); record.addDelta(createObjectDeltaOperation(i)); record.setTimestamp(timestamp); record.addPropertyValue("prop1", "val1"); record.addReferenceValue("ref1", ObjectTypeUtil.createObjectRef("oid1", ObjectTypes.USER).asReferenceValue()); LOGGER.info("Adding audit record with timestamp {}", new Object[]{new Date(timestamp)}); auditService.audit(record, new SimpleTaskAdapter()); calendar.add(Calendar.HOUR_OF_DAY, 1); } Session session = getFactory().openSession(); try { session.beginTransaction(); Query query = session.createQuery("select count(*) from " + RAuditEventRecord.class.getSimpleName()); Long count = (Long) query.uniqueResult(); AssertJUnit.assertEquals(3L, (long) count); session.getTransaction().commit(); } finally { session.close(); } }
@Test public void test300QueryUnknown() throws Exception { final String TEST_NAME = "test300QueryUnknown"; displayTestTitle(TEST_NAME); Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); // WHEN displayWhen(TEST_NAME); AuditEventRecord record = new AuditEventRecord(AuditEventType.SYNCHRONIZATION, AuditEventStage.EXECUTION); record.setOutcome(OperationResultStatus.UNKNOWN); modelAuditService.audit(record, task, result); HashMap<String, Object> params = new HashMap<>(); params.put("outcome", OperationResultStatusType.UNKNOWN); List<AuditEventRecord> records = modelAuditService.listRecords("from RAuditEventRecord as aer where aer.outcome = :outcome", params, task, result); // THEN displayThen(TEST_NAME); display("records", records); assertEquals("Wrong # of records", 1, records.size()); // THEN assertSuccess(result); }
AuditEventRecord auditRecord = new AuditEventRecord(eventType, stage);
AuditEventRecord record = new AuditEventRecord(); record.addPropertyValue("prop1", "val1.1"); record.addPropertyValue("prop1", "val1.2");
@Test public void testAudit() { AuditEventRecord record = new AuditEventRecord(); record.setChannel("http://midpoint.evolveum.com/xml/ns/public/provisioning/channels-3#import"); record.setEventIdentifier("1511974895961-0-1"); record.setEventStage(AuditEventStage.EXECUTION); record.setEventType(AuditEventType.ADD_OBJECT); ObjectDeltaOperation delta = new ObjectDeltaOperation(); delta.setObjectDelta(prismContext.deltaFactory().object().createModificationAddReference(UserType.class, "1234", UserType.F_LINK_REF, "123")); record.getDeltas().add(delta); delta = new ObjectDeltaOperation(); delta.setObjectDelta(prismContext.deltaFactory().object().createModificationAddReference(UserType.class, "1234", UserType.F_LINK_REF, "124")); record.getDeltas().add(delta); auditService.audit(record, new SimpleTaskAdapter()); }
public static AuditEventRecord fromRepo(RAuditEventRecord repo, PrismContext prismContext, boolean useUtf16) { AuditEventRecord audit = new AuditEventRecord(); audit.setChannel(repo.getChannel()); audit.setEventIdentifier(repo.getEventIdentifier());
public AuditEventRecord prepareWorkItemAuditReportCommon(WorkItemType workItem, WfTask wfTask, AuditEventStage stage, OperationResult result) throws WorkflowException { AuditEventRecord record = new AuditEventRecord(); record.setEventType(AuditEventType.WORK_ITEM); record.setEventStage(stage); ObjectReferenceType objectRef = resolveIfNeeded(WfContextUtil.getObjectRef(workItem), result); record.setTarget(objectRef.asReferenceValue()); record.setOutcome(OperationResultStatus.SUCCESS); record.setParameter(wfTask.getCompleteStageInfo()); record.addReferenceValueIgnoreNull(WorkflowConstants.AUDIT_OBJECT, objectRef); record.addReferenceValueIgnoreNull(WorkflowConstants.AUDIT_TARGET, resolveIfNeeded(WfContextUtil.getTargetRef(workItem), result)); record.addReferenceValueIgnoreNull(WorkflowConstants.AUDIT_ORIGINAL_ASSIGNEE, resolveIfNeeded(workItem.getOriginalAssigneeRef(), result)); record.addReferenceValues(WorkflowConstants.AUDIT_CURRENT_ASSIGNEE, resolveIfNeeded(workItem.getAssigneeRef(), result)); record.addPropertyValueIgnoreNull(WorkflowConstants.AUDIT_STAGE_NUMBER, workItem.getStageNumber()); record.addPropertyValueIgnoreNull(WorkflowConstants.AUDIT_STAGE_COUNT, WfContextUtil.getStageCount(workItem)); record.addPropertyValueIgnoreNull(WorkflowConstants.AUDIT_STAGE_NAME, WfContextUtil.getStageName(workItem)); record.addPropertyValueIgnoreNull(WorkflowConstants.AUDIT_STAGE_DISPLAY_NAME, WfContextUtil.getStageDisplayName(workItem)); record.addPropertyValueIgnoreNull(WorkflowConstants.AUDIT_ESCALATION_LEVEL_NUMBER, WfContextUtil.getEscalationLevelNumber(workItem)); record.addPropertyValueIgnoreNull(WorkflowConstants.AUDIT_ESCALATION_LEVEL_NAME, WfContextUtil.getEscalationLevelName(workItem)); record.addPropertyValueIgnoreNull(WorkflowConstants.AUDIT_ESCALATION_LEVEL_DISPLAY_NAME, WfContextUtil.getEscalationLevelDisplayName(workItem)); record.addPropertyValue(WorkflowConstants.AUDIT_WORK_ITEM_ID, workItem.getExternalId()); record.addPropertyValue(WorkflowConstants.AUDIT_PROCESS_INSTANCE_ID, WfContextUtil.getProcessInstanceId(workItem)); return record; }
public AuditEventRecord prepareProcessInstanceAuditRecord(WfTask wfTask, AuditEventStage stage, OperationResult result) { WfContextType wfc = wfTask.getTask().getWorkflowContext(); AuditEventRecord record = new AuditEventRecord(); record.setEventType(WORKFLOW_PROCESS_INSTANCE); record.setEventStage(stage); record.setInitiator(wfTask.getRequesterIfExists(result)); // set real principal in case of explicitly requested process termination (MID-4263) ObjectReferenceType objectRef = resolveIfNeeded(wfc.getObjectRef(), result); record.setTarget(objectRef.asReferenceValue()); record.setOutcome(OperationResultStatus.SUCCESS); record.addReferenceValueIgnoreNull(WorkflowConstants.AUDIT_OBJECT, objectRef); record.addReferenceValueIgnoreNull(WorkflowConstants.AUDIT_TARGET, resolveIfNeeded(wfc.getTargetRef(), result)); if (stage == EXECUTION) { String stageInfo = wfTask.getCompleteStageInfo(); record.setParameter(stageInfo); String answer = wfTask.getAnswerNice(); record.setResult(answer); record.setMessage(stageInfo != null ? stageInfo + " : " + answer : answer); record.addPropertyValueIgnoreNull(WorkflowConstants.AUDIT_STAGE_NUMBER, wfc.getStageNumber()); record.addPropertyValueIgnoreNull(WorkflowConstants.AUDIT_STAGE_COUNT, WfContextUtil.getStageCount(wfc)); record.addPropertyValueIgnoreNull(WorkflowConstants.AUDIT_STAGE_NAME, WfContextUtil.getStageName(wfc)); record.addPropertyValueIgnoreNull(WorkflowConstants.AUDIT_STAGE_DISPLAY_NAME, WfContextUtil.getStageDisplayName(wfc)); } record.addPropertyValue(WorkflowConstants.AUDIT_PROCESS_INSTANCE_ID, wfc.getProcessInstanceId()); OperationBusinessContextType businessContext = WfContextUtil.getBusinessContext(wfc); String requesterComment = businessContext != null ? businessContext.getComment() : null; if (requesterComment != null) { record.addPropertyValue(WorkflowConstants.AUDIT_REQUESTER_COMMENT, requesterComment); } return record; }
long reconStartTimestamp = clock.currentTimeMillis(); AuditEventRecord requestRecord = new AuditEventRecord(AuditEventType.RECONCILIATION, AuditEventStage.REQUEST); requestRecord.setTarget(resource, prismContext); requestRecord.setMessage("Stage: " + stage + ", Work bucket: " + workBucket); AuditEventRecord executionRecord = new AuditEventRecord(AuditEventType.RECONCILIATION, AuditEventStage.EXECUTION); executionRecord.setTarget(resource, prismContext); executionRecord.setOutcome(OperationResultStatus.SUCCESS);
AuditEventRecord auditRecord = new AuditEventRecord(AuditEventType.EXECUTE_CHANGES_RAW, AuditEventStage.REQUEST); auditRecord.addDeltas(ObjectDeltaOperation.cloneDeltaCollection(deltas)); auditRecord.setTarget(ModelImplUtils.determineAuditTarget(deltas, prismContext));