public static <T> ConsulResponse<T> consulResponse(final Class<T> responseType, final HTTP.Response response) { T responseObject = null; if (response.code() == 200) { if (!Str.isEmpty(response.body())) { responseObject = fromJson(response.body(), responseType); } } else { die("Unable to read response", response.code(), response.body()); } List<String> strings = response.headers().get("X-Consul-Index"); int index = Integer.valueOf(strings.get(0)); strings = response.headers().get("X-Consul-Lastcontact"); long lastContact = Long.valueOf(strings.get(0)); strings = response.headers().get("X-Consul-Knownleader"); boolean knownLeader = Boolean.valueOf(strings.get(0)); //noinspection UnnecessaryLocalVariable @SuppressWarnings("UnnecessaryLocalVariable") ConsulResponse<T> consulResponse = new ConsulResponse<>(responseObject, lastContact, knownLeader, index); return consulResponse; }
public static <T> ConsulResponse<List<T>> consulResponseList(final Class<T> responseType, final HTTP.Response response) { List<T> responseObject = null; if (response.code() == 200) { if (!Str.isEmpty(response.body())) { responseObject = fromJsonArray(response.body(), responseType); } } else { die("Unable to read response", response.code(), response.body()); } List<String> strings = response.headers().get("X-Consul-Index"); int index = Integer.valueOf(strings.get(0)); strings = response.headers().get("X-Consul-Lastcontact"); long lastContact = Long.valueOf(strings.get(0)); strings = response.headers().get("X-Consul-Knownleader"); boolean knownLeader = Boolean.valueOf(strings.get(0)); //noinspection UnnecessaryLocalVariable @SuppressWarnings("UnnecessaryLocalVariable") ConsulResponse<List<T>> consulResponse = new ConsulResponse<>(responseObject, lastContact, knownLeader, index); return consulResponse; }
/** * Deletes a specified key. * * @param key The key to delete. * @param params Map of parameters, e.g. recurse. */ private void delete(String key, Map<String, String> params) { final URI uri = createURI("/" + key); final HttpRequestBuilder httpRequestBuilder = RequestUtils .getHttpRequestBuilder(null, null, RequestOptions.BLANK, ""); final Set<Map.Entry<String, String>> entries = params.entrySet(); for (Map.Entry<String, String> entry : entries) { httpRequestBuilder.addParam(entry.getKey(), entry.getValue()); } httpRequestBuilder.setMethodDelete(); final HTTP.Response httpResponse = HTTP.deleteResponse(uri.toString() + "?" + httpRequestBuilder.paramString()); if (httpResponse.code() != 200) { die("Unable to delete key", uri, key, httpResponse.code(), httpResponse.body()); } } }
/** * Retrieves a {@link io.advantageous.consul.domain.KeyValue} for a specific key * from the key/value store. * <p> * GET /v1/keyValueStore/{key} * * @param key The key to retrieve. * @param requestOptions The query options. * @return An {@link Optional} containing the value or {@link java.util.Optional#empty()} */ public Optional<KeyValue> getValue(final String key, RequestOptions requestOptions) { final URI uri = createURI("/" + key); final HttpRequestBuilder httpRequestBuilder = RequestUtils .getHttpRequestBuilder(null, null, requestOptions, ""); final HTTP.Response httpResponse = HTTP.getResponse(uri.toString() + "?" + httpRequestBuilder.paramString()); if (httpResponse.code() == 404) { return Optional.empty(); } if (httpResponse.code() != 200) { die("Unable to retrieve the key", key, uri, httpResponse.code(), httpResponse.body()); } return getKeyValueOptional(httpResponse); }
/** * Retrieves a single service for a given datacenter with {@link io.advantageous.consul.domain.option.RequestOptions}. * <p> * GET /v1/catalog/service/{service}?dc={datacenter} * * @param serviceName service name * @param datacenter datacenter * @param tag tag * @param requestOptions The Query Options to use. * @return A {@link io.advantageous.consul.domain.ConsulResponse} containing * {@link io.advantageous.consul.domain.CatalogService} objects. */ public ConsulResponse<List<CatalogService>> getService(final String serviceName, final String datacenter, final String tag, RequestOptions requestOptions) { final URI uri = createURI("/service/" + serviceName); final HttpRequestBuilder httpRequestBuilder = RequestUtils .getHttpRequestBuilder(datacenter, tag, requestOptions, "/"); HTTP.Response httpResponse = HTTP.getResponse(uri.toString() + "?" + httpRequestBuilder.paramString()); if (httpResponse.code() != 200) { die("Unable to retrieve the service", uri, httpResponse.code(), httpResponse.body()); } return RequestUtils.consulResponseList(CatalogService.class, httpResponse); }
/** * Retrieves a single node for a given datacenter with {@link io.advantageous.consul.domain.option.RequestOptions}. * <p> * GET /v1/catalog/node/{node}?dc={datacenter} * * @param node node * @param datacenter dc * @param tag tag * @param requestOptions The Query Options to use. * @return A list of matching {@link io.advantageous.consul.domain.CatalogService} objects. */ public ConsulResponse<CatalogNode> getNode(final String node, final String datacenter, final String tag, final RequestOptions requestOptions) { final URI uri = createURI("/node/" + node); final HttpRequestBuilder httpRequestBuilder = RequestUtils .getHttpRequestBuilder(datacenter, tag, requestOptions, ""); final HTTP.Response httpResponse = HTTP.getResponse(uri + "?" + httpRequestBuilder.paramString()); if (httpResponse.code() != 200) { die("Unable to retrieve the node", uri, httpResponse.code(), httpResponse.body()); } return RequestUtils.consulResponse(CatalogNode.class, httpResponse); }
/** * Retrieves all services for a given datacenter with {@link io.advantageous.consul.domain.option.RequestOptions}. * <p> * GET /v1/catalog/services?dc={datacenter} * * @param datacenter datacenter * @param tag tag * @param requestOptions The Query Options to use. * @return A {@link io.advantageous.consul.domain.ConsulResponse} containing a map of service name to list of tags. */ public ConsulResponse<Map<String, List<String>>> getServices( @SuppressWarnings("SameParameterValue") final String datacenter, @SuppressWarnings("SameParameterValue") final String tag, final RequestOptions requestOptions) { final URI uri = createURI("/services"); final HttpRequestBuilder httpRequestBuilder = RequestUtils.getHttpRequestBuilder(datacenter, tag, requestOptions, "/"); HTTP.Response httpResponse = HTTP.getResponse(uri.toString() + "?" + httpRequestBuilder.paramString()); if (httpResponse.code() != 200) { die("Unable to retrieve the datacenters", uri, httpResponse.code(), httpResponse.body()); } //noinspection unchecked return (ConsulResponse<Map<String, List<String>>>) (Object) RequestUtils.consulResponse(Map.class, httpResponse); }
/** * Retrieves a list of matching keys for the given key. * <p> * GET /v1/keyValueStore/{key}?keys * * @param key The key to retrieve. * @return A list of zero to many keys. */ public List<String> getKeys(String key) { final URI uri = createURI("/" + key); final HttpRequestBuilder httpRequestBuilder = RequestUtils .getHttpRequestBuilder(null, null, RequestOptions.BLANK, ""); httpRequestBuilder.addParam("keys", "true"); final HTTP.Response httpResponse = HTTP.getResponse(uri.toString() + "?" + httpRequestBuilder.paramString()); if (httpResponse.code() == 200) { return fromJsonArray(httpResponse.body(), String.class); } else { die("Unable to get nested keys", uri, key, httpResponse.code(), httpResponse.body()); return Collections.emptyList(); } }
/** * Retrieves a list of {@link io.advantageous.consul.domain.KeyValue} objects for a specific key * from the key/value store. * <p> * GET /v1/keyValueStore/{key}?recurse * * @param key The key to retrieve. * @return A list of zero to many {@link io.advantageous.consul.domain.KeyValue} objects. */ public List<KeyValue> getValues(String key) { final URI uri = createURI("/" + key); final HttpRequestBuilder httpRequestBuilder = RequestUtils .getHttpRequestBuilder(null, null, RequestOptions.BLANK, ""); httpRequestBuilder.addParam("recurse", "true"); final HTTP.Response httpResponse = HTTP.getResponse(uri.toString() + "?" + httpRequestBuilder.paramString()); if (httpResponse.code() != 200) { die("Unable to retrieve the service", uri, httpResponse.code(), httpResponse.body()); } return fromJsonArray(httpResponse.body(), KeyValue.class); }
/** * /v1/session/node/node: * Lists sessions belonging to a node * * @param node node * @param requestOptions request options for consistency and long poll * @param datacenter data center param * @return list of sessions for this node */ public List<Session> getSessionsForNode(final String node, final String datacenter, final RequestOptions requestOptions) { final URI uri = createURI("/node/" + node); final HttpRequestBuilder httpRequestBuilder = RequestUtils .getHttpRequestBuilder(datacenter, null, requestOptions, ""); HTTP.Response httpResponse = HTTP.getResponse(uri.toString() + "?" + httpRequestBuilder.paramString()); if (httpResponse == null || httpResponse.code() != 200) { die("Unable to get the sessions", uri, httpResponse); } return fromJsonArray(httpResponse.body(), Session.class); }
/** * Destroy the session. * @param sessionId id of session * @param session session * @param datacenter datacenter * @return true if success */ public boolean destroy(final String sessionId, final Session session, final String datacenter) { final URI uri = createURI("/destroy/" + sessionId); final HttpRequestBuilder httpRequestBuilder = RequestUtils .getHttpRequestBuilder(datacenter, null, null, ""); HTTP.Response httpResponse = HTTP.jsonRestCallViaPUT(uri.toString() + "?" + httpRequestBuilder.paramString(), toJson(session)); if (httpResponse == null || httpResponse.code() != 200) { die("Unable destroy the session", sessionId, uri, httpResponse); } return httpResponse.code() == 200; }
/** * /v1/session/renew: Renews a TTL-based session * * @param sessionId session id * @param datacenter datacenter * @return session */ public Session renew(final String sessionId, final String datacenter) { final URI uri = createURI("/renew/" + sessionId); final HttpRequestBuilder httpRequestBuilder = RequestUtils .getHttpRequestBuilder(datacenter, null, null, ""); HTTP.Response httpResponse = HTTP.jsonRestCallViaPUT(uri.toString() + "?" + httpRequestBuilder.paramString(), ""); if (httpResponse == null || httpResponse.code() != 200) { die("Unable to renew the session", uri, httpResponse); } return fromJsonArray(httpResponse.body(), Session.class).get(0); }
/** * Retrieves the host/port of the Consul leader. * <p> * GET /v1/status/leader * * @return The host/port of the leader. */ public String getLeader() { final URI uri = createURI("/leader"); final HttpRequestBuilder httpRequestBuilder = RequestUtils .getHttpRequestBuilder(null, null, RequestOptions.BLANK, ""); final HTTP.Response httpResponse = HTTP.getResponse(uri + "?" + httpRequestBuilder.paramString()); if (httpResponse.code() != 200) { die("Unable to retrieve the leader", uri, httpResponse.code(), httpResponse.body()); } return fromJson(httpResponse.body(), String.class).replace("\"", "").trim(); }
/** * Retrieves a list of host/ports for raft peers. * <p> * GET /v1/status/peers * * @return List of host/ports for raft peers. */ public List<String> getPeers() { final URI uri = createURI("/peers"); final HttpRequestBuilder httpRequestBuilder = RequestUtils .getHttpRequestBuilder(null, null, RequestOptions.BLANK, ""); final HTTP.Response httpResponse = HTTP.getResponse(uri + "?" + httpRequestBuilder.paramString()); if (httpResponse.code() != 200) { die("Unable to get the peers", uri, httpResponse.code(), httpResponse.body()); } return fromJsonArray(httpResponse.body(), String.class); }
/** * Retrieves all members that the Agent can see in the gossip pool. * <p> * GET /v1/agent/members * * @return List of Members. */ public List<Member> getMembers() { final URI uri = createURI("/members"); final HTTP.Response response = HTTP.getResponse(uri.toString()); if (response.code() == 200) { return fromJsonArray(response.body(), Member.class); } die("Unable to read members", uri, response.code(), response.body()); return Collections.emptyList(); }
/** * Checks in with Consul. * * @param checkId The Check ID to check in. * @param status The current state of the Check. * @param note Any note to associate with the Check. */ public void check(String checkId, Status status, String note) { final URI uri = createURI("/check/" + status.getUri() + "/" + checkId); final HTTP.Response httpResponse = Str.isEmpty(note) ? HTTP.getResponse(uri.toString()) : HTTP.getResponse(uri.toString() + "?note=" + note); if (httpResponse.code() != 200) { notRegistered("Unable to perform check", uri, httpResponse.code(), httpResponse.statusMessageAsString(), httpResponse.body()); } }
/** * Retrieves all datacenters. * <p> * GET /v1/catalog/datacenters * * @return A list of datacenter names. */ public List<String> getDatacenters() { URI uri = createURI("/datacenters"); HTTP.Response httpResponse = HTTP.getResponse(uri.toString()); if (httpResponse.code() == 200) { return fromJsonArray(httpResponse.body(), String.class); } die("Unable to retrieve the datacenters", uri, httpResponse.code(), httpResponse.body()); return Collections.emptyList(); }
/** * @param datacenter datacenter * @param requestOptions request options for long poll and consistency. * @return list of sessions */ public List<Session> getSessions(final String datacenter, final RequestOptions requestOptions) { final URI uri = createURI("/list"); final HttpRequestBuilder httpRequestBuilder = RequestUtils .getHttpRequestBuilder(datacenter, null, requestOptions, ""); HTTP.Response httpResponse = HTTP.getResponse(uri.toString() + "?" + httpRequestBuilder.paramString()); if (httpResponse == null || httpResponse.code() != 200) { die("Unable to get the sessions", uri, httpResponse); } return fromJsonArray(httpResponse.body(), Session.class); }
/** * GET /v1/agent/force-leave/{node} * <p> * Instructs the agent to force a node into the "left" state. * * @param node node */ public void forceLeave(String node) { final URI uri = createURI("/force-leave/" + node); final HTTP.Response httpResponse = HTTP.getResponse(uri.toString()); if (httpResponse.code() != 200) { die("Unable to force leave", uri, httpResponse.code(), httpResponse.body()); } }
public ConsulResponse<List<Node>> getNodes(final String datacenter, final String tag, final RequestOptions requestOptions) { final HttpRequestBuilder httpRequestBuilder = RequestUtils .getHttpRequestBuilder(datacenter, tag, requestOptions, ""); final URI uri = createURI("/nodes"); final HTTP.Response httpResponse = HTTP.getResponse(uri + "?" + httpRequestBuilder.paramString()); if (httpResponse.code() != 200) { die("Unable to retrieve the nodes", uri, httpResponse.code(), httpResponse.body()); } return RequestUtils.consulResponseList(Node.class, httpResponse); }