consul.Catalog 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 org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class Catalog extends ConsulChain {
public Catalog(Consul consul) {
super(consul);
}
public void deregister() {
throw new RuntimeException("Not yet implemented.");
}
public List datacenters()
throws ConsulException {
final List list = new ArrayList();
final HttpResponse resp;
try {
resp = Unirest.get(consul().getUrl() + EndpointCategory.Catalog.getUri() + "datacenters").asJson();
} catch (UnirestException e) {
throw new ConsulException(e);
}
final JSONArray arr = resp.getBody().getArray();
for (int i = 0; i < arr.length(); i++) {
list.add(new DataCenter(consul(), arr.getString(i)));
}
return list;
}
public DataCenter datacenter(String name)
throws ConsulException {
for (DataCenter dc : datacenters()) {
if (name.equals(dc.getName()))
return dc;
}
return null;
}
/**
* Call the services api of Consul using the given endpoint.
*
* @param category
* @return
* @throws ConsulException
*/
public List services() throws ConsulException {
final List services = new ArrayList();
final HttpResponse resp;
try {
resp = Unirest.get(consul().getUrl() + EndpointCategory.Catalog.getUri() + "services").asJson();
} catch (UnirestException e) {
throw new ConsulException(e);
}
final JSONObject obj = resp.getBody().getObject();
for (Object key : obj.keySet()) {
final JSONArray arr = (JSONArray)obj.get(key.toString());
final String[] tags = new String[arr.length()];
for (int i = 0; i < arr.length(); i++) {
tags[i] = arr.getString(i);
}
final Service s = new Service(consul(), key.toString(), tags);
services.add(s);
}
return services;
}
/**
* Return the current status from any service check tied to the serviceName.
* @param serviceName
* @return
* @throws ConsulException
*/
public List checks(String serviceName) throws ConsulException {
final List checks = new ArrayList();
final HttpResponse resp;
try {
resp = Unirest.get(consul().getUrl() + EndpointCategory.Check.getUri() + serviceName).asJson();
} catch (UnirestException e) {
throw new ConsulException(e);
}
final JSONArray arr = resp.getBody().getArray();
for (int i = 0; i < arr.length(); i++) {
final ServiceCheck s = new ServiceCheck(arr.getJSONObject(i));
checks.add(s);
}
return checks;
}
public Service service(String name)
throws ConsulException {
return consul().service(EndpointCategory.Catalog, name);
}
}