All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hubspot.singularity.resources.PriorityResource Maven / Gradle / Ivy

package com.hubspot.singularity.resources;

import static com.hubspot.singularity.WebExceptions.checkBadRequest;

import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import com.google.common.base.Optional;
import com.google.inject.Inject;
import com.hubspot.mesos.JavaUtils;
import com.hubspot.singularity.SingularityDeleteResult;
import com.hubspot.singularity.SingularityPriorityFreezeParent;
import com.hubspot.singularity.SingularityService;
import com.hubspot.singularity.SingularityUser;
import com.hubspot.singularity.api.SingularityPriorityFreeze;
import com.hubspot.singularity.auth.SingularityAuthorizationHelper;
import com.hubspot.singularity.data.PriorityManager;
import com.hubspot.singularity.data.SingularityValidator;
import com.wordnik.swagger.annotations.Api;
import com.wordnik.swagger.annotations.ApiOperation;
import com.wordnik.swagger.annotations.ApiResponse;
import com.wordnik.swagger.annotations.ApiResponses;

@Path(PriorityResource.PATH)
@Produces({ MediaType.APPLICATION_JSON })
@Api( description="Manages whether or not to schedule tasks based on their priority levels.", value=RackResource.PATH )
public class PriorityResource {
    public static final String PATH = SingularityService.API_BASE_PATH + "/priority";

    private final Optional user;
    private final SingularityAuthorizationHelper authorizationHelper;
    private final SingularityValidator singularityValidator;
    private final PriorityManager priorityManager;

    @Inject
    public PriorityResource(Optional user, SingularityAuthorizationHelper authorizationHelper, SingularityValidator singularityValidator, PriorityManager priorityManager) {
        this.user = user;
        this.authorizationHelper = authorizationHelper;
        this.singularityValidator = singularityValidator;
        this.priorityManager = priorityManager;
    }

    @GET
    @Path("/freeze")
    @ApiOperation(value="Get information about the active priority freeze.", response=SingularityPriorityFreezeParent.class)
    @ApiResponses({
        @ApiResponse(code=200, message="The active priority freeze."),
        @ApiResponse(code=404, message="There was no active priority freeze.")
    })
    public Optional getActivePriorityFreeze() {
        return priorityManager.getActivePriorityFreeze();
    }

    @DELETE
    @Path("/freeze")
    @ApiOperation("Stops the active priority freeze.")
    @ApiResponses({
        @ApiResponse(code=202, message="The active priority freeze was deleted."),
        @ApiResponse(code=400, message="There was no active priority freeze to delete.")
    })
    public void deleteActivePriorityFreeze() {
        authorizationHelper.checkAdminAuthorization(user);

        final SingularityDeleteResult deleteResult = priorityManager.deleteActivePriorityFreeze();

        checkBadRequest(deleteResult == SingularityDeleteResult.DELETED, "No active priority freeze to delete.");

        priorityManager.clearPriorityKill();
    }

    @POST
    @Path("/freeze")
    @ApiOperation(value="Stop scheduling tasks below a certain priority level.", response=SingularityPriorityFreezeParent.class)
    @ApiResponses({
        @ApiResponse(code=200, message="The priority freeze request was accepted."),
        @ApiResponse(code=400, message="There was a validation error with the priority freeze request.")
    })
    public SingularityPriorityFreezeParent createPriorityFreeze(SingularityPriorityFreeze priorityFreezeRequest) {
        authorizationHelper.checkAdminAuthorization(user);
        priorityFreezeRequest = singularityValidator.checkSingularityPriorityFreeze(priorityFreezeRequest);

        final SingularityPriorityFreezeParent priorityFreezeRequestParent = new SingularityPriorityFreezeParent(priorityFreezeRequest, System.currentTimeMillis(), JavaUtils.getUserEmail(user));

        priorityManager.createPriorityFreeze(priorityFreezeRequestParent);

        if (priorityFreezeRequest.isKillTasks()) {
            priorityManager.setPriorityKill();
        }

        return priorityFreezeRequestParent;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy