Search in sources :

Example 26 with Order

use of com.emc.storageos.db.client.model.uimodels.Order in project coprhd-controller by CoprHD.

the class OrderService method getUserOrders.

/**
 * Gets the list of orders within a time range for current user
 *
 * @brief List Orders
 * @param startTimeStr start time of the query
 * @param endTimeStr  end time of the query
 * @param maxCount The max number of orders this API returns
 * @param ordersOnlyStr if ture, only returns orders info, other info such as OrderParameter
 *                   will not be returned
 * @return a list of orders
 * @throws DatabaseException when a DB error occurs
 */
@GET
@Path("/my-orders")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public OrderBulkRep getUserOrders(@DefaultValue("") @QueryParam(SearchConstants.START_TIME_PARAM) String startTimeStr, @DefaultValue("") @QueryParam(SearchConstants.END_TIME_PARAM) String endTimeStr, @DefaultValue("-1") @QueryParam(SearchConstants.ORDER_MAX_COUNT) String maxCount, @DefaultValue("false") @QueryParam(SearchConstants.ORDERS_ONLY) String ordersOnlyStr) throws DatabaseException {
    long startTimeInMS = getTime(startTimeStr, 0);
    long endTimeInMS = getTime(endTimeStr, System.currentTimeMillis());
    if (startTimeInMS > endTimeInMS) {
        throw APIException.badRequests.endTimeBeforeStartTime(startTimeStr, endTimeStr);
    }
    int max = Integer.parseInt(maxCount);
    boolean ordersOnly = Boolean.parseBoolean(ordersOnlyStr);
    log.info("start={} end={} max={}", startTimeInMS, endTimeInMS, max);
    StorageOSUser user = getUserFromContext();
    List<Order> orders = orderManager.getUserOrders(user, startTimeInMS, endTimeInMS, max);
    List<OrderRestRep> list = toOrders(orders, user, ordersOnly);
    OrderBulkRep rep = new OrderBulkRep(list);
    return rep;
}
Also used : Order(com.emc.storageos.db.client.model.uimodels.Order) StorageOSUser(com.emc.storageos.security.authentication.StorageOSUser) OrderBulkRep(com.emc.vipr.model.catalog.OrderBulkRep) OrderRestRep(com.emc.vipr.model.catalog.OrderRestRep) TimeSeriesConstraint(com.emc.storageos.db.client.constraint.TimeSeriesConstraint) Path(javax.ws.rs.Path) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET)

Example 27 with Order

use of com.emc.storageos.db.client.model.uimodels.Order in project coprhd-controller by CoprHD.

the class OrderService method getUserOrders.

/**
 * Gets the list of orders for current user
 *
 * @brief List Orders
 * @return a list of orders
 * @throws DatabaseException when a DB error occurs
 */
@GET
@Path("")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public OrderList getUserOrders() throws DatabaseException {
    StorageOSUser user = getUserFromContext();
    List<Order> orders = orderManager.getUserOrders(user, 0, System.currentTimeMillis(), -1);
    return toOrderList(orders);
}
Also used : Order(com.emc.storageos.db.client.model.uimodels.Order) StorageOSUser(com.emc.storageos.security.authentication.StorageOSUser) Path(javax.ws.rs.Path) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET)

Example 28 with Order

use of com.emc.storageos.db.client.model.uimodels.Order in project coprhd-controller by CoprHD.

the class OrderService method cancelOrder.

@POST
@Path("/{id}/cancel")
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Response cancelOrder(@PathParam("id") String id) {
    Order order = queryResource(uri(id));
    ArgValidator.checkEntity(order, uri(id), true);
    StorageOSUser user = getUserFromContext();
    verifyAuthorizedInTenantOrg(uri(order.getTenant()), user);
    if (!OrderStatus.valueOf(order.getOrderStatus()).equals(OrderStatus.SCHEDULED)) {
        throw APIException.badRequests.unexpectedValueForProperty("orderStatus", OrderStatus.SCHEDULED.toString(), order.getOrderStatus());
    }
    if (order.getScheduledEventId() != null) {
        ScheduledEvent scheduledEvent = client.scheduledEvents().findById(order.getScheduledEventId());
        if (scheduledEvent.getEventType().equals(ScheduledEventType.ONCE)) {
            scheduledEvent.setEventStatus(ScheduledEventStatus.CANCELLED);
            client.save(scheduledEvent);
        }
        order.setOrderStatus(OrderStatus.CANCELLED.name());
        client.save(order);
    } else {
        orderManager.cancelOrder(order);
    }
    return Response.ok().build();
}
Also used : Order(com.emc.storageos.db.client.model.uimodels.Order) ScheduledEvent(com.emc.storageos.db.client.model.uimodels.ScheduledEvent) StorageOSUser(com.emc.storageos.security.authentication.StorageOSUser) Path(javax.ws.rs.Path) POST(javax.ws.rs.POST) Consumes(javax.ws.rs.Consumes)

Example 29 with Order

use of com.emc.storageos.db.client.model.uimodels.Order in project coprhd-controller by CoprHD.

the class OrderService method getOrderExecutionState.

/**
 * Gets the order execution
 *
 * @param orderId the URN of an order
 * @brief Get Order Execution
 * @return an order execution
 * @throws DatabaseException when a DB error occurs
 */
@GET
@Path("/{id}/execution")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public ExecutionStateRestRep getOrderExecutionState(@PathParam("id") String orderId) throws DatabaseException {
    Order order = queryResource(uri(orderId));
    StorageOSUser user = getUserFromContext();
    verifyAuthorizedInTenantOrg(uri(order.getTenant()), user);
    ExecutionState executionState = orderManager.getOrderExecutionState(order.getExecutionStateId());
    return map(executionState);
}
Also used : Order(com.emc.storageos.db.client.model.uimodels.Order) ExecutionState(com.emc.storageos.db.client.model.uimodels.ExecutionState) StorageOSUser(com.emc.storageos.security.authentication.StorageOSUser) Path(javax.ws.rs.Path) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET)

Example 30 with Order

use of com.emc.storageos.db.client.model.uimodels.Order in project coprhd-controller by CoprHD.

the class OrderService method scheduleReoccurenceOrders.

private void scheduleReoccurenceOrders() throws Exception {
    lock = coordinatorClient.getLock(LOCK_NAME);
    try {
        lock.acquire();
        List<ScheduledEvent> scheduledEvents = dataManager.getAllReoccurrenceEvents();
        for (ScheduledEvent event : scheduledEvents) {
            if (event.getEventStatus() != ScheduledEventStatus.APPROVED) {
                log.debug("Skipping event {} which is not in APPROVED status.", event.getId());
                continue;
            }
            URI orderId = event.getLatestOrderId();
            Order order = getOrderById(orderId, false);
            if (!(OrderStatus.valueOf(order.getOrderStatus()).equals(OrderStatus.SUCCESS) || OrderStatus.valueOf(order.getOrderStatus()).equals(OrderStatus.PARTIAL_SUCCESS) || OrderStatus.valueOf(order.getOrderStatus()).equals(OrderStatus.ERROR) || OrderStatus.valueOf(order.getOrderStatus()).equals(OrderStatus.CANCELLED))) {
                log.debug("Skipping event {} whose latest order {} is not finished yet.", event.getId(), order.getId());
                continue;
            }
            log.info("Trying to schedule a new order for event {} : {}", event.getId(), ScheduleInfo.deserialize(org.apache.commons.codec.binary.Base64.decodeBase64(event.getScheduleInfo().getBytes(UTF_8))).toString());
            StorageOSUser user = StorageOSUser.deserialize(org.apache.commons.codec.binary.Base64.decodeBase64(event.getStorageOSUser().getBytes(UTF_8)));
            OrderCreateParam createParam = OrderCreateParam.deserialize(org.apache.commons.codec.binary.Base64.decodeBase64(event.getOrderCreationParam().getBytes(UTF_8)));
            ScheduleInfo scheduleInfo = ScheduleInfo.deserialize(org.apache.commons.codec.binary.Base64.decodeBase64(event.getScheduleInfo().getBytes(UTF_8)));
            Calendar nextScheduledTime = ScheduleTimeHelper.getNextScheduledTime(order.getScheduledTime(), scheduleInfo);
            int retry = 0;
            if (order.getExecutionWindowId() != null && !order.getExecutionWindowId().getURI().equals(ExecutionWindow.NEXT)) {
                ExecutionWindow window = client.executionWindows().findById(order.getExecutionWindowId().getURI());
                if (window != null) {
                    ExecutionWindowHelper helper = new ExecutionWindowHelper(window);
                    if (nextScheduledTime != null && !helper.isActive(nextScheduledTime)) {
                        log.warn("Execution window {} might be changed after the event is scheduled.", order.getExecutionWindowId().getURI());
                        log.warn("Otherwise it is a HOURLY scheduled event");
                        do {
                            nextScheduledTime = ScheduleTimeHelper.getNextScheduledTime(nextScheduledTime, scheduleInfo);
                            retry++;
                        } while (nextScheduledTime != null && !helper.isActive(nextScheduledTime) && retry < ScheduleTimeHelper.SCHEDULE_TIME_RETRY_THRESHOLD);
                        if (retry == ScheduleTimeHelper.SCHEDULE_TIME_RETRY_THRESHOLD) {
                            log.error("Failed to find next scheduled time that match with {}", order.getExecutionWindowId().getURI());
                            nextScheduledTime = null;
                        }
                    }
                } else {
                    log.error("Execution window {} does not exist.", order.getExecutionWindowId().getURI());
                }
            }
            if (nextScheduledTime == null) {
                log.info("Scheduled event {} should be set finished.", event.getId());
                event.setEventStatus(ScheduledEventStatus.FINISHED);
            } else {
                createParam.setScheduledTime(ScheduleTimeHelper.convertCalendarToStr(nextScheduledTime));
                order = createNewOrder(user, uri(order.getTenant()), createParam);
                orderManager.processOrder(order);
                event.setLatestOrderId(order.getId());
                log.info("Scheduled an new order {} for event {} ...", order.getId(), event.getId());
            }
            client.save(event);
        }
    } catch (Exception e) {
        log.error("Failed to schedule next orders", e);
    } finally {
        try {
            lock.release();
        } catch (Exception e) {
            log.error("Error releasing order scheduler lock", e);
        }
    }
}
Also used : Order(com.emc.storageos.db.client.model.uimodels.Order) ScheduledEvent(com.emc.storageos.db.client.model.uimodels.ScheduledEvent) ExecutionWindowHelper(com.emc.storageos.db.client.util.ExecutionWindowHelper) ExecutionWindow(com.emc.storageos.db.client.model.uimodels.ExecutionWindow) StorageOSUser(com.emc.storageos.security.authentication.StorageOSUser) Calendar(java.util.Calendar) OrderCreateParam(com.emc.vipr.model.catalog.OrderCreateParam) URI(java.net.URI) ScheduleInfo(com.emc.vipr.model.catalog.ScheduleInfo) TimeSeriesConstraint(com.emc.storageos.db.client.constraint.TimeSeriesConstraint) InvalidParameterException(java.security.InvalidParameterException) WebApplicationException(javax.ws.rs.WebApplicationException) URISyntaxException(java.net.URISyntaxException) APIException(com.emc.storageos.svcs.errorhandling.resources.APIException) DatabaseException(com.emc.storageos.db.exceptions.DatabaseException)

Aggregations

Order (com.emc.storageos.db.client.model.uimodels.Order)53 Test (org.junit.Test)15 StorageOSUser (com.emc.storageos.security.authentication.StorageOSUser)12 URI (java.net.URI)12 Path (javax.ws.rs.Path)11 Produces (javax.ws.rs.Produces)9 DatabaseException (com.emc.storageos.db.exceptions.DatabaseException)8 OrderParameter (com.emc.storageos.db.client.model.uimodels.OrderParameter)7 GET (javax.ws.rs.GET)7 AbstractExecutionService (com.emc.sa.engine.service.AbstractExecutionService)6 ExecutionService (com.emc.sa.engine.service.ExecutionService)6 NamedURI (com.emc.storageos.db.client.model.NamedURI)6 ServiceNotFoundException (com.emc.sa.engine.service.ServiceNotFoundException)5 Date (java.util.Date)5 ModelClient (com.emc.sa.model.dao.ModelClient)4 TimeSeriesConstraint (com.emc.storageos.db.client.constraint.TimeSeriesConstraint)4 ExecutionState (com.emc.storageos.db.client.model.uimodels.ExecutionState)4 Consumes (javax.ws.rs.Consumes)4 BaseModelTest (com.emc.sa.model.BaseModelTest)3 NamedElementQueryResultList (com.emc.storageos.db.client.constraint.NamedElementQueryResultList)3