private Optional<KeyValue> getKeyValueOptional(HTTP.Response httpResponse) { final List<KeyValue> keyValues = fromJsonArray(httpResponse.body(), KeyValue.class); keyValues.forEach(keyValue -> keyValue.setValue(decodeBase64(keyValue.getValue()))); return keyValues != null && keyValues.size() > 0 ? Optional.of(keyValues.get(0)) : Optional.<KeyValue>empty(); }
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; }
/** * 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); }
/** * 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 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); }
/** * /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); }
/** * 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 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(); }
/** * 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()); } }
@Test public void testPing2() { HTTP.Response response = HTTP.getResponse(buildURL("ping2")); assertEquals(777, response.status()); assertEquals("hello mom", response.body()); }
@Test public void testPing() { HTTP.Response response = HTTP.getResponse(buildURL("ping")); assertEquals(200, response.status()); final List<String> controls = response.headers().get(HttpHeaders.CACHE_CONTROL); Assert.assertEquals("no-cache, no-store", controls.get(0)); Assert.assertEquals("max-age=0", controls.get(1)); assertEquals("\"love rocket\"", response.body()); }
@Test public void testPing3() { HTTP.Response response = HTTP.jsonRestCallViaPUT(buildURL("ping3"), "\"foo\""); assertEquals(777, response.status()); assertEquals("hello mom foo", response.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); }