Skip to content

Commit

Permalink
MID-7534 removed duplicated code, added message and outcome for shado…
Browse files Browse the repository at this point in the history
…w audit records
  • Loading branch information
1azyman committed May 26, 2023
1 parent 5d1933e commit bc75d2c
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -135,12 +135,7 @@ <F extends ObjectType> void auditEvent(

auditRecord.setChannel(context.getChannel());

// This is a brutal hack -- FIXME: create some "compute in-depth preview" method on operation result
OperationResult clone = overallResult.clone(2, false);
for (OperationResult subresult : clone.getSubresults()) {
subresult.computeStatusIfUnknown();
}
clone.computeStatus();
OperationResult clone = auditHelper.cloneResultForAuditEventRecord(overallResult);

if (stage == AuditEventStage.REQUEST) {
Collection<ObjectDeltaOperation<? extends ObjectType>> clonedDeltas = ObjectDeltaOperation.cloneDeltaCollection(context.getPrimaryChanges());
Expand All @@ -167,7 +162,7 @@ <F extends ObjectType> void auditEvent(
auditRecord.setTimestamp(XmlTypeConverter.toMillis(timestamp));
}

addRecordMessage(auditRecord, clone.getMessage());
auditHelper.addRecordMessage(auditRecord, clone.getMessage());

for (SystemConfigurationAuditEventRecordingPropertyType property : auditConfiguration.getPropertiesToRecord()) {
auditHelper.evaluateAuditRecordProperty(property, auditRecord, primaryObject,
Expand Down Expand Up @@ -244,35 +239,4 @@ private void checkNamesArePresent(Collection<ObjectDeltaOperation<? extends Obje
}
}
}

/**
* Adds a message to the record by pulling the messages from individual delta results.
*/
private void addRecordMessage(AuditEventRecord auditRecord, String message) {
if (auditRecord.getMessage() != null) {
return;
}
if (!StringUtils.isEmpty(message)) {
auditRecord.setMessage(message);
return;
}
Collection<ObjectDeltaOperation<? extends ObjectType>> deltas = auditRecord.getDeltas();
if (deltas.isEmpty()) {
return;
}
StringBuilder sb = new StringBuilder();
for (ObjectDeltaOperation<? extends ObjectType> delta : deltas) {
OperationResult executionResult = delta.getExecutionResult();
if (executionResult != null) {
String deltaMessage = executionResult.getMessage();
if (!StringUtils.isEmpty(deltaMessage)) {
if (sb.length() != 0) {
sb.append("; ");
}
sb.append(deltaMessage);
}
}
}
auditRecord.setMessage(sb.toString());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import java.util.Collection;

import org.apache.commons.lang3.BooleanUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
Expand Down Expand Up @@ -51,11 +53,15 @@ public class ShadowAuditHelper {
@Autowired private SystemObjectCache systemObjectCache;
@Autowired @Qualifier("cacheRepositoryService") private RepositoryService repositoryService;

public void auditEvent(AuditEventType event, ShadowType shadow, ProvisioningContext ctx, OperationResult result) {
public void auditEvent(@NotNull AuditEventType event, @Nullable ShadowType shadow, @NotNull ProvisioningContext ctx,
@NotNull OperationResult result) {

auditEvent(event, shadow, null, ctx, result);
}

public void auditEvent(AuditEventType event, ShadowType shadow, Collection<Operation> operationsWave, ProvisioningContext ctx, OperationResult result) {
public void auditEvent(@NotNull AuditEventType event, @Nullable ShadowType shadow, @Nullable Collection<Operation> operationsWave,
@NotNull ProvisioningContext ctx, @NotNull OperationResult result) {

Task task = ctx.getTask();

SystemConfigurationType systemConfiguration;
Expand Down Expand Up @@ -104,7 +110,11 @@ public void auditEvent(AuditEventType event, ShadowType shadow, Collection<Opera

AuditConfiguration auditConfiguration = auditHelper.getAuditConfiguration(systemConfiguration);

// addRecordMessage(auditRecord, clone.getMessage()); // todo add message and other fields to event
OperationResult clone = auditHelper.cloneResultForAuditEventRecord(result);
auditHelper.addRecordMessage(auditRecord, clone.getMessage());

auditRecord.setOutcome(clone.getStatus());

if (auditConfiguration.isRecordResourceOids()) {
auditRecord.addResourceOid(ctx.getResourceOid());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -263,4 +263,46 @@ public AuditConfiguration getAuditConfiguration(SystemConfigurationType config)

return new AuditConfiguration(recordResourceOids, propertiesToRecord, eventRecordingExpression);
}

public OperationResult cloneResultForAuditEventRecord(OperationResult result) {
// This is a brutal hack -- FIXME: create some "compute in-depth preview" method on operation result
OperationResult clone = result.clone(2, false);
for (OperationResult subresult : clone.getSubresults()) {
subresult.computeStatusIfUnknown();
}
clone.computeStatus();

return clone;
}

/**
* Adds a message to the record by pulling the messages from individual delta results.
*/
public void addRecordMessage(AuditEventRecord auditRecord, String message) {
if (auditRecord.getMessage() != null) {
return;
}
if (!StringUtils.isEmpty(message)) {
auditRecord.setMessage(message);
return;
}
Collection<ObjectDeltaOperation<? extends ObjectType>> deltas = auditRecord.getDeltas();
if (deltas.isEmpty()) {
return;
}
StringBuilder sb = new StringBuilder();
for (ObjectDeltaOperation<? extends ObjectType> delta : deltas) {
OperationResult executionResult = delta.getExecutionResult();
if (executionResult != null) {
String deltaMessage = executionResult.getMessage();
if (!StringUtils.isEmpty(deltaMessage)) {
if (sb.length() != 0) {
sb.append("; ");
}
sb.append(deltaMessage);
}
}
}
auditRecord.setMessage(sb.toString());
}
}

0 comments on commit bc75d2c

Please sign in to comment.