Skip to content

Commit

Permalink
Merge branch 'feature/thresholds'
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed Jul 6, 2021
2 parents 868ffa2 + da378ec commit b9d0551
Show file tree
Hide file tree
Showing 178 changed files with 3,202 additions and 2,025 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@

import com.evolveum.midpoint.gui.impl.component.menu.LeftMenuPanel;

import com.evolveum.midpoint.report.api.ReportService;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
Expand Down Expand Up @@ -91,7 +89,7 @@
import com.evolveum.midpoint.prism.polystring.PolyString;
import com.evolveum.midpoint.prism.query.QueryConverter;
import com.evolveum.midpoint.repo.api.CacheDispatcher;
import com.evolveum.midpoint.repo.api.CounterManager;
import com.evolveum.midpoint.repo.common.activity.CounterManager;
import com.evolveum.midpoint.repo.api.RepositoryService;
import com.evolveum.midpoint.repo.common.ObjectResolver;
import com.evolveum.midpoint.repo.common.expression.Expression;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
import org.apache.wicket.model.IModel;

import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.repo.api.CounterSpecification;
import com.evolveum.midpoint.repo.common.activity.CounterSpecification;
import com.evolveum.midpoint.schema.internals.InternalCounters;
import com.evolveum.midpoint.schema.internals.InternalMonitor;
import com.evolveum.midpoint.web.component.dialog.ConfirmationPanel;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,10 @@ default boolean isPrimaryIdentifier(QName attrName) {
.anyMatch(idDef -> QNameUtil.match(idDef.getItemName(), attrName));
}

default boolean isIdentifier(QName attrName) {
return isPrimaryIdentifier(attrName) || isSecondaryIdentifier(attrName);
}

/**
* Returns the definition of secondary identifier attributes of a resource
* object.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ public static CriticalityType getCriticality(ErrorSelectorType selector, Throwab
return defaultIfNull(selector.getNetwork(), defaultValue);
case SECURITY:
return defaultIfNull(selector.getSecurity(), defaultValue);
case POLICY_THRESHOLD:
return defaultIfNull(selector.getPolicyThreshold(), defaultValue);
case POLICY:
return defaultIfNull(selector.getPolicy(), defaultValue);
case SCHEMA:
Expand All @@ -77,6 +79,8 @@ public static ErrorCategoryType getErrorCategory(Throwable exception) {
return ErrorCategoryType.NETWORK;
} else if (exception instanceof SecurityViolationException) {
return ErrorCategoryType.SECURITY;
} else if (exception instanceof ThresholdPolicyViolationException) {
return ErrorCategoryType.POLICY_THRESHOLD;
} else if (exception instanceof PolicyViolationException) {
return ErrorCategoryType.POLICY;
} else if (exception instanceof SchemaException) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -645,4 +645,12 @@ private static void getExclusionTriggersFromTriggers(List<EvaluatedExclusionTrig
}
}
}

public static String createId(String containingObjectOid, Long containerId) {
return containingObjectOid + ":" + containerId;
}

public static String createId(String containingObjectOid) {
return containingObjectOid + ":rule";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,9 @@ public static boolean hasLimitations(WorkBucketType bucket) {
} else if (bucket.getContent() instanceof StringPrefixWorkBucketContentType) {
StringPrefixWorkBucketContentType stringPrefix = (StringPrefixWorkBucketContentType) bucket.getContent();
return !stringPrefix.getPrefix().isEmpty();
} else if (bucket.getContent() instanceof StringValueWorkBucketContentType) {
StringValueWorkBucketContentType stringValue = (StringValueWorkBucketContentType) bucket.getContent();
return !stringValue.getValue().isEmpty();
} else if (bucket.getContent() instanceof FilterWorkBucketContentType) {
FilterWorkBucketContentType filtered = (FilterWorkBucketContentType) bucket.getContent();
return !filtered.getFilter().isEmpty();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,18 +75,14 @@ public static int getItemsProcessedWithSuccess(OperationStatsType stats) {
* 2. operationsPerformanceInformation,
* 3. cachingConfiguration.
*/
public static OperationStatsType getOperationStatsFromTree(TaskType task, PrismContext prismContext) {
if (!ActivityStateUtil.isPartitionedMaster(task) && !ActivityStateUtil.isWorkStateHolder(task)) {
return task.getOperationStats();
}

public static OperationStatsType getOperationStatsFromTree(TaskType root, PrismContext prismContext) {
OperationStatsType aggregate = new OperationStatsType(prismContext)
.environmentalPerformanceInformation(new EnvironmentalPerformanceInformationType())
.repositoryPerformanceInformation(new RepositoryPerformanceInformationType());

Stream<TaskType> subTasks = TaskTreeUtil.getAllTasksStream(task);
subTasks.forEach(subTask -> {
OperationStatsType operationStatsBean = subTask.getOperationStats();
Stream<TaskType> tasks = TaskTreeUtil.getAllTasksStream(root);
tasks.forEach(task -> {
OperationStatsType operationStatsBean = task.getOperationStats();
if (operationStatsBean != null) {
EnvironmentalPerformanceInformation.addTo(aggregate.getEnvironmentalPerformanceInformation(), operationStatsBean.getEnvironmentalPerformanceInformation());
RepositoryPerformanceInformationUtil.addTo(aggregate.getRepositoryPerformanceInformation(), operationStatsBean.getRepositoryPerformanceInformation());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19722,6 +19722,7 @@
<xsd:element name="objectTemplateAfterAssignments" type="tns:PartialProcessingTypeType" minOccurs="0" default="automatic"/>
<xsd:element name="focusCredentials" type="tns:PartialProcessingTypeType" minOccurs="0" default="automatic"/>
<xsd:element name="focusPolicyRules" type="tns:PartialProcessingTypeType" minOccurs="0" default="automatic"/>
<xsd:element name="policyRuleCounters" type="tns:PartialProcessingTypeType" minOccurs="0" default="automatic"/>
<xsd:element name="projection" type="tns:PartialProcessingTypeType" minOccurs="0" default="automatic"/>
<xsd:element name="outbound" type="tns:PartialProcessingTypeType" minOccurs="0" default="automatic"/>
<xsd:element name="projectionValues" type="tns:PartialProcessingTypeType" minOccurs="0" default="automatic"/>
Expand Down
157 changes: 103 additions & 54 deletions infra/schema/src/main/resources/xml/ns/public/common/common-tasks-3.xsd
Original file line number Diff line number Diff line change
Expand Up @@ -1786,13 +1786,6 @@
</xsd:annotation>
</xsd:element>
</xsd:choice>
<xsd:element name="tailoring" type="tns:ActivitiesTailoringType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
TODO
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="executionMode" type="tns:ExecutionModeType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
Expand All @@ -1815,6 +1808,13 @@
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="tailoring" type="tns:ActivitiesTailoringType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
TODO
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:long"/>
</xsd:complexType>
Expand Down Expand Up @@ -2348,44 +2348,6 @@
</xsd:restriction>
</xsd:simpleType>

<xsd:complexType name="PartsSubtasksRealizationType">
<xsd:annotation>
<xsd:documentation>
How parts are realized via subtasks.
</xsd:documentation>
<xsd:appinfo>
<a:since>4.4</a:since>
<a:container>true</a:container>
<a:experimental>true</a:experimental>
</xsd:appinfo>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="taskName" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
How to derive names for individual subtasks. It is possible to use substitution strings of
{masterTaskName}, {masterTaskHandlerUri} and {index} here.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="handlerUri" type="xsd:anyURI" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
Subtasks handler URI pattern.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="copyMasterExtension" type="xsd:boolean" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
Whether to copy task extension from the master task.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:long"/>
</xsd:complexType>

<xsd:complexType name="ActivitySubtaskSpecificationType">
<xsd:annotation>
<xsd:documentation>
Expand All @@ -2406,14 +2368,6 @@
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="handlerUri" type="xsd:anyURI" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
Partition task handler URI. The default is {masterTaskHandlerUri}#{index}.
Overrides the handler URI specified for all parts.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="executionEnvironment" type="tns:TaskExecutionEnvironmentType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
Expand Down Expand Up @@ -2713,6 +2667,16 @@
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="counters" type="tns:ActivityCounterGroupsType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
Counters related to the execution of the activity, grouped into related categories.
One of the categories are counters needed to implement thresholds for policy rules.

Note: The counters may be moved to separate repository object later to improve performance.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="workState" type="tns:AbstractActivityWorkStateType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
Expand Down Expand Up @@ -3240,7 +3204,15 @@
<xsd:element name="subtask" type="tns:ActivitySubtaskSpecificationType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
How is the activity (or children activities) executed in separate subtask(s).
How is the activity executed in separate subtask(s).
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="subtasks" type="tns:ActivitySubtaskSpecificationType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
How are the activities executed in separate subtask(s). This is actually a shortcut for tailoring
the sub-activities: it does not apply to the activity itself, but to its children. TODO reconsider.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
Expand Down Expand Up @@ -6857,4 +6829,81 @@
</xsd:element>
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="ActivityCounterGroupsType">
<xsd:annotation>
<xsd:documentation>
Counters related to the execution of the activity, grouped into related categories.
</xsd:documentation>
<xsd:appinfo>
<a:container>true</a:container>
<a:since>4.4</a:since>
<a:experimental>true</a:experimental>
</xsd:appinfo>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="policyRules" type="tns:ActivityCounterGroupType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
Counters for policy rules.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:long"/>
</xsd:complexType>

<xsd:complexType name="ActivityCounterGroupType">
<xsd:annotation>
<xsd:documentation>
A group of related counters.
</xsd:documentation>
<xsd:appinfo>
<a:container>true</a:container>
<a:since>4.4</a:since>
<a:experimental>true</a:experimental>
</xsd:appinfo>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="counter" type="tns:ActivityCounterType" minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:documentation>
A single counter.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:long"/>
</xsd:complexType>

<xsd:complexType name="ActivityCounterType">
<xsd:annotation>
<xsd:documentation>
A single counter.
</xsd:documentation>
<xsd:appinfo>
<a:container>true</a:container>
<a:since>4.4</a:since>
<a:experimental>true</a:experimental>
</xsd:appinfo>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="identifier" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
Counter identifier (key).
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="value" type="xsd:int" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
Current counter value.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<!-- TODO other data, like start timestamp (maybe) -->
</xsd:sequence>
<xsd:attribute name="id" type="xsd:long"/>
</xsd:complexType>
</xsd:schema>
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
<executionStatus>closed</executionStatus>
<schedulingState>closed</schedulingState>
<category>Utility</category>
<handlerUri>http://midpoint.evolveum.com/xml/ns/public/model/synchronization/task/partitioned-reconciliation/handler-3#2</handlerUri>
<resultStatus>success</resultStatus>
<objectRef oid="10000000-9999-9999-0000-a000ff000001" relation="org:default" type="c:ResourceType"/>
<lastRunStartTimestamp>2021-04-08T09:15:41.143+02:00</lastRunStartTimestamp>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
<executionStatus>closed</executionStatus>
<schedulingState>closed</schedulingState>
<category>Utility</category>
<handlerUri>http://midpoint.evolveum.com/xml/ns/public/model/synchronization/task/partitioned-reconciliation/handler-3#2</handlerUri>
<resultStatus>success</resultStatus>
<objectRef oid="10000000-9999-9999-0000-a000ff000001" relation="org:default" type="c:ResourceType"/>
<lastRunStartTimestamp>2021-04-08T09:15:41.159+02:00</lastRunStartTimestamp>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,6 @@
</stringSegmentation>
</buckets>
<workers>
<handlerUri>http://midpoint.evolveum.com/xml/ns/public/model/synchronization/task/partitioned-reconciliation/handler-3#2</handlerUri>
<workersPerNode id="4">
<count>2</count>
</workersPerNode>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,13 @@
*/
package com.evolveum.midpoint.certification.impl;

import com.evolveum.midpoint.model.api.context.EvaluatedAssignment;
import com.evolveum.midpoint.model.api.context.EvaluatedPolicyRule;
import com.evolveum.midpoint.model.api.context.ModelContext;
import com.evolveum.midpoint.model.api.context.ModelState;
import com.evolveum.midpoint.model.api.hooks.ChangeHook;
import com.evolveum.midpoint.model.api.hooks.HookOperationMode;
import com.evolveum.midpoint.model.api.hooks.HookRegistry;
import com.evolveum.midpoint.model.impl.lens.LensElementContext;
import com.evolveum.midpoint.prism.delta.DeltaSetTriple;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;
Expand All @@ -32,7 +30,6 @@
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

Expand Down Expand Up @@ -79,7 +76,7 @@ public <O extends ObjectType> HookOperationMode invoke(@NotNull ModelContext<O>
}

private Collection<CertificationPolicyActionType> getFocusCertificationActions(ModelContext<?> context) {
return getCertificationActions(context.getFocusContext().getPolicyRules());
return getCertificationActions(context.getFocusContext().getObjectPolicyRules());
}

private Collection<CertificationPolicyActionType> getAssignmentCertificationActions(ModelContext<?> context) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -465,8 +465,11 @@ TaskType submitTaskFromTemplate(String templateTaskOid, Map<QName, Object> exten
*/
@Experimental
@NotNull
Collection<EvaluatedPolicyRule> evaluateCollectionPolicyRules(@NotNull PrismObject<ObjectCollectionType> collection, @Nullable CompiledObjectCollectionView collectionView, @Nullable Class<? extends ObjectType> targetTypeClass, @NotNull Task task, @NotNull OperationResult result)
throws ObjectNotFoundException, SchemaException, SecurityViolationException, CommunicationException, ConfigurationException, ExpressionEvaluationException;
Collection<EvaluatedPolicyRule> evaluateCollectionPolicyRules(@NotNull PrismObject<ObjectCollectionType> collection,
@Nullable CompiledObjectCollectionView collectionView, @Nullable Class<? extends ObjectType> targetTypeClass,
@NotNull Task task, @NotNull OperationResult result)
throws ObjectNotFoundException, SchemaException, SecurityViolationException, CommunicationException,
ConfigurationException, ExpressionEvaluationException;

@Experimental
@NotNull
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,9 @@ public class ModelPublicConstants {
public static final String CLUSTER_REPORT_FILE_FILENAME_PARAMETER = "filename";

public static final String RECONCILIATION_OPERATION_COMPLETION_ID = "operationCompletion";
public static final String RECONCILIATION_RESOURCE_OBJECTS_SIMULATION_ID = "resourceObjectsSimulation";
public static final String RECONCILIATION_RESOURCE_OBJECTS_ID = "resourceObjects";
public static final String RECONCILIATION_REMAINING_SHADOWS_SIMULATION_ID = "remainingShadowsSimulation";
public static final String RECONCILIATION_REMAINING_SHADOWS_ID = "remainingShadows";

public static final ActivityPath RECONCILIATION_OPERATION_COMPLETION_PATH = ActivityPath.fromId(RECONCILIATION_OPERATION_COMPLETION_ID);
Expand Down

0 comments on commit b9d0551

Please sign in to comment.