@GET @Path("{warName}") public Response deploymentState(@PathParam("warName") String warName) throws Exception { DeploymentCheckRequest request = new DeploymentCheckRequest(); request.setWarName(warName); Message<DeploymentCheckRequest> msg = new Message<DeploymentCheckRequest>(DeploymentCheckCommandAction.COMMAND_ACTION, request); checkResponse.resetAll(); sender.sendMessage(msg, null); Map<ChannelMember, DeploymentCheckResponse> responses = new HashMap<ChannelMember, DeploymentCheckResponse>(); int timeout = 240; while (timeout-- > 0) { Thread.sleep(500l); boolean foundAll = true; for (ChannelMember mem : members) { Message<DeploymentCheckResponse> memResponse = checkResponse.getResponse(mem); if (memResponse != null) { responses.put(mem, memResponse.getBody()); } else { foundAll = false; } } if (foundAll) { break; } } if (responses.size() == members.size()) { Set<ChannelMember> membersInError = new HashSet<ChannelMember>(); boolean combinedState = true; boolean anyStarted = false; for (ChannelMember mem : responses.keySet()) { DeploymentCheckResponse response = responses.get(mem); if (response.getError() != null) { combinedState = false; membersInError.add(mem); } else { combinedState = combinedState && response.isFinished(); } if (response.isStarted()) { anyStarted = true; } } Map<String, Object> responseObj = new LinkedHashMap<String, Object>(); responseObj.put("finished", combinedState); responseObj.put("started", anyStarted); if (membersInError.size() > 0) { Set<String> inError = new TreeSet<String>(); responseObj.put("errors", inError); for (ChannelMember mem : membersInError) { inError.add(mem.getAddress().toString() + (mem.isCoordinator() ? ":coord" : "")); } } return Response.ok(new Gson().toJson(responseObj)).build(); } return Response.status(Response.Status.NOT_FOUND).build(); }
@POST @Consumes(MediaType.APPLICATION_JSON) @Produces("text/plain") public String deploy( DeployRequest req, @HeaderParam("Authorization") @DefaultValue("no token") String auth, @Context ServletContext context) throws Exception { if (!this.isAuth(auth)) { throw new Exception("Unauthorized!"); } String contextRoot = req.getContextRoot(); String artifact = req.getArtifact(); if (StringUtils.isEmptyOrNull(req.getRepo()) || StringUtils.isEmptyOrNull(req.getDomain())) { return "Error: missing repo and/or domain."; } if (StringUtils.isEmptyOrNull(contextRoot)) { contextRoot = "/"; } if (StringUtils.isEmptyOrNull(artifact)) { artifact = "com.meltmedia.cadmium:cadmium-war:war:" + version; } if (StringUtils.isEmptyOrNull(req.getConfigRepo())) { req.setConfigRepo(req.getRepo()); } if (StringUtils.isEmptyOrNull(req.getConfigBranch())) { req.setConfigBranch("master"); } if (StringUtils.isEmptyOrNull(req.getBranch())) { req.setBranch("master"); } ChannelMember coordinator = membershipTracker.getCoordinator(); com.meltmedia.cadmium.deployer.DeployRequest mRequest = new com.meltmedia.cadmium.deployer.DeployRequest(); mRequest.setBranch(req.getBranch()); mRequest.setRepo(req.getRepo()); mRequest.setConfigBranch(req.getConfigBranch()); mRequest.setConfigRepo(req.getConfigRepo()); mRequest.setDomain(req.getDomain()); mRequest.setContext(contextRoot); mRequest.setSecure(!req.isDisableSecurity()); mRequest.setArtifact(artifact); Message<com.meltmedia.cadmium.deployer.DeployRequest> msg = new Message<com.meltmedia.cadmium.deployer.DeployRequest>( DeployCommandAction.DEPLOY_ACTION, mRequest); response.reset(coordinator); sender.sendMessage(msg, coordinator); int timeout = 4800; while (timeout-- > 0) { Thread.sleep(500l); Message<DeployResponse> returnMsg = response.getResponse(coordinator); if (returnMsg != null) { if (returnMsg.getBody().getError() != null) { throw new Exception(returnMsg.getBody().getError()); } return returnMsg.getBody().getWarName(); } } return "ok"; }