/** * Submit a request to the server which expects an execution id in response, and return a single * QueuedItemResult parsed from the response. * * @param tempxml xml temp file (or null) * @param otherparams parameters for the request * @param requestPath * @return a single QueuedItemResult * @throws com.dtolabs.rundeck.core.dispatcher.CentralDispatcherException if an error occurs */ private QueuedItemResult submitRunRequest( final File tempxml, final HashMap<String, String> otherparams, final String requestPath) throws CentralDispatcherException { final HashMap<String, String> params = new HashMap<String, String>(); if (null != otherparams) { params.putAll(otherparams); } final WebserviceResponse response; try { response = serverService.makeRundeckRequest(requestPath, params, tempxml, null); } catch (MalformedURLException e) { throw new CentralDispatcherServerRequestException("Failed to make request", e); } validateResponse(response); final Document resultDoc = response.getResultDoc(); if (null != resultDoc.selectSingleNode("/result/execution") && null != resultDoc.selectSingleNode("/result/execution/@id")) { final Node node = resultDoc.selectSingleNode("/result/execution/@id"); final String succeededId = node.getStringValue(); final String name = "adhoc"; String url = createExecutionURL(succeededId); url = makeAbsoluteURL(url); logger.info("\t[" + succeededId + "] <" + url + ">"); return QueuedItemResultImpl.successful("Succeeded queueing " + name, succeededId, url, name); } return QueuedItemResultImpl.failed("Server response contained no success information."); }
/** * Submit a request to the server which expects a list of execution items in the response, and * return a single QueuedItemResult parsed from the response. * * @param tempxml xml temp file (or null) * @param otherparams parameters for the request * @param requestPath * @return a single QueuedItemResult * @throws com.dtolabs.rundeck.core.dispatcher.CentralDispatcherException if an error occurs */ private QueuedItemResult submitExecutionRequest( final File tempxml, final HashMap<String, String> otherparams, final String requestPath) throws CentralDispatcherException { final HashMap<String, String> params = new HashMap<String, String>(); if (null != otherparams) { params.putAll(otherparams); } final WebserviceResponse response; try { response = serverService.makeRundeckRequest(requestPath, params, tempxml, null); } catch (MalformedURLException e) { throw new CentralDispatcherServerRequestException("Failed to make request", e); } validateResponse(response); final ArrayList<QueuedItem> list = parseExecutionListResult(response); if (null == list || list.size() < 1) { return QueuedItemResultImpl.failed("Server response contained no success information."); } else { final QueuedItem next = list.iterator().next(); return QueuedItemResultImpl.successful( "Succeeded queueing " + next.getName(), next.getId(), next.getUrl(), next.getName()); } }
/** * Submit a request to the server which expects a list of queued item results in the response, and * return a single QueuedItemResult parsed from the response. * * @param tempxml xml temp file (or null) * @param otherparams parameters for the request * @param requestPath * @return a single QueuedItemResult * @throws CentralDispatcherException if an error occurs */ private QueuedItemResult submitQueueRequest( final File tempxml, final HashMap<String, String> otherparams, final String requestPath) throws CentralDispatcherException { final HashMap<String, String> params = new HashMap<String, String>(); params.put("xmlreq", "true"); if (null != otherparams) { params.putAll(otherparams); } final WebserviceResponse response; try { response = serverService.makeRundeckRequest(requestPath, params, tempxml, null); } catch (MalformedURLException e) { throw new CentralDispatcherServerRequestException("Failed to make request", e); } validateResponse(response); //////////////////// // parse result list of execution responses. this implementation handles multiple responses, // but only // returns a single QueuedItem (the first one found). // TODO: update to return multiple QueuedItems when multiple job queue requests are supported /////////////////// final Document resultDoc = response.getResultDoc(); final int succeeded; final int failed; Node node = resultDoc.selectSingleNode("/result/succeeded/@count"); if (null != node) { succeeded = Integer.parseInt(node.getStringValue()); } else { succeeded = -1; } node = resultDoc.selectSingleNode("/result/failed/@count"); if (null != node) { failed = Integer.parseInt(node.getStringValue()); } else { failed = -1; } final String succeededId; if (succeeded > 0) { logger.info("Succeeded queueing " + succeeded + " Job" + (succeeded > 1 ? "s" : "") + ":"); final List nodes = resultDoc.selectNodes("/result/succeeded/execution"); final Node node1 = (Node) nodes.iterator().next(); final String index = node1.selectSingleNode("@index").getStringValue(); final String id = node1.selectSingleNode("id").getStringValue(); succeededId = id; final String name = node1.selectSingleNode("name").getStringValue(); String url = node1.selectSingleNode("url").getStringValue(); url = makeAbsoluteURL(url); logger.info("\t" + index + ": " + name + " [" + id + "] <" + url + ">"); return QueuedItemResultImpl.successful("Succeeded queueing " + name, succeededId, url, name); } if (failed > 0) { final String s1 = "Failed to queue " + failed + " Job" + (failed > 1 ? "s" : "") + ":"; logger.error(s1); final List nodes = resultDoc.selectNodes("/result/failed/execution"); final Node node1 = (Node) nodes.iterator().next(); final String index = node1.selectSingleNode("@index").getStringValue(); final String id = null != node1.selectSingleNode("id") ? node1.selectSingleNode("id").getStringValue() : null; String url = null != node1.selectSingleNode("url") ? node1.selectSingleNode("url").getStringValue() : null; url = makeAbsoluteURL(url); final String error = null != node1.selectSingleNode("error") ? node1.selectSingleNode("error").getStringValue() : null; final String message = null != node1.selectSingleNode("message") ? node1.selectSingleNode("message").getStringValue() : null; final String errmsg = error + (null != id ? " [" + id + "] <" + url + ">" : "") + (null != message ? " : " + message : ""); final String s2 = index + ": " + errmsg; logger.error(s2); return QueuedItemResultImpl.failed(errmsg); } return QueuedItemResultImpl.failed("Server response contained no success information."); }