Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Trigger next rollout group - UI changes. New button for trigger next rollout group. #69

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -478,4 +478,19 @@ Slice<Rollout> findByFiltersWithDetailedStatus(@NotNull Pageable pageable, @NotE
*/
@PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_HANDLE)
void triggerNextGroup(long rolloutId);

/**
* Retrieves a page of {@link RolloutGroup}s filtered by a given
* {@link Rollout}.
*
* @param rolloutId
* the ID of the rollout to filter the {@link RolloutGroup}s
* @param groupStatus
* the group status to filter the {@link RolloutGroup}s
* @return a page of found {@link RolloutGroup}s
*/

@PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ)
long countGroupsByRolloutAndStatus(long rolloutId, RolloutGroup.RolloutGroupStatus groupStatus);

}
Original file line number Diff line number Diff line change
Expand Up @@ -761,10 +761,20 @@ public void triggerNextGroup(final long rolloutId) {
+ "but current state is " + rollout.getStatus().name().toLowerCase());
}

if (countGroupsByRolloutAndStatus(rolloutId, RolloutGroupStatus.SCHEDULED) == 0) {
throw new RolloutIllegalStateException("No group is scheduled for running");
}

final List<JpaRolloutGroup> rolloutGroupsRunning =
rolloutGroupRepository.findByRolloutAndStatusOrderByIdDesc(rollout, RolloutGroupStatus.RUNNING);
JpaRolloutGroup jpaRolloutGroup = rolloutGroupsRunning.get(0);

startNextRolloutGroupAction.eval(rollout, jpaRolloutGroup, jpaRolloutGroup.getSuccessActionExp());
}

@Override
public long countGroupsByRolloutAndStatus(final long rolloutId, RolloutGroup.RolloutGroupStatus groupStatus) {
return rolloutGroupRepository.countByRolloutIdAndStatusOrStatus(rolloutId, groupStatus, groupStatus);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.eclipse.hawkbit.repository.TenantConfigurationManagement;
import org.eclipse.hawkbit.repository.model.Rollout;
import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus;
import org.eclipse.hawkbit.repository.model.RolloutGroup;
import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus.Status;
import org.eclipse.hawkbit.security.SystemSecurityContext;
import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationProperties.TenantConfigurationKey;
Expand Down Expand Up @@ -88,6 +89,7 @@ public class RolloutGrid extends AbstractGrid<ProxyRollout, String> {
private static final String APPROVE_BUTTON_ID = "approve";
private static final String RUN_BUTTON_ID = "run";
private static final String PAUSE_BUTTON_ID = "pause";
private static final String TRIGGER_NEXT_GROUP_BUTTON_ID = "triggerNextGroup";
private static final String UPDATE_BUTTON_ID = "update";
private static final String COPY_BUTTON_ID = "copy";
private static final String DELETE_BUTTON_ID = "delete";
Expand Down Expand Up @@ -226,6 +228,12 @@ private static boolean isPausingAllowed(final RolloutStatus status) {
return RolloutStatus.RUNNING == status;
}

private static boolean isTriggerNextGroupAllowed(final ProxyRollout rollout, RolloutManagement rolloutManagement) {
return RolloutStatus.RUNNING == rollout.getStatus() &&
rolloutManagement.countGroupsByRolloutAndStatus(rollout.getId(),
RolloutGroup.RolloutGroupStatus.SCHEDULED) > 0;
}

private static boolean isApprovingAllowed(final RolloutStatus status) {
return RolloutStatus.WAITING_FOR_APPROVAL == status;
}
Expand Down Expand Up @@ -335,6 +343,15 @@ private void addActionColumns() {
permissionChecker.hasRolloutHandlePermission() && isPausingAllowed(rollout.getStatus()));
actionColumns.add(GridComponentBuilder.addIconColumn(this, pauseButton, PAUSE_BUTTON_ID, null));

final ValueProvider<ProxyRollout, Button> triggerNextGroupButton = rollout ->
GridComponentBuilder.buildActionButton(i18n, clickEvent -> triggerNextRolloutGroup(rollout.getId(),
rollout.getName(), rollout.getStatus()), VaadinIcons.STEP_FORWARD,
UIMessageIdProvider.TOOLTIP_ROLLOUT_TRIGGER_NEXT_GROUP, SPUIStyleDefinitions.STATUS_ICON_NEUTRAL,
UIComponentIdProvider.ROLLOUT_TRIGGER_NEXT_GROUP_BUTTON_ID + "." + rollout.getId(),
permissionChecker.hasRolloutHandlePermission() && isTriggerNextGroupAllowed(rollout, rolloutManagement));
actionColumns.add(GridComponentBuilder.addIconColumn(this, triggerNextGroupButton,
TRIGGER_NEXT_GROUP_BUTTON_ID, null));

final ValueProvider<ProxyRollout, Button> updateButton = rollout -> GridComponentBuilder.buildActionButton(i18n,
clickEvent -> updateRollout(rollout), VaadinIcons.EDIT, UIMessageIdProvider.TOOLTIP_ROLLOUT_UPDATE,
SPUIStyleDefinitions.STATUS_ICON_NEUTRAL,
Expand Down Expand Up @@ -488,4 +505,16 @@ protected String createDSTooltipText(final ProxyRollout rollout) {
}
return tooltipText.toString();
}

private void triggerNextRolloutGroup(final Long rolloutId, final String rolloutName,
final RolloutStatus rolloutStatus) {
if (RolloutStatus.RUNNING != rolloutStatus
|| rolloutManagement.countGroupsByRolloutAndStatus(rolloutId, RolloutGroup.RolloutGroupStatus.SCHEDULED)
== 0) {
return;
}

rolloutManagement.triggerNextGroup(rolloutId);
uiNotification.displaySuccess(i18n.getMessage("message.rollout.trigger.next.group", rolloutName));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1154,6 +1154,11 @@ public final class UIComponentIdProvider {
*/
public static final String ROLLOUT_PAUSE_BUTTON_ID = ROLLOUT_ACTION_ID + ".7";

/**
* Rollout trigger next group button id.
*/
public static final String ROLLOUT_TRIGGER_NEXT_GROUP_BUTTON_ID = ROLLOUT_ACTION_ID + ".13";

/**
* Rollout update button id.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,8 @@ public final class UIMessageIdProvider {

public static final String TOOLTIP_UPLOAD_STATUS_PREFIX = "tooltip.upload.status.";

public static final String TOOLTIP_ROLLOUT_TRIGGER_NEXT_GROUP = "tooltip.rollout.triggernextgroup";

/**
* Private Constructor.
*/
Expand Down
2 changes: 2 additions & 0 deletions hawkbit-ui/src/main/resources/messages.properties
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,7 @@ tooltip.active.action.status.inactiveerror=In-active Error
tooltip.rollout.run = Run
tooltip.rollout.approve = Approve
tooltip.rollout.pause = Pause
tooltip.rollout.triggernextgroup = Trigger next group
tooltip.rollout.update = Edit..
tooltip.rollout.copy = Copy..
tooltip.delete = Delete..
Expand Down Expand Up @@ -772,6 +773,7 @@ message.rollout.max.group.size.exceeded.advanced = The maximum size of {0} targe
message.rollout.approval.required = You should approve or reject the Rollout
message.rollout.started = Rollout {0} started successfully
message.rollout.paused = Rollout {0} paused successfully
message.rollout.trigger.next.group = Next group successfully triggered
message.rollout.resumed = Rollout {0} resumed successfully
message.rollout.deleted = Rollout {0} deleted successfully
message.rollout.noofgroups.or.targetfilter.missing = Please enter number of groups and select target filter
Expand Down