package org.openstack.atlas.api.resources; import org.openstack.atlas.service.domain.entities.Usage; import org.openstack.atlas.api.helpers.ResponseFactory; import org.openstack.atlas.api.mapper.UsageMapper; import org.openstack.atlas.api.resources.providers.CommonDependencyProvider; import org.openstack.atlas.util.common.exceptions.ConverterException; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; import java.util.Calendar; import java.util.List; import static org.openstack.atlas.service.domain.util.Constants.NUM_DAYS_OF_USAGE; import static org.openstack.atlas.util.converters.DateTimeConverters.isoTocal; public class UsageResource extends CommonDependencyProvider { private int loadBalancerId; private int accountId; @GET public Response retrieveUsage(@QueryParam("startTime") String startTimeParam, @QueryParam("endTime") String endTimeParam) { Calendar startTime; Calendar endTime; List<Usage> usages; final String badRequestMessage = "Date parameters must follow ISO-8601 format"; if (endTimeParam == null) { endTime = Calendar.getInstance(); // Default to right now } else { try { endTime = isoTocal(endTimeParam); } catch (ConverterException ex) { return ResponseFactory.getResponseWithStatus(Response.Status.BAD_REQUEST, badRequestMessage); } } if (startTimeParam == null) { startTime = (Calendar) endTime.clone(); startTime.add(Calendar.DAY_OF_MONTH, -NUM_DAYS_OF_USAGE); // default to NUM_DAYS_OF_USAGE days ago } else { try { startTime = isoTocal(startTimeParam); } catch (ConverterException ex) { return ResponseFactory.getResponseWithStatus(Response.Status.BAD_REQUEST, badRequestMessage); } } if ((startTimeParam != null && endTimeParam != null) && startTime.compareTo(endTime) > 0) { return ResponseFactory.getResponseWithStatus(Response.Status.BAD_REQUEST, "Must specify an earlier startTime than endTime."); } try { usages = usageService.getUsageByAccountIdandLbId(accountId, loadBalancerId, startTime, endTime); return Response.status(200).entity(UsageMapper.toRestApiServiceUsage(usages)).build(); } catch (Exception e) { return ResponseFactory.getErrorResponse(e, null, null); } } @GET @Path("current") public Response retrieveCurrentUsage() { Calendar now = Calendar.getInstance(); Calendar nowYesterday = (Calendar) now.clone(); nowYesterday.add(Calendar.DAY_OF_MONTH, -1); try { List<Usage> cusage = usageService.getUsageByAccountIdandLbId(accountId, loadBalancerId, nowYesterday, now); return Response.status(200).entity(UsageMapper.toRestApiCurrentUsage(cusage)).build(); } catch (Exception e) { return ResponseFactory.getErrorResponse(e, null, null); } } public int getLoadBalancerId() { return loadBalancerId; } public void setLoadBalancerId(int loadBalancerId) { this.loadBalancerId = loadBalancerId; } public int getAccountId() { return accountId; } public void setAccountId(int accountId) { this.accountId = accountId; } }