Skip to content

Commit

Permalink
Improve tracing of policy rules processing
Browse files Browse the repository at this point in the history
(Added some operation results to show borders of processing.)
  • Loading branch information
mederly committed Feb 14, 2023
1 parent d349548 commit 0ea7e27
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,6 @@
*/
class PolicyRuleEnforcer<O extends ObjectType> {

private static final String OP_ENFORCE = PolicyRuleEnforcer.class.getName() + ".enforce";

@NotNull private final LensContext<O> context;
@NotNull private final List<LocalizableMessage> messages = new ArrayList<>();
@NotNull private final List<EvaluatedPolicyRuleType> rules = new ArrayList<>();
Expand All @@ -62,18 +60,9 @@ class PolicyRuleEnforcer<O extends ObjectType> {
this.context = context;
}

public void enforce(OperationResult parentResult)
throws PolicyViolationException, ConfigurationException {
OperationResult result = parentResult.createMinorSubresult(OP_ENFORCE);
try {
enforceRulesWithoutThresholds(result);
enforceThresholds();
} catch (Throwable t) {
result.recordException(t);
throw t;
} finally {
result.close();
}
public void enforce(OperationResult result) throws PolicyViolationException, ConfigurationException {
enforceRulesWithoutThresholds(result);
enforceThresholds();
}

private void enforceRulesWithoutThresholds(OperationResult result)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,21 +33,34 @@
@ProcessorExecution
public class PolicyRuleProcessor implements ProjectorProcessor {

private static final String CLASS_DOT = PolicyRuleProcessor.class.getName() + ".";
private static final String OP_EVALUATE_ASSIGNMENT_POLICY_RULES = CLASS_DOT + "evaluateAssignmentPolicyRules";
private static final String OP_ENFORCE = CLASS_DOT + "enforce";

public <F extends AssignmentHolderType> void evaluateAssignmentPolicyRules(
@NotNull LensFocusContext<F> focusContext,
@NotNull Task task,
@NotNull OperationResult result)
@NotNull OperationResult parentResult)
throws SchemaException, ExpressionEvaluationException, ObjectNotFoundException, CommunicationException,
ConfigurationException, SecurityViolationException {
new AssignmentPolicyRuleEvaluator<>(focusContext, task)
.evaluate(result);
OperationResult result = parentResult.createSubresult(OP_EVALUATE_ASSIGNMENT_POLICY_RULES);
try {
new AssignmentPolicyRuleEvaluator<>(focusContext, task)
.evaluate(result);
} catch (Throwable t) {
result.recordException(t);
throw t;
} finally {
result.close();
}
}

@ProcessorMethod
public <AH extends AssignmentHolderType> void evaluateFocusPolicyRules(
LensContext<AH> context, @SuppressWarnings("unused") XMLGregorianCalendar now, Task task, OperationResult result)
throws SchemaException, ExpressionEvaluationException, ObjectNotFoundException, SecurityViolationException,
ConfigurationException, CommunicationException {
// No need for custom operation result, as this already has one
new ObjectPolicyRulesEvaluator.FocusPolicyRulesEvaluator<>(context.getFocusContextRequired(), task)
.evaluate(result);
}
Expand All @@ -62,6 +75,7 @@ public <AH extends AssignmentHolderType> void evaluateProjectionPolicyRules(
OperationResult result)
throws SchemaException, ExpressionEvaluationException, ObjectNotFoundException, SecurityViolationException,
ConfigurationException, CommunicationException {
// No need for custom operation result, as this already has one
new ObjectPolicyRulesEvaluator.ProjectionPolicyRulesEvaluator(projectionContext, task)
.evaluate(result);
}
Expand All @@ -71,13 +85,22 @@ public <AH extends AssignmentHolderType> void evaluateProjectionPolicyRules(
public <AH extends AssignmentHolderType> void updateCounters(
LensContext<AH> context, @SuppressWarnings("unused") XMLGregorianCalendar now, Task task, OperationResult result)
throws SchemaException, ObjectNotFoundException, ObjectAlreadyExistsException {
// No need for custom operation result, as this already has one
new PolicyRuleCounterUpdater<>(context, task)
.updateCounters(result);
}

public <O extends ObjectType> void enforce(@NotNull LensContext<O> context, OperationResult result)
public <O extends ObjectType> void enforce(@NotNull LensContext<O> context, OperationResult parentResult)
throws PolicyViolationException, ConfigurationException {
new PolicyRuleEnforcer<>(context)
.enforce(result);
OperationResult result = parentResult.createMinorSubresult(OP_ENFORCE);
try {
new PolicyRuleEnforcer<>(context)
.enforce(result);
} catch (Throwable t) {
result.recordException(t);
throw t;
} finally {
result.close();
}
}
}

0 comments on commit 0ea7e27

Please sign in to comment.