protected RolloutGroupsValidation validateTargetsInGroups(final List<RolloutGroup> groups, final String baseFilter, final long totalTargets) { final List<Long> groupTargetCounts = new ArrayList<>(groups.size()); final Map<String, Long> targetFilterCounts = groups.stream() .map(group -> RolloutHelper.getGroupTargetFilter(baseFilter, group)).distinct() .collect(Collectors.toMap(Function.identity(), targetManagement::countByRsql)); long unusedTargetsCount = 0; for (int i = 0; i < groups.size(); i++) { final RolloutGroup group = groups.get(i); final String groupTargetFilter = RolloutHelper.getGroupTargetFilter(baseFilter, group); RolloutHelper.verifyRolloutGroupTargetPercentage(group.getTargetPercentage()); final long targetsInGroupFilter = targetFilterCounts.get(groupTargetFilter); final long overlappingTargets = countOverlappingTargetsWithPreviousGroups(baseFilter, groups, group, i, targetFilterCounts); final long realTargetsInGroup; // Assume that targets which were not used in the previous groups // are used in this group if (overlappingTargets > 0 && unusedTargetsCount > 0) { realTargetsInGroup = targetsInGroupFilter - overlappingTargets + unusedTargetsCount; unusedTargetsCount = 0; } else { realTargetsInGroup = targetsInGroupFilter - overlappingTargets; } final long reducedTargetsInGroup = Math .round(group.getTargetPercentage() / 100 * (double) realTargetsInGroup); groupTargetCounts.add(reducedTargetsInGroup); unusedTargetsCount += realTargetsInGroup - reducedTargetsInGroup; } return new RolloutGroupsValidation(totalTargets, groupTargetCounts); }
/** * Verifies that the group has the required success condition and action and * a falid target percentage. * * @param group * the input group * @return the verified group */ public static RolloutGroup verifyRolloutGroupHasConditions(final RolloutGroup group) { if (group.getTargetPercentage() < 1F || group.getTargetPercentage() > 100F) { throw new ValidationException("Target percentage has to be between 1 and 100"); } if (group.getSuccessCondition() == null) { throw new ValidationException("Rollout group is missing success condition"); } if (group.getSuccessAction() == null) { throw new ValidationException("Rollout group is missing success action"); } return group; }
/** * Populates the row with the data from the provided groups. * * @param group * the data source */ public void populateByGroup(final RolloutGroup group) { initialized = false; groupName.setValue(group.getName()); targetFilterQuery.setValue(group.getTargetFilterQuery()); populateTargetFilterQuery(group); targetPercentage.setValue(String.format("%.2f", group.getTargetPercentage())); triggerThreshold.setValue(group.getSuccessConditionExp()); errorThreshold.setValue(group.getErrorConditionExp()); populated = true; initialized = true; }
/** * Populates the row with the data from the provided groups. * * @param group * the data source */ public void populateByGroup(final RolloutGroup group) { initialized = false; groupName.setValue(group.getName()); targetFilterQuery.setValue(group.getTargetFilterQuery()); populateTargetFilterQuery(group); targetPercentage.setValue(String.format("%.2f", group.getTargetPercentage())); triggerThreshold.setValue(group.getSuccessConditionExp()); errorThreshold.setValue(group.getErrorConditionExp()); populated = true; initialized = true; }
jsonGroup.put("description", group.getDescription()); jsonGroup.put("targetFilterQuery", group.getTargetFilterQuery()); jsonGroup.put("targetPercentage", group.getTargetPercentage());
group.setStatus(RolloutGroupStatus.CREATING); group.setTargetPercentage(srcGroup.getTargetPercentage()); if (srcGroup.getTargetFilterQuery() != null) { group.setTargetFilterQuery(srcGroup.getTargetFilterQuery());
group.setStatus(RolloutGroupStatus.CREATING); group.setTargetPercentage(srcGroup.getTargetPercentage()); if (srcGroup.getTargetFilterQuery() != null) { group.setTargetFilterQuery(srcGroup.getTargetFilterQuery());
body.setRolloutGroupId(rolloutGroup.getId()); body.setStatus(rolloutGroup.getStatus().toString().toLowerCase()); body.setTargetPercentage(rolloutGroup.getTargetPercentage()); body.setTargetFilterQuery(rolloutGroup.getTargetFilterQuery()); body.setTotalTargets(rolloutGroup.getTotalTargets());