package com.intuit.tank.api.service.v1.cloud;
/*
* #%L
* Cloud Rest API
* %%
* Copyright (C) 2011 - 2015 Intuit Inc.
* %%
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
* #L%
*/
import java.util.List;
import java.util.Set;
import javax.annotation.Nonnull;
import javax.ws.rs.Consumes;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.codehaus.enunciate.modules.jersey.ExternallyManagedLifecycle;
import com.intuit.tank.api.model.v1.cloud.CloudVmStatus;
import com.intuit.tank.api.model.v1.cloud.CloudVmStatusContainer;
/**
* Copyright 2011 Intuit Inc. All Rights Reserved
*/
/**
* ProjectService
*
* @author dangleton
*
*/
@Path(CloudService.SERVICE_RELATIVE_PATH)
@ExternallyManagedLifecycle
public interface CloudService {
public static final String SERVICE_RELATIVE_PATH = "/v1/cloud-service";
public static final String METHOD_PING = "/ping";
public static final String METHOD_USER_ID_FROM_RANGE = "/user-id-from-range";
public static final String METHOD_INSTANCE_STATUS = "/instance/status";
public static final String METHOD_JOB_STATUS = "/job/status";
public static final String METHOD_REPORTING_START = "/reporting/start";
public static final String METHOD_REPORTING_STOP = "/reporting/stop";
public static final String METHOD_REPORTING_STATUS = "/reporting/status";
public static final String METHOD_REPORTING_SUMMARY_STATUS = "/reporting/summary/status";
public static final String METHOD_KILL_INSTANCE = "/instance/kill";
public static final String METHOD_KILL_JOB = "/job/kill";
public static final String METHOD_START_JOB = "/job/start";
public static final String METHOD_STOP_INSTANCE = "/agent/stop";
public static final String METHOD_STOP_JOB = "/job/stop";
public static final String METHOD_PAUSE_INSTANCE = "/agent/pause";
public static final String METHOD_PAUSE_JOB = "/job/pause";
public static final String METHOD_RESTART_INSTANCE = "/agent/restart";
public static final String METHOD_RESTART_JOB = "/job/restart";
public static final String METHOD_PAUSE_RAMP_JOB = "/job/ramp/pause";
public static final String METHOD_PAUSE_RAMP_INSTANCE = "/instance/ramp/pause";
public static final String METHOD_RESUME_RAMP_JOB = "/job/ramp/resume";
public static final String METHOD_RESUME_RAMP_INSTANCE = "/instance/ramp/resume";
public static final String METHOD_GET_COST = "/costing/custom";
public static final String METHOD_GET_COST_PREDEFINED = "/costing/predefined";
/**
* Test method to test if the service is up.
*
* @return non-null String value.
*/
@Path(CloudService.METHOD_PING)
@GET
@Nonnull
public String ping();
/**
* Gets a userId form the range specified.
*
* @param jobId
* the jobId of the range
* @param minValue
* the minValue of the range
* @param maxValue
* the max value of the range
* @return the value or throw an exception if range is exhausted.
*/
@Path(CloudService.METHOD_USER_ID_FROM_RANGE + "/{jobId}/{minValue}/{maxValue}")
@GET
@Produces({ MediaType.TEXT_PLAIN })
public String userIdFromRange(@PathParam("jobId") String jobId, @PathParam("minValue") int minValue,
@PathParam("maxValue") int maxValue);
/**
*
* @return
*/
@Path(CloudService.METHOD_INSTANCE_STATUS + "/{instanceId}")
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response getVmStatus(@PathParam("instanceId") String instanceId);
/**
*
* @return one of "Complete", "Gathering", or "NoData"
*/
@Path(CloudService.METHOD_REPORTING_SUMMARY_STATUS + "/{jobId}")
@GET
@Produces({ MediaType.TEXT_PLAIN })
public Response getSummaryStatus(@PathParam("jobId") String jobId);
/**
*
* @param jobId
* @return
*/
@Path(CloudService.METHOD_JOB_STATUS + "/{jobId}")
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response getVmStatusForJob(@PathParam("jobId") String jobId);
/**
*
* @param instanceId
* @param status
*/
@Path(CloudService.METHOD_INSTANCE_STATUS + "/{instanceId}")
@PUT
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public void setVmStatus(@Nonnull @PathParam("instanceId") String instanceId, CloudVmStatus status);
/**
*
* @param instanceId
*/
@Path(CloudService.METHOD_KILL_INSTANCE + "/{instanceId}")
@POST
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public void killInstance(@Nonnull @PathParam("instanceId") String instanceId);
/**
*
* @param jobId
*/
@Path(CloudService.METHOD_KILL_JOB + "/{jobId}")
@POST
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public void killJob(@Nonnull @PathParam("jobId") String jobId);
/**
* Kill All Jobs currently running
*
* @return String value.
*/
@Path(CloudService.METHOD_KILL_JOB)
@GET
@Produces({MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN, MediaType.APPLICATION_XML})
public Set<CloudVmStatusContainer> killAllJobs();
/**
* Starts a job
*
* @param jobId
*/
@Path(CloudService.METHOD_START_JOB + "/{jobId}")
@POST
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public String startJob(@Nonnull @PathParam("jobId") String jobId);
/**
*
* @param instanceIds
*/
@Path(CloudService.METHOD_KILL_INSTANCE)
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@POST
public void killInstances(List<String> instanceIds);
/**
* Stop All Jobs currently running
*
* @return String value.
*/
@Path(CloudService.METHOD_STOP_JOB)
@GET
@Produces({MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN, MediaType.APPLICATION_XML})
public Set<CloudVmStatusContainer> stopAllJobs();
/**
*
* @param jobId
*/
@Path(CloudService.METHOD_STOP_JOB + "/{jobId}")
@POST
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public void stopJob(@Nonnull @PathParam("jobId") String jobId);
/**
*
* @param instanceId
*/
@Path(CloudService.METHOD_STOP_INSTANCE + "/{instanceId}")
@POST
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public void stopAgent(@Nonnull @PathParam("instanceId") String instanceId);
/**
*
* @param instanceIds
*/
@Path(CloudService.METHOD_STOP_INSTANCE)
@POST
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public void stopAgents(List<String> instanceIds);
/**
*
* @param jobId
*/
@Path(CloudService.METHOD_PAUSE_JOB + "/{jobId}")
@POST
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public void pauseJob(@Nonnull @PathParam("jobId") String jobId);
/**
*
* @param instanceId
*/
@Path(CloudService.METHOD_PAUSE_INSTANCE + "/{instanceId}")
@POST
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public void pauseAgent(@Nonnull @PathParam("instanceId") String instanceId);
/**
*
* @param group
*/
@Path(CloudService.METHOD_PAUSE_INSTANCE)
@POST
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public void pauseAgents(List<String> instanceIds);
/**
*
* @param jobId
*/
@Path(CloudService.METHOD_RESTART_JOB + "/{jobId}")
@POST
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public void restartJob(@Nonnull @PathParam("jobId") String jobId);
/**
*
* @param instanceId
*/
@Path(CloudService.METHOD_RESTART_INSTANCE + "/{instanceId}")
@POST
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public void restartAgent(@Nonnull @PathParam("instanceId") String instanceId);
/**
*
* @param group
*/
@Path(CloudService.METHOD_RESTART_INSTANCE)
@POST
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public void restartAgents(List<String> instanceIds);
/**
*
* @param instanceId
*/
@Path(CloudService.METHOD_PAUSE_RAMP_INSTANCE + "/{instanceId}")
@POST
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public void pauseRampInstance(@Nonnull @PathParam("instanceId") String instanceId);
/**
*
* @param jobId
*/
@Path(CloudService.METHOD_PAUSE_RAMP_JOB + "/{jobId}")
@POST
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public void pauseRampJob(@Nonnull @PathParam("jobId") String jobId);
/**
*
* @param instanceIds
*/
@Path(CloudService.METHOD_PAUSE_RAMP_INSTANCE)
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@POST
public void pauseRampInstances(List<String> instanceIds);
/**
*
* @param instanceId
*/
@Path(CloudService.METHOD_RESUME_RAMP_INSTANCE + "/{instanceId}")
@POST
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public void resumeRampInstance(@Nonnull @PathParam("instanceId") String instanceId);
/**
*
* @param jobId
*/
@Path(CloudService.METHOD_RESUME_RAMP_JOB + "/{jobId}")
@POST
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public void resumeRampJob(@Nonnull @PathParam("jobId") String jobId);
/**
*
* @param instanceIds
*/
@Path(CloudService.METHOD_RESUME_RAMP_INSTANCE)
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@POST
public void resumeRampInstances(List<String> instanceIds);
/**
*
* @param instanceIds
*/
@Path(CloudService.METHOD_GET_COST)
@Produces({ MediaType.TEXT_HTML })
@GET
public String getCostingForDates(@QueryParam("startDate") String startDate, @QueryParam("endDate") String endDate);
/**
*
* @param instanceIds
*/
@Path(CloudService.METHOD_GET_COST_PREDEFINED)
@Produces({ MediaType.TEXT_HTML })
@GET
public String getCostingForDates(
@QueryParam("timePeriod") @DefaultValue("aws-portal-current-bill-period") String timePeriod);
}