/** * @return whether the groups contain all targets */ public boolean isValid() { return totalTargets == getTargetsInGroups(); } }
private void updateGroupsChart(final RolloutGroupsValidation validation) { if (validation == null) { groupsPieChart.setChartState(null, null); return; } final List<Long> targetsPerGroup = validation.getTargetsPerGroup(); if (validation.getTotalTargets() == 0L || targetsPerGroup.isEmpty()) { groupsPieChart.setChartState(null, null); } else { groupsPieChart.setChartState(targetsPerGroup, validation.getTotalTargets()); } totalTargetsCount = validation.getTotalTargets(); groupsLegendLayout.populateTotalTargets(validation.getTotalTargets()); groupsLegendLayout.populateGroupsLegendByValidation(validation, defineGroupsLayout.getSavedRolloutGroups()); }
return; final List<Long> targetsPerGroup = validation.getTargetsPerGroup(); final long unassigned = validation.getTotalTargets() - validation.getTargetsInGroups(); final int labelsToUpdate = (unassigned > 0) ? (getGroupsWithoutToBeContinuedLabel(groups.size()) - 1) : groupsLegend.getComponentCount();
if (groupsValidation != null && groupsValidation.isValid() && validationStatus != ValidationStatus.INVALID) { lastRow.resetError(); setValidationStatus(ValidationStatus.VALID); final Long count = groupsValidation.getTargetsPerGroup().get(i); if (count != null && count > maxTargets) { row.setError(i18n.getMessage(MESSAGE_ROLLOUT_MAX_GROUP_SIZE_EXCEEDED, maxTargets));
.getTargetsPerGroup().forEach(this::assertTargetsPerRolloutGroupQuota);
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); }
return; final List<Long> targetsPerGroup = validation.getTargetsPerGroup(); final long unassigned = validation.getTotalTargets() - validation.getTargetsInGroups(); final int labelsToUpdate = (unassigned > 0) ? (getGroupsWithoutToBeContinuedLabel(groups.size()) - 1) : groupsLegend.getComponentCount();
if (groupsValidation != null && groupsValidation.isValid() && validationStatus != ValidationStatus.INVALID) { lastRow.resetError(); setValidationStatus(ValidationStatus.VALID); final Long count = groupsValidation.getTargetsPerGroup().get(i); if (count != null && count > maxTargets) { row.setError(i18n.getMessage(MESSAGE_ROLLOUT_MAX_GROUP_SIZE_EXCEEDED, maxTargets));
.getTargetsPerGroup().forEach(this::assertTargetsPerRolloutGroupQuota);
protected long calculateRemainingTargets(final List<RolloutGroup> groups, final String targetFilter, final Long createdAt) { final String baseFilter = RolloutHelper.getTargetFilterQuery(targetFilter, createdAt); final long totalTargets = targetManagement.countByRsql(baseFilter); if (totalTargets == 0) { throw new ConstraintDeclarationException("Rollout target filter does not match any targets"); } final RolloutGroupsValidation validation = validateTargetsInGroups(groups, baseFilter, totalTargets); return totalTargets - validation.getTargetsInGroups(); }
private void updateGroupsChart(final RolloutGroupsValidation validation) { if (validation == null) { groupsPieChart.setChartState(null, null); return; } final List<Long> targetsPerGroup = validation.getTargetsPerGroup(); if (validation.getTotalTargets() == 0L || targetsPerGroup.isEmpty()) { groupsPieChart.setChartState(null, null); } else { groupsPieChart.setChartState(targetsPerGroup, validation.getTotalTargets()); } totalTargetsCount = validation.getTotalTargets(); groupsLegendLayout.populateTotalTargets(validation.getTotalTargets()); groupsLegendLayout.populateGroupsLegendByValidation(validation, defineGroupsLayout.getSavedRolloutGroups()); }