Skip to content
This repository has been archived by the owner on Jul 27, 2023. It is now read-only.

Commit

Permalink
CoordinateClient (#170)
Browse files Browse the repository at this point in the history
  • Loading branch information
craigday authored and rickfast committed Oct 6, 2016
1 parent 3714976 commit d0dd83c
Show file tree
Hide file tree
Showing 5 changed files with 155 additions and 2 deletions.
18 changes: 16 additions & 2 deletions src/main/java/com/orbitz/consul/Consul.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,13 @@ public class Consul {
private final SessionClient sessionClient;
private final EventClient eventClient;
private final PreparedQueryClient preparedQueryClient;
private final CoordinateClient coordinateClient;

/**
* Private constructor.
*
*/
private Consul(AgentClient agentClient, HealthClient healthClient, KeyValueClient keyValueClient, CatalogClient catalogClient, StatusClient statusClient, SessionClient sessionClient, EventClient eventClient, PreparedQueryClient preparedQueryClient) {
private Consul(AgentClient agentClient, HealthClient healthClient, KeyValueClient keyValueClient, CatalogClient catalogClient, StatusClient statusClient, SessionClient sessionClient, EventClient eventClient, PreparedQueryClient preparedQueryClient, CoordinateClient coordinateClient) {
this.agentClient = agentClient;
this.healthClient = healthClient;
this.keyValueClient = keyValueClient;
Expand All @@ -59,6 +60,7 @@ private Consul(AgentClient agentClient, HealthClient healthClient, KeyValueClien
this.sessionClient = sessionClient;
this.eventClient = eventClient;
this.preparedQueryClient = preparedQueryClient;
this.coordinateClient = coordinateClient;
}


Expand Down Expand Up @@ -151,6 +153,17 @@ public PreparedQueryClient preparedQueryClient() {
return preparedQueryClient;
}

/**
* Get the Coordinate HTTP client.
* <p>
* /v1/coordinate
*
* @return The Coordinate HTTP client.
*/
public CoordinateClient coordinateClient() {
return coordinateClient;
}

/**
* Creates a new {@link Builder} object.
*
Expand Down Expand Up @@ -399,11 +412,12 @@ public Consul build() {
SessionClient sessionClient = new SessionClient(retrofit);
EventClient eventClient = new EventClient(retrofit);
PreparedQueryClient preparedQueryClient = new PreparedQueryClient(retrofit);
CoordinateClient coordinateClient = new CoordinateClient(retrofit);

if (ping) {
agentClient.ping();
}
return new Consul(agentClient, healthClient, keyValueClient, catalogClient, statusClient, sessionClient, eventClient, preparedQueryClient);
return new Consul(agentClient, healthClient, keyValueClient, catalogClient, statusClient, sessionClient, eventClient, preparedQueryClient, coordinateClient);
}

private String buildUrl(URL url) {
Expand Down
68 changes: 68 additions & 0 deletions src/main/java/com/orbitz/consul/CoordinateClient.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package com.orbitz.consul;

import com.google.common.collect.ImmutableMap;
import com.orbitz.consul.model.coordinate.Coordinate;
import com.orbitz.consul.model.coordinate.Datacenter;
import retrofit2.Call;
import retrofit2.Retrofit;
import retrofit2.http.GET;
import retrofit2.http.QueryMap;

import java.util.Collections;
import java.util.List;
import java.util.Map;

import static com.orbitz.consul.util.Http.extract;

/**
* HTTP Client for /v1/coordinate/ endpoints.
*
* @see <a href="http://www.consul.io/docs/agent/http.html#agent">The Consul API Docs</a>
*/
public class CoordinateClient {

private final Api api;

/**
* Constructs an instance of this class.
*
* @param retrofit The {@link Retrofit} to build a client from.
*/
CoordinateClient(Retrofit retrofit) {
this.api = retrofit.create(Api.class);
}

public List<Datacenter> getDatacenters() {
return extract(api.getDatacenters());
}

public List<Coordinate> getNodes(String dc) {
return extract(api.getNodes(dcQuery(dc)));
}

public List<Coordinate> getNodes() {
return getNodes(null);
}

private Map<String, String> dcQuery(String dc) {
Map<String, String> query = Collections.emptyMap();

if (dc != null) {
query = ImmutableMap.of("dc", dc);
}
return query;
}

/**
* Retrofit API interface.
*/
interface Api {

@GET("coordinate/datacenters")
Call<List<Datacenter>> getDatacenters();

@GET("coordinate/nodes")
Call<List<Coordinate>> getNodes(@QueryMap Map<String, String> query);

}
}
27 changes: 27 additions & 0 deletions src/main/java/com/orbitz/consul/model/coordinate/Coord.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.orbitz.consul.model.coordinate;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import org.immutables.value.Value;

@Value.Immutable
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonSerialize(as = ImmutableCoord.class)
@JsonDeserialize(as = ImmutableCoord.class)
public abstract class Coord {

@JsonProperty("Adjustment")
public abstract double getAdjustment();

@JsonProperty("Error")
public abstract double getError();

@JsonProperty("Height")
public abstract double getHeight();

@JsonProperty("Vec")
public abstract double[] getVec();

}
21 changes: 21 additions & 0 deletions src/main/java/com/orbitz/consul/model/coordinate/Coordinate.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.orbitz.consul.model.coordinate;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import org.immutables.value.Value;

@Value.Immutable
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonSerialize(as = ImmutableCoordinate.class)
@JsonDeserialize(as = ImmutableCoordinate.class)
public abstract class Coordinate {

@JsonProperty("Node")
public abstract String getNode();

@JsonProperty("Coord")
public abstract Coord getCoord();

}
23 changes: 23 additions & 0 deletions src/main/java/com/orbitz/consul/model/coordinate/Datacenter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.orbitz.consul.model.coordinate;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import org.immutables.value.Value;

import java.util.List;

@Value.Immutable
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonSerialize(as = ImmutableDatacenter.class)
@JsonDeserialize(as = ImmutableDatacenter.class)
public abstract class Datacenter {

@JsonProperty("Datacenter")
public abstract String getDatacenter();

@JsonProperty("Coordinates")
public abstract List<Coordinate> getCoordinates();

}

0 comments on commit d0dd83c

Please sign in to comment.