package com.kodcu.rapid.path; import com.kodcu.rapid.config.DockerClient; import javax.json.Json; import javax.json.JsonObject; import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.QueryParam; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Response; import java.io.StringReader; import java.util.Objects; import static com.kodcu.rapid.util.Networking.getResponse; import static com.kodcu.rapid.util.Networking.postResponse; import static javax.ws.rs.core.Response.Status.OK; /** * Created by hakan on 15/02/2017. */ @Path("swarm") public class Swarm extends DockerClient { @GET public Response inspectSwarm() { WebTarget target = resource().path("swarm"); Response response = getResponse(target); try { return Response.status(response.getStatus()).entity(response.readEntity(JsonObject.class)).build(); } finally { response.close(); } } @POST @Path("init") public Response initSwarm(JsonObject content) { WebTarget target = resource().path("swarm").path("init"); Response response = postResponse(target, content); try { if (response.getStatus() == OK.getStatusCode()) { return Response.ok(Json.createObjectBuilder().add("message", response.readEntity(String.class)).build()) .build(); } else return Response.status(response.getStatus()) .entity(response.readEntity(JsonObject.class)) .build(); } finally { response.close(); } } @POST @Path("join") public Response joinSwarm(JsonObject content) { WebTarget target = resource().path("swarm").path("join"); Response response = postResponse(target, content); try { if (response.getStatus() == OK.getStatusCode()) { return Response.ok(Json.createObjectBuilder().add("message", "OK").build()).build(); } else { return Response.status(response.getStatus()).entity(response.readEntity(JsonObject.class)).build(); } } finally { response.close(); } } @POST @Path("leave") public Response leaveSwarm(@DefaultValue("false") @QueryParam("force") boolean force) { WebTarget target = resource().path("swarm").path("leave").queryParam("force", force); Response response = postResponse(target); String entity = response.readEntity(String.class); try { if (entity.isEmpty()) { return Response.ok(Json.createObjectBuilder().add("message", "Node left.").build()) .build(); } else { return Response.status(response.getStatus()) .entity(Json.createReader(new StringReader(entity)).read()) .build(); } } finally { response.close(); } } @POST @Path("update") public Response updateSwarm(@QueryParam("version") String version, @DefaultValue("false") @QueryParam("rotateWorkerToken") boolean rotateWorkerToken, @DefaultValue("false") @QueryParam("rotateManagerToken") boolean rotateManagerToken, @DefaultValue("false") @QueryParam("rotateManagerUnlockKey") boolean rotateManagerUnlockKey, JsonObject content) { WebTarget target = resource().path("swarm").path("update") .queryParam("rotateWorkerToken", rotateWorkerToken) .queryParam("rotateManagerToken", rotateManagerToken) .queryParam("rotateManagerUnlockKey", rotateManagerUnlockKey); if (Objects.nonNull(version)) target = target.queryParam("version", version); Response response = postResponse(target, content); String entity = response.readEntity(String.class); try { if (entity.isEmpty()) { return Response.ok(Json.createObjectBuilder().add("message", "Swarm updated.").build()) .build(); } else { return Response.status(response.getStatus()) .entity(Json.createReader(new StringReader(entity)).read()) .build(); } } finally { response.close(); } } @GET @Path("unlockkey") public Response unluckKeySwarm() { WebTarget target = resource().path("swarm").path("unlockkey"); Response response = getResponse(target); String entity = response.readEntity(String.class); try { if (entity.isEmpty()) { return Response.ok(Json.createObjectBuilder().add("message", "Swarm unlockkey.").build()) .build(); } else { return Response.status(response.getStatus()) .entity(Json.createReader(new StringReader(entity)).read()) .build(); } } finally { response.close(); } } @POST @Path("unlock") public Response unlockSwarm(JsonObject content) { WebTarget target = resource().path("swarm").path("unlock"); Response response = postResponse(target, content); String entity = response.readEntity(String.class); try { if (entity.isEmpty()) { return Response.ok(Json.createObjectBuilder().add("message", "Swarm unlock.").build()) .build(); } else { return Response.status(response.getStatus()) .entity(Json.createReader(new StringReader(entity)).read()) .build(); } } finally { response.close(); } } }