All Downloads are FREE. Search and download functionalities are using the official Maven repository.

consul.Consul Maven / Gradle / Ivy

package consul;

import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.JsonNode;
import com.mashape.unirest.http.Unirest;
import com.mashape.unirest.http.exceptions.UnirestException;
import com.mashape.unirest.http.options.Options;
import org.json.JSONArray;

import java.io.IOException;

/**
 * Orchestrates access to Consul's http api.
 *
 * @author mconroy
 *
 */
public class Consul {
    private String uri;
    private int port;

    public Consul(String uri, int port) {
        this.uri = uri;
        this.port = port;
    }

    public static void main(String args[]) throws Exception {
        try {
            final Consul c = new Consul("http://localhost", 8500);
            c.agent().register(new ServiceProvider("test1", "test", 8302, null));
            c.agent().checkRegister(new AgentCheck("test2", "check", "These are some notes", "/usr/local/bin/check_mem.py", "10s", "15s"));
            System.out.println(c.catalog().services());
            for (Service s : c.catalog().services())
                System.out.println(c.catalog().service(s.getName()));
            System.out.println(c.agent().self());
            System.out.println(c.agent().services());
            c.agent().deregister("test1");
            c.agent().checkDeregister("test2");
            System.out.println(c.agent().services());
            final KeyValue kv = new KeyValue(c);
            kv.set("this", "that");
            System.out.println(kv.get("this"));
            kv.delete("this");
        } finally {
            Unirest.shutdown();
        }
    }

    /**
     * Get the catalog from the consul node.
     *
     * @return - Catalog
     */
    public Catalog catalog() {
        return new Catalog(this);
    }

    /**
     * An agent instance.
     *
     * @return
     */
    public Agent agent() {
        return new Agent(this);
    }

    public Session session() {
        return new Session(this);
    }

    public KeyValue keyStore() {
        return new KeyValue(this);
    }

    /**
     * Call the service api of consul using the given endpoint.
     *
     * @param category
     * @param name
     * @return
     * @throws ConsulException
     */
    public Service service(EndpointCategory category, String name) throws ConsulException {
        final HttpResponse resp;
        try {
            resp = Unirest.get(this.getUrl() + category.getUri() + "service/{name}").routeParam("name", name).asJson();
        } catch (UnirestException e) {
            throw new ConsulException(e);
        }

        final Service s = new Service(this);

        final JSONArray arr = resp.getBody().getArray();
        for (int i = 0; i < arr.length(); i++) {
            s.add(arr.getJSONObject(i));
        }

        return s;
    }

    /**
     * With some frameworks it is necessary to refresh the unirest connection pool state
     * during runtime. This method does just that.
     */
    public void startup() {
        Options.refresh();
    }

    public void shutdown() {
        try {
            Unirest.shutdown();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * Url is a combo of uri + ":" + port
     *
     * @return - Url
     */
    String getUrl() {
        return uri + ":" + port;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy