private static ProxyRollout createProxy(final Rollout rollout) { final ProxyRollout proxyRollout = new ProxyRollout(); proxyRollout.setName(rollout.getName()); proxyRollout.setDescription(rollout.getDescription()); final DistributionSet distributionSet = rollout.getDistributionSet(); proxyRollout.setDistributionSetNameVersion( HawkbitCommonUtil.getFormattedNameVersion(distributionSet.getName(), distributionSet.getVersion())); proxyRollout.setNumberOfGroups(rollout.getRolloutGroupsCreated()); proxyRollout.setCreatedDate(SPDateTimeUtil.getFormattedDate(rollout.getCreatedAt())); proxyRollout.setModifiedDate(SPDateTimeUtil.getFormattedDate(rollout.getLastModifiedAt())); proxyRollout.setCreatedBy(UserDetailsFormatter.loadAndFormatCreatedBy(rollout)); proxyRollout.setLastModifiedBy(UserDetailsFormatter.loadAndFormatLastModifiedBy(rollout)); proxyRollout.setForcedTime(rollout.getForcedTime()); proxyRollout.setId(rollout.getId()); proxyRollout.setStatus(rollout.getStatus()); proxyRollout.setRolloutRendererData(new RolloutRendererData(rollout.getName(), rollout.getStatus().toString())); final TotalTargetCountStatus totalTargetCountActionStatus = rollout.getTotalTargetCountStatus(); proxyRollout.setTotalTargetCountStatus(totalTargetCountActionStatus); proxyRollout.setTotalTargetsCount(String.valueOf(rollout.getTotalTargets())); proxyRollout.setApprovalDecidedBy(rollout.getApprovalDecidedBy()); proxyRollout.setApprovalRemark(rollout.getApprovalRemark()); return proxyRollout; }
/** * Modifies the target filter query to only match targets that were created * after the Rollout. * * @param rollout * Rollout to derive the filter from * @return resulting target filter query */ public static String getTargetFilterQuery(final Rollout rollout) { return getTargetFilterQuery(rollout.getTargetFilterQuery(), rollout.getCreatedAt()); }
private Long createActionsForTargetsInNewTransaction(final long rolloutId, final long groupId, final int limit) { return runInNewTransaction("createActionsForTargets", status -> { final PageRequest pageRequest = new PageRequest(0, limit); final Rollout rollout = rolloutRepository.findOne(rolloutId); final RolloutGroup group = rolloutGroupRepository.findOne(groupId); final DistributionSet distributionSet = rollout.getDistributionSet(); final ActionType actionType = rollout.getActionType(); final long forceTime = rollout.getForcedTime(); final Page<Target> targets = targetManagement.findByInRolloutGroupWithoutAction(pageRequest, groupId); if (targets.getTotalElements() > 0) { createScheduledAction(targets.getContent(), distributionSet, actionType, forceTime, rollout, group); } return Long.valueOf(targets.getNumberOfElements()); }); }
private void handleReadyRollout(final Rollout rollout) { if (rollout.getStartAt() != null && rollout.getStartAt() <= System.currentTimeMillis()) { LOGGER.debug( "handleReadyRollout called for rollout {} with autostart beyond define time. Switch to STARTING", rollout.getId()); start(rollout.getId()); } }
private UserDetails getActor(Rollout rollout) { final String actor = rollout.getLastModifiedBy() != null ? rollout.getLastModifiedBy() : rollout.getCreatedBy(); return systemSecurityContext.runAsSystem(() -> { UserPrincipal userPrincipal = (UserPrincipal) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); if(userPrincipal.getUsername().equals(actor)) { return userPrincipal; } else { return this.userDetailsService.loadUserByUsername(actor); } }); }
static MgmtRolloutResponseBody toResponseRollout(final Rollout rollout, final boolean withDetails) { final MgmtRolloutResponseBody body = new MgmtRolloutResponseBody(); body.setCreatedAt(rollout.getCreatedAt()); body.setCreatedBy(rollout.getCreatedBy()); body.setDescription(rollout.getDescription()); body.setLastModifiedAt(rollout.getLastModifiedAt()); body.setLastModifiedBy(rollout.getLastModifiedBy()); body.setName(rollout.getName()); body.setRolloutId(rollout.getId()); body.setTargetFilterQuery(rollout.getTargetFilterQuery()); body.setDistributionSetId(rollout.getDistributionSet().getId()); body.setStatus(rollout.getStatus().toString().toLowerCase()); body.setTotalTargets(rollout.getTotalTargets()); body.setDeleted(rollout.isDeleted()); rollout.getTotalTargetCountStatus().getTotalTargetCountByStatus(status)); body.add(linkTo(methodOn(MgmtRolloutRestApi.class).start(rollout.getId())).withRel("start")); body.add(linkTo(methodOn(MgmtRolloutRestApi.class).pause(rollout.getId())).withRel("pause")); body.add(linkTo(methodOn(MgmtRolloutRestApi.class).resume(rollout.getId())).withRel("resume")); body.add(linkTo(methodOn(MgmtRolloutRestApi.class).approve(rollout.getId(), null)).withRel("approve")); body.add(linkTo(methodOn(MgmtRolloutRestApi.class).deny(rollout.getId(), null)).withRel("deny")); body.add(linkTo(methodOn(MgmtRolloutRestApi.class).getRolloutGroups(rollout.getId(), MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET_VALUE, MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE, null, null)).withRel("groups")); body.add(linkTo(methodOn(MgmtRolloutRestApi.class).getRollout(rollout.getId())).withSelfRel()); return body;
description.setValue(rollout.getDescription()); distributionSet.setValue(rollout.getDistributionSet().getId()); setActionType(rollout); setAutoStartType(rollout); rolloutName.setValue(i18n.getMessage("textfield.rollout.copied.name", rollout.getName())); populateTargetFilterQuery(rollout); totalTargetsCount = targetManagement.countByRsql(rollout.getTargetFilterQuery()); groupsLegendLayout.populateTotalTargets(totalTargetsCount); } else { editRolloutEnabled = true; if (rollout.getStatus() != Rollout.RolloutStatus.READY) { disableRequiredFieldsOnEdit(); if (rollout.getStatus() == Rollout.RolloutStatus.WAITING_FOR_APPROVAL) { approvalButtonsLayout.setVisible(true); approveButtonsGroup.addValidator(nullValidator); rolloutName.setValue(rollout.getName()); groupsDefinitionTabs.setVisible(false); targetFilterQuery.setValue(rollout.getTargetFilterQuery()); removeComponent(1, 2); targetFilterQueryCombo.removeValidator(nullValidator); .findByRollout(new PageRequest(0, quotaManagement.getMaxRolloutGroupsPerRollout()), rollout.getId()) .getContent(), rollout.getTotalTargets());
private void handleStartingRollout(final Rollout rollout) { LOGGER.debug("handleStartingRollout called for rollout {}", rollout.getId()); if (ensureAllGroupsAreScheduled(rollout)) { startFirstRolloutGroup(rollout); } }
private void updateItem(final Rollout rollout, final Item item) { final TotalTargetCountStatus totalTargetCountStatus = rollout.getTotalTargetCountStatus(); item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).setValue(rollout.getStatus()); item.getItemProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setValue(totalTargetCountStatus); final Long groupCount = Long .valueOf((Integer) item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).getValue()); final int groupsCreated = rollout.getRolloutGroupsCreated(); item.getItemProperty(ROLLOUT_RENDERER_DATA) .setValue(new RolloutRendererData(rollout.getName(), rollout.getStatus().toString())); if (groupsCreated != 0) { item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setValue(Integer.valueOf(groupsCreated)); return; } final Long size = rolloutGroupManagement.countTargetsOfRolloutsGroup(rollout.getId()); if (!size.equals(groupCount)) { item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setValue(size.intValue()); } }
private void startFirstRolloutGroup(final Rollout rollout) { LOGGER.debug("startFirstRolloutGroup called for rollout {}", rollout.getId()); RolloutHelper.verifyRolloutInStatus(rollout, RolloutStatus.STARTING); final JpaRollout jpaRollout = (JpaRollout) rollout; final List<JpaRolloutGroup> rolloutGroups = rolloutGroupRepository.findByRolloutOrderByIdAsc(jpaRollout); final JpaRolloutGroup rolloutGroup = rolloutGroups.get(0); if (rolloutGroup.getParent() != null) { throw new RolloutIllegalStateException("First Group is not the first group."); } deploymentManagement.startScheduledActionsByRolloutGroupParent(rollout.getId(), rollout.getDistributionSet().getId(), null); rolloutGroup.setStatus(RolloutGroupStatus.RUNNING); rolloutGroupRepository.save(rolloutGroup); jpaRollout.setStatus(RolloutStatus.RUNNING); jpaRollout.setLastCheck(0); rolloutRepository.save(jpaRollout); }
@Override public void saveOrUpdate() { if (editRolloutEnabled) { editRollout(); if (rollout.getStatus().equals(Rollout.RolloutStatus.WAITING_FOR_APPROVAL)) { rolloutManagement.approveOrDeny(rollout.getId(), (Rollout.ApprovalDecision) approveButtonsGroup.getValue(), approvalRemarkField.getValue()); eventBus.publish(this, RolloutEvent.UPDATE_ROLLOUT); } return; } createRollout(); }
private void editRollout() { if (rollout == null) { return; } final Long distributionSetId = (Long) distributionSet.getValue(); final RolloutUpdate rolloutUpdate = entityFactory.rollout().update(rollout.getId()) .name(rolloutName.getValue()).description(description.getValue()).set(distributionSetId) .actionType(getActionType()).forcedTime(getForcedTimeStamp()); if (AutoStartOptionGroupLayout.AutoStartOption.AUTO_START.equals(getAutoStartOption())) { rolloutUpdate.startAt(System.currentTimeMillis()); } if (AutoStartOptionGroupLayout.AutoStartOption.SCHEDULED.equals(getAutoStartOption())) { rolloutUpdate.startAt(getScheduledStartTime()); } Rollout updatedRollout; try { updatedRollout = rolloutManagement.update(rolloutUpdate); } catch (final EntityNotFoundException | EntityReadOnlyException e) { LOGGER.warn("Rollout was deleted. Redirect to Rollouts overview.", e); uiNotification.displayWarning( "Rollout with name " + rolloutName.getValue() + " was deleted. Update is not possible"); eventBus.publish(this, RolloutEvent.SHOW_ROLLOUTS); return; } uiNotification.displaySuccess(i18n.getMessage("message.update.success", updatedRollout.getName())); eventBus.publish(this, RolloutEvent.UPDATE_ROLLOUT); }
public static void checkIfRolloutCanStarted(final Rollout rollout, final Rollout mergedRollout) { if (!(Rollout.RolloutStatus.READY.equals(mergedRollout.getStatus()))) { throw new RolloutIllegalStateException("Rollout can only be started in state ready but current state is " + rollout.getStatus().name().toLowerCase()); } }
private void setActionType(final Rollout rollout) { for (final ActionTypeOptionGroupLayout.ActionTypeOption groupAction : ActionTypeOptionGroupLayout.ActionTypeOption .values()) { if (groupAction.getActionType() == rollout.getActionType()) { actionTypeOptionGroupLayout.getActionTypeOptionGroup().setValue(groupAction); final SimpleDateFormat format = new SimpleDateFormat(SPUIDefinitions.LAST_QUERY_DATE_FORMAT); format.setTimeZone(SPDateTimeUtil.getBrowserTimeZone()); actionTypeOptionGroupLayout.getForcedTimeDateField().setValue(new Date(rollout.getForcedTime())); break; } } }
private void populateTargetFilterQuery(final Rollout rollout) { final Page<TargetFilterQuery> filterQueries = targetFilterQueryManagement.findByQuery(PageRequest.of(0, 1), rollout.getTargetFilterQuery()); if (filterQueries.getTotalElements() > 0) { final TargetFilterQuery filterQuery = filterQueries.getContent().get(0); targetFilterQueryCombo.setValue(filterQuery.getName()); } }
@Override public Optional<Rollout> getWithDetailedStatus(final long rolloutId) { final Optional<Rollout> rollout = get(rolloutId); if (!rollout.isPresent()) { return rollout; } List<TotalTargetCountActionStatus> rolloutStatusCountItems = rolloutStatusCache.getRolloutStatus(rolloutId); if (CollectionUtils.isEmpty(rolloutStatusCountItems)) { rolloutStatusCountItems = actionRepository.getStatusCountByRolloutId(rolloutId); rolloutStatusCache.putRolloutStatus(rolloutId, rolloutStatusCountItems); } final TotalTargetCountStatus totalTargetCountStatus = new TotalTargetCountStatus(rolloutStatusCountItems, rollout.get().getTotalTargets()); ((JpaRollout) rollout.get()).setTotalTargetCountStatus(totalTargetCountStatus); return rollout; }
description.setValue(rollout.getDescription()); distributionSet.setValue(rollout.getDistributionSet().getId()); setActionType(rollout); setAutoStartType(rollout); rolloutName.setValue(i18n.getMessage("textfield.rollout.copied.name", rollout.getName())); populateTargetFilterQuery(rollout); totalTargetsCount = targetManagement.countByRsql(rollout.getTargetFilterQuery()); groupsLegendLayout.populateTotalTargets(totalTargetsCount); } else { editRolloutEnabled = true; if (rollout.getStatus() != Rollout.RolloutStatus.READY) { disableRequiredFieldsOnEdit(); if (rollout.getStatus() == Rollout.RolloutStatus.WAITING_FOR_APPROVAL) { approvalButtonsLayout.setVisible(true); approveButtonsGroup.addValidator(nullValidator); rolloutName.setValue(rollout.getName()); groupsDefinitionTabs.setVisible(false); targetFilterQuery.setValue(rollout.getTargetFilterQuery()); removeComponent(1, 2); targetFilterQueryCombo.removeValidator(nullValidator); .findByRollout(PageRequest.of(0, quotaManagement.getMaxRolloutGroupsPerRollout()), rollout.getId()) .getContent(), rollout.getTotalTargets());
private void handleStartingRollout(final Rollout rollout) { LOGGER.debug("handleStartingRollout called for rollout {}", rollout.getId()); if (ensureAllGroupsAreScheduled(rollout)) { startFirstRolloutGroup(rollout); } }
private void updateItem(final Rollout rollout, final Item item) { final TotalTargetCountStatus totalTargetCountStatus = rollout.getTotalTargetCountStatus(); item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).setValue(rollout.getStatus()); item.getItemProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setValue(totalTargetCountStatus); final Long groupCount = Long .valueOf((Integer) item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).getValue()); final int groupsCreated = rollout.getRolloutGroupsCreated(); item.getItemProperty(ROLLOUT_RENDERER_DATA) .setValue(new RolloutRendererData(rollout.getName(), rollout.getStatus().toString())); if (groupsCreated != 0) { item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setValue(Integer.valueOf(groupsCreated)); return; } final Long size = rolloutGroupManagement.countTargetsOfRolloutsGroup(rollout.getId()); if (!size.equals(groupCount)) { item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setValue(size.intValue()); } }
private void startFirstRolloutGroup(final Rollout rollout) { LOGGER.debug("startFirstRolloutGroup called for rollout {}", rollout.getId()); RolloutHelper.verifyRolloutInStatus(rollout, RolloutStatus.STARTING); final JpaRollout jpaRollout = (JpaRollout) rollout; final List<JpaRolloutGroup> rolloutGroups = rolloutGroupRepository.findByRolloutOrderByIdAsc(jpaRollout); final JpaRolloutGroup rolloutGroup = rolloutGroups.get(0); if (rolloutGroup.getParent() != null) { throw new RolloutIllegalStateException("First Group is not the first group."); } deploymentManagement.startScheduledActionsByRolloutGroupParent(rollout.getId(), rollout.getDistributionSet().getId(), null); rolloutGroup.setStatus(RolloutGroupStatus.RUNNING); rolloutGroupRepository.save(rolloutGroup); jpaRollout.setStatus(RolloutStatus.RUNNING); jpaRollout.setLastCheck(0); rolloutRepository.save(jpaRollout); }