@Override public void finished(HttpResponder responder) { try { os.close(); responder.sendJson(HttpResponseStatus.OK, resourceMeta, ResourceMeta.class, gson); LOG.debug("finished uploading resource."); } catch (Exception e) { LOG.error("Error finishing upload of resource {} of type {} for account {}.", resourceMeta, resourceType, account, e); responder.sendError(HttpResponseStatus.INTERNAL_SERVER_ERROR, e.getMessage()); } }
private <T> void respondToGetEntity(Object entity, String entityType, String entityId, Class<T> entityClass, HttpResponder responder) { if (entity == null) { responder.sendError(HttpResponseStatus.NOT_FOUND, Joiner.on(" ").join(entityType, entityId, " not found.")); } else { responder.sendJson(HttpResponseStatus.OK, entity, entityClass, gson); } }
@Override public void chunk(ChannelBuffer request, HttpResponder responder) { try { request.readBytes(os, request.readableBytes()); } catch (IOException e) { LOG.error("Error during upload of version {} of resource {} for account {}.", version, name, account, e); responder.sendError(HttpResponseStatus.INTERNAL_SERVER_ERROR, e.getMessage()); } }
private void deleteResource(HttpResponder responder, Account account, PluginType type, String pluginName, String resourceType, String resourceName, String versionStr) { ResourceType pluginResourceType = new ResourceType(type, pluginName, resourceType); try { validateTypeExists(account, pluginResourceType); int version = Integer.parseInt(versionStr); resourceService.delete(account, pluginResourceType, resourceName, version); responder.sendStatus(HttpResponseStatus.OK); } catch (NumberFormatException e) { responder.sendError(HttpResponseStatus.BAD_REQUEST, "Invalid version " + versionStr); } catch (IllegalStateException e) { responder.sendError(HttpResponseStatus.CONFLICT, "Resource not in a deletable state."); } catch (IOException e) { LOG.error("Exception deleting resource version.", e); responder.sendError(HttpResponseStatus.INTERNAL_SERVER_ERROR, "Error deleting resource version."); } catch (MissingEntityException e) { responder.sendError(HttpResponseStatus.NOT_FOUND, e.getMessage()); } }
private <T> T getEntityFromRequest(HttpRequest request, HttpResponder responder, Type tClass) { T result = null; try { Reader reader = new InputStreamReader(new ChannelBufferInputStream(request.getContent()), Charsets.UTF_8); try { result = gson.fromJson(reader, tClass); } finally { try { reader.close(); } catch (IOException e) { LOG.warn("Exception while closing request reader", e); } } } catch (IllegalArgumentException e) { responder.sendError(HttpResponseStatus.BAD_REQUEST, "invalid input: " + e.getMessage()); } catch (Exception e) { responder.sendError(HttpResponseStatus.BAD_REQUEST, "invalid input"); } return result; }
private <T> T getEntityFromRequest(HttpRequest request, HttpResponder responder, Type tClass) { T result = null; try { Reader reader = new InputStreamReader(new ChannelBufferInputStream(request.getContent()), Charsets.UTF_8); try { result = gson.fromJson(reader, tClass); } finally { try { reader.close(); } catch (IOException e) { LOG.warn("Exception while closing request reader", e); } } } catch (IllegalArgumentException e) { responder.sendError(HttpResponseStatus.BAD_REQUEST, "invalid input: " + e.getMessage()); } catch (Exception e) { responder.sendError(HttpResponseStatus.BAD_REQUEST, "invalid input"); } return result; }
private <T> T getEntityFromRequest(HttpRequest request, HttpResponder responder, Type tClass) { T result = null; try { Reader reader = new InputStreamReader(new ChannelBufferInputStream(request.getContent()), Charsets.UTF_8); try { result = gson.fromJson(reader, tClass); } finally { try { reader.close(); } catch (IOException e) { LOG.warn("Exception while closing request reader", e); } } } catch (IllegalArgumentException e) { responder.sendError(HttpResponseStatus.BAD_REQUEST, "invalid input: " + e.getMessage()); } catch (Exception e) { responder.sendError(HttpResponseStatus.BAD_REQUEST, "invalid input"); } return result; } }
private void recallResource(HttpResponder responder, Account account, PluginType type, String pluginName, String resourceType, String resourceName, String versionStr) { ResourceType pluginResourceType = new ResourceType(type, pluginName, resourceType); try { int version = Integer.parseInt(versionStr); validateTypeExists(account, pluginResourceType); resourceService.recall(account, pluginResourceType, resourceName, version); responder.sendStatus(HttpResponseStatus.OK); } catch (NumberFormatException e) { responder.sendError(HttpResponseStatus.BAD_REQUEST, "Invalid version " + versionStr); } catch (IOException e) { LOG.error("Exception recalling resource.", e); responder.sendError(HttpResponseStatus.INTERNAL_SERVER_ERROR, "Error recalling resource version."); } catch (MissingEntityException e) { responder.sendError(HttpResponseStatus.NOT_FOUND, type.name().toLowerCase() + " resource not found."); } }
private void stageResource(HttpResponder responder, Account account, PluginType type, String pluginName, String resourceType, String resourceName, String versionStr) { ResourceType pluginResourceType = new ResourceType(type, pluginName, resourceType); try { int version = Integer.parseInt(versionStr); validateTypeExists(account, pluginResourceType); resourceService.stage(account, pluginResourceType, resourceName, version); responder.sendStatus(HttpResponseStatus.OK); } catch (NumberFormatException e) { responder.sendError(HttpResponseStatus.BAD_REQUEST, "Invalid version " + versionStr); } catch (IOException e) { LOG.error("Exception staging resource.", e); responder.sendError(HttpResponseStatus.INTERNAL_SERVER_ERROR, "Error staging resource version."); } catch (MissingEntityException e) { responder.sendError(HttpResponseStatus.NOT_FOUND, type.name().toLowerCase() + " resource not found."); } }
private void deleteResource(HttpResponder responder, Account account, PluginType type, String pluginName, String resourceType, String resourceName) { ResourceType pluginResourceType = new ResourceType(type, pluginName, resourceType); try { validateTypeExists(account, pluginResourceType); resourceService.delete(account, pluginResourceType, resourceName); responder.sendStatus(HttpResponseStatus.OK); } catch (IllegalStateException e) { responder.sendError(HttpResponseStatus.CONFLICT, "Resource not in a deletable state."); } catch (IOException e) { LOG.error("Exception deleting all versions of resource.", e); responder.sendError(HttpResponseStatus.INTERNAL_SERVER_ERROR, "Error deleting all versions of resource."); } catch (MissingEntityException e) { responder.sendError(HttpResponseStatus.NOT_FOUND, e.getMessage()); } }
@Override public void handleError(Throwable t) { LOG.error("Error uploading version {} of resource {} of type {} for account {}.", version, name, resourceType, account, t); try { os.close(); // deletion flags the entry in the database as deleted metaStoreService.getResourceTypeView(account, resourceType).delete(name, version); // dont need the file in the plugin store if there was an error so delete it pluginStore.deleteResource(account, resourceType, name, version); responder.sendError(HttpResponseStatus.INTERNAL_SERVER_ERROR, t.getCause().getMessage()); } catch (IOException e) { LOG.error("Error uploading resource {} of type {} for account {}.", resourceMeta, resourceType, account, e); } } };
@DELETE @Path("/{node-id}") public void deleteNode(HttpRequest request, HttpResponder responder, @PathParam("node-id") String nodeId) { Account account = getAndAuthenticateAccount(request, responder); if (account == null) { return; } try { nodeStoreService.getView(account).deleteNode(nodeId); } catch (IllegalAccessException e) { responder.sendError(HttpResponseStatus.FORBIDDEN, "Exception deleting node."); } catch (IOException e) { responder.sendError(HttpResponseStatus.INTERNAL_SERVER_ERROR, "Exception deleting node."); } responder.sendStatus(HttpResponseStatus.NO_CONTENT); } }
private BodyConsumer uploadResource(HttpResponder responder, Account account, PluginType type, String pluginName, String resourceType, String resourceName) { ResourceType pluginResourceType = new ResourceType(type, pluginName, resourceType); try { validateTypeExists(account, pluginResourceType); return resourceService.createResourceBodyConsumer(account, pluginResourceType, resourceName, responder); } catch (IOException e) { LOG.error("Exception uploading resource.", e); responder.sendError(HttpResponseStatus.INTERNAL_SERVER_ERROR, "Error uploading resource"); return null; } catch (MissingEntityException e) { responder.sendError(HttpResponseStatus.NOT_FOUND, e.getMessage()); return null; } }
private void getResources(HttpRequest request, HttpResponder responder, Account account, PluginType type, String pluginName, String resourceType) { ResourceType pluginResourceType = new ResourceType(type, pluginName, resourceType); try { validateTypeExists(account, pluginResourceType); ResourceStatus statusFilter = getStatusParam(request); responder.sendJson(HttpResponseStatus.OK, resourceService.getAll(account, pluginResourceType, statusFilter), new TypeToken<Map<String, Set<ResourceMeta>>>() { }.getType(), gson); } catch (IllegalArgumentException e) { responder.sendError(HttpResponseStatus.BAD_REQUEST, "invalid status filter."); } catch (IOException e) { LOG.error("Exception getting resources.", e); responder.sendError(HttpResponseStatus.INTERNAL_SERVER_ERROR, "Error getting resources."); } catch (MissingEntityException e) { responder.sendError(HttpResponseStatus.NOT_FOUND, e.getMessage()); } }
private void getResources(HttpRequest request, HttpResponder responder, Account account, PluginType type, String pluginName, String resourceType, String resourceName) { ResourceType pluginResourceType = new ResourceType(type, pluginName, resourceType); try { validateTypeExists(account, pluginResourceType); ResourceStatus statusFilter = getStatusParam(request); responder.sendJson(HttpResponseStatus.OK, resourceService.getAll(account, pluginResourceType, resourceName, statusFilter), new TypeToken<Set<ResourceMeta>>() { }.getType(), gson); } catch (IllegalArgumentException e) { responder.sendError(HttpResponseStatus.BAD_REQUEST, "invalid status filter."); } catch (IOException e) { LOG.error("Exception getting resources.", e); responder.sendError(HttpResponseStatus.INTERNAL_SERVER_ERROR, "Error getting resources."); } catch (MissingEntityException e) { responder.sendError(HttpResponseStatus.NOT_FOUND, e.getMessage()); } }
/** * Get all nodes visible to the user. * @param request Request for clusters. * @param responder Responder for sending the response. */ @GET public void getNodes(HttpRequest request, HttpResponder responder) { Account account = getAndAuthenticateAccount(request, responder); if (account == null) { return; } Set<Node> nodes; try { nodes = nodeStoreService.getView(account).getAllNodes(); } catch (IOException e) { responder.sendError(HttpResponseStatus.INTERNAL_SERVER_ERROR, "Exception getting nodes."); return; } responder.sendJson(HttpResponseStatus.OK, nodes); }
/** * Get all {@link ImageType}s readable by the user. * * @param request The request for image types. * @param responder Responder for sending the response. */ @GET @Path("/imagetypes") public void getImageType(HttpRequest request, HttpResponder responder) { Account account = getAndAuthenticateAccount(request, responder); if (account == null) { return; } try { responder.sendJson(HttpResponseStatus.OK, entityStoreService.getView(account).getAllImageTypes(), new TypeToken<Collection<ImageType>>() { }.getType(), gson); } catch (IOException e) { responder.sendError(HttpResponseStatus.INTERNAL_SERVER_ERROR, "Exception getting image types"); } }
/** * Get all {@link HardwareType}s readable by the user. * * @param request The request for hardware types. * @param responder Responder for sending the response. */ @GET @Path("/hardwaretypes") public void getHardwareType(HttpRequest request, HttpResponder responder) { Account account = getAndAuthenticateAccount(request, responder); if (account == null) { return; } try { responder.sendJson(HttpResponseStatus.OK, entityStoreService.getView(account).getAllHardwareTypes(), new TypeToken<Collection<HardwareType>>() { }.getType(), gson); } catch (IOException e) { responder.sendError(HttpResponseStatus.INTERNAL_SERVER_ERROR, "Exception getting hardware types"); } }
/** * Get all {@link Service}s readable by the user. * * @param request The request for services. * @param responder Responder for sending the response. */ @GET @Path("/services") public void getServices(HttpRequest request, HttpResponder responder) { Account account = getAndAuthenticateAccount(request, responder); if (account == null) { return; } try { responder.sendJson(HttpResponseStatus.OK, entityStoreService.getView(account).getAllServices(), new TypeToken<Collection<Service>>() { }.getType(), gson); } catch (IOException e) { responder.sendError(HttpResponseStatus.INTERNAL_SERVER_ERROR, "Exception getting services"); } }
/** * Get all {@link ClusterTemplate}s readable by the user. * * @param request The request for cluster templates. * @param responder Responder for sending the response. */ @GET @Path("/clustertemplates") public void getClusterTemplates(HttpRequest request, HttpResponder responder) { Account account = getAndAuthenticateAccount(request, responder); if (account == null) { return; } try { responder.sendJson(HttpResponseStatus.OK, entityStoreService.getView(account).getAllClusterTemplates(), new TypeToken<Collection<ClusterTemplate>>() { }.getType(), gson); } catch (IOException e) { responder.sendError(HttpResponseStatus.INTERNAL_SERVER_ERROR, "Exception getting cluster templates"); } }