public static void checkSlotVersion(SlotStatus slotStatus, String expectedSlotVersion) { Preconditions.checkNotNull(slotStatus, "slotStatus is null"); if (expectedSlotVersion == null) { return; } if (!expectedSlotVersion.equals(slotStatus.getVersion())) { throw new VersionConflictException(GALAXY_SLOT_VERSION_HEADER, slotStatus.getVersion()); } }
public static String createSlotsVersion(Iterable<SlotStatus> slots) { Preconditions.checkNotNull(slots, "slots is null"); // canonicalize slot order Map<UUID, String> slotVersions = new TreeMap<UUID, String>(); for (SlotStatus slot : slots) { slotVersions.put(slot.getId(), slot.getVersion()); } return DigestUtils.md5Hex(slotVersions.values().toString()); }
public static String createAgentVersion(String agentId, AgentLifecycleState state, Iterable<SlotStatus> slots, Map<String, Integer> resources) { List<Object> parts = new ArrayList<Object>(); parts.add(agentId); parts.add(state); // canonicalize slot order Map<UUID, String> slotVersions = new TreeMap<UUID, String>(); for (SlotStatus slot : slots) { slotVersions.put(slot.getId(), slot.getVersion()); } parts.addAll(slotVersions.values()); // canonicalize resources parts.add(Joiner.on("--").withKeyValueSeparator("=").join(ImmutableSortedMap.copyOf(resources))); String data = Joiner.on("||").useForNull("--NULL--").join(parts); return DigestUtils.md5Hex(data); }
@Path("{slotId}") @GET @Produces(MediaType.APPLICATION_JSON) public Response getSlotStatus(@PathParam("slotId") UUID slotId, @Context UriInfo uriInfo) { Preconditions.checkNotNull(slotId, "slotId must not be null"); Slot slot = agent.getSlot(slotId); if (slot == null) { return Response.status(Response.Status.NOT_FOUND).build(); } SlotStatus slotStatus = slot.status(); return Response.ok(SlotStatusRepresentation.from(slotStatus)) .header(GALAXY_AGENT_VERSION_HEADER, agent.getAgentStatus().getVersion()) .header(GALAXY_SLOT_VERSION_HEADER, slotStatus.getVersion()) .build(); }
@POST @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public Response installSlot(@HeaderParam(GALAXY_AGENT_VERSION_HEADER) String agentVersion, InstallationRepresentation installation, @Context UriInfo uriInfo) { Preconditions.checkNotNull(installation, "installation must not be null"); checkAgentVersion(agent.getAgentStatus(), agentVersion); SlotStatus slotStatus = agent.install(installation.toInstallation()); return Response .created(getSelfUri(slotStatus.getId(), uriInfo.getBaseUri())) .entity(SlotStatusRepresentation.from(slotStatus)) .header(GALAXY_AGENT_VERSION_HEADER, agent.getAgentStatus().getVersion()) .header(GALAXY_SLOT_VERSION_HEADER, slotStatus.getVersion()) .build(); }
@Path("{slotId}") @DELETE public Response terminateSlot(@HeaderParam(GALAXY_AGENT_VERSION_HEADER) String agentVersion, @HeaderParam(GALAXY_SLOT_VERSION_HEADER) String slotVersion, @PathParam("slotId") UUID slotId) { Preconditions.checkNotNull(slotId, "slotId must not be null"); Slot slot = agent.getSlot(slotId); if (slot == null) { return Response.status(Response.Status.NOT_FOUND).build(); } checkAgentVersion(agent.getAgentStatus(), agentVersion); checkSlotVersion(slot.status(), slotVersion); SlotStatus slotStatus = agent.terminateSlot(slotId); if (slotStatus == null) { return Response.status(Response.Status.NOT_FOUND).build(); } return Response.ok(SlotStatusRepresentation.from(slotStatus)) .header(GALAXY_AGENT_VERSION_HEADER, agent.getAgentStatus().getVersion()) .header(GALAXY_SLOT_VERSION_HEADER, slotStatus.getVersion()) .build(); }
@PUT @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public Response assign(@HeaderParam(GALAXY_AGENT_VERSION_HEADER) String agentVersion, @HeaderParam(GALAXY_SLOT_VERSION_HEADER) String slotVersion, @PathParam("slotId") UUID slotId, InstallationRepresentation installation) { Preconditions.checkNotNull(slotId, "slotId must not be null"); Preconditions.checkNotNull(installation, "installation must not be null"); Slot slot = agent.getSlot(slotId); if (slot == null) { return Response.status(Response.Status.NOT_FOUND).build(); } checkAgentVersion(agent.getAgentStatus(), agentVersion); checkSlotVersion(slot.status(), slotVersion); SlotStatus status = slot.assign(installation.toInstallation()); return Response.ok(SlotStatusRepresentation.from(status)) .header(GALAXY_AGENT_VERSION_HEADER, agent.getAgentStatus().getVersion()) .header(GALAXY_SLOT_VERSION_HEADER, status.getVersion()) .build(); } }
.header(GALAXY_SLOT_VERSION_HEADER, status.getVersion()) .build();
@Override public SlotStatus terminate() { try { Request request = RequestBuilder.prepareDelete() .setUri(slotStatus.getSelf()) .setHeader(GALAXY_AGENT_VERSION_HEADER, agent.status().getVersion()) .setHeader(GALAXY_SLOT_VERSION_HEADER, slotStatus.getVersion()) .build(); SlotStatusRepresentation slotStatusRepresentation = httpClient.execute(request, createJsonResponseHandler(slotStatusCodec, Status.OK.getStatusCode())); updateStatus(slotStatusRepresentation.toSlotStatus(slotStatus.getInstanceId())); return slotStatus; } catch (Exception e) { log.error(e); return setErrorStatus(e.getMessage()); } }
@Override public SlotStatus start() { try { Request request = RequestBuilder.preparePut() .setUri(uriBuilderFrom(slotStatus.getSelf()).appendPath("lifecycle").build()) .setHeader(GALAXY_AGENT_VERSION_HEADER, agent.status().getVersion()) .setHeader(GALAXY_SLOT_VERSION_HEADER, slotStatus.getVersion()) .setBodyGenerator(createStaticBodyGenerator("running", UTF_8)) .build(); SlotStatusRepresentation slotStatusRepresentation = httpClient.execute(request, createJsonResponseHandler(slotStatusCodec, Status.OK.getStatusCode())); updateStatus(slotStatusRepresentation.toSlotStatus(slotStatus.getInstanceId())); return slotStatus; } catch (Exception e) { log.error(e); return setErrorStatus(e.getMessage()); } }
@Override public SlotStatus restart() { try { Request request = RequestBuilder.preparePut() .setUri(uriBuilderFrom(slotStatus.getSelf()).appendPath("lifecycle").build()) .setHeader(GALAXY_AGENT_VERSION_HEADER, agent.status().getVersion()) .setHeader(GALAXY_SLOT_VERSION_HEADER, slotStatus.getVersion()) .setBodyGenerator(createStaticBodyGenerator("restarting", UTF_8)) .build(); SlotStatusRepresentation slotStatusRepresentation = httpClient.execute(request, createJsonResponseHandler(slotStatusCodec, Status.OK.getStatusCode())); updateStatus(slotStatusRepresentation.toSlotStatus(slotStatus.getInstanceId())); return slotStatus; } catch (Exception e) { log.error(e); return setErrorStatus(e.getMessage()); } }
@Override public SlotStatus stop() { try { Request request = RequestBuilder.preparePut() .setUri(uriBuilderFrom(slotStatus.getSelf()).appendPath("lifecycle").build()) .setHeader(GALAXY_AGENT_VERSION_HEADER, agent.status().getVersion()) .setHeader(GALAXY_SLOT_VERSION_HEADER, slotStatus.getVersion()) .setBodyGenerator(createStaticBodyGenerator("stopped", UTF_8)) .build(); SlotStatusRepresentation slotStatusRepresentation = httpClient.execute(request, createJsonResponseHandler(slotStatusCodec, Status.OK.getStatusCode())); updateStatus(slotStatusRepresentation.toSlotStatus(slotStatus.getInstanceId())); return slotStatus; } catch (Exception e) { log.error(e); return setErrorStatus(e.getMessage()); } } }
@Override public SlotStatus assign(Installation installation) { try { Request request = RequestBuilder.preparePut() .setUri(uriBuilderFrom(slotStatus.getSelf()).appendPath("assignment").build()) .setHeader(CONTENT_TYPE, APPLICATION_JSON) .setHeader(GALAXY_AGENT_VERSION_HEADER, agent.status().getVersion()) .setHeader(GALAXY_SLOT_VERSION_HEADER, slotStatus.getVersion()) .setBodyGenerator(jsonBodyGenerator(installationCodec, InstallationRepresentation.from(installation))) .build(); SlotStatusRepresentation slotStatusRepresentation = httpClient.execute(request, createJsonResponseHandler(slotStatusCodec, Status.OK.getStatusCode())); updateStatus(slotStatusRepresentation.toSlotStatus(slotStatus.getInstanceId())); return slotStatus; } catch (Exception e) { log.error(e); return setErrorStatus(e.getMessage()); } }
shortConfig, slotStatus.getState().toString(), slotStatus.getVersion(), slotStatus.getStatusMessage(), slotStatus.getInstallPath(),
shortConfig, status.getState().toString(), status.getVersion(), status.getStatusMessage(), status.getInstallPath(),