Skip to content

Commit

Permalink
Adding new rest API: get Repair Schedule by Keyspace and by Keyspace …
Browse files Browse the repository at this point in the history
…and Cluster as well as get Clusters associated with a seed host.
  • Loading branch information
djsly authored and varjoranta committed Sep 4, 2015
1 parent 0e9dece commit e6f419d
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 5 deletions.
10 changes: 8 additions & 2 deletions src/main/java/com/spotify/reaper/resources/ClusterResource.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,18 @@ public ClusterResource(AppContext context) {
}

@GET
public Response getClusterList() {
public Response getClusterList(@QueryParam("seedHost") Optional<String> seedHost) {
LOG.debug("get cluster list called");
Collection<Cluster> clusters = context.storage.getClusters();
List<String> clusterNames = new ArrayList<>();
for (Cluster cluster : clusters) {
clusterNames.add(cluster.getName());
if(seedHost.isPresent()) {
if(cluster.getSeedHosts().contains(seedHost.get()))
clusterNames.add(cluster.getName());
}
else {
clusterNames.add(cluster.getName());
}
}
return Response.ok().entity(clusterNames).build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,8 @@ public Response getRepairSchedule(@PathParam("id") Long repairScheduleId) {
}

/**
* @param cluster_name The cluster_name for which the Repair Schedule belongs
* @param keyspace The keyspace for which the Repair Schedule belongs
* @return all know repair schedules for a cluster.
*/
@GET
Expand Down Expand Up @@ -325,10 +327,11 @@ private URI buildRepairScheduleURI(UriInfo uriInfo, RepairSchedule repairSchedul
* @return All schedules in the system.
*/
@GET
public Response listSchedules() {
LOG.debug("list all repair schedules called");
public Response listSchedules(@QueryParam("clusterName") Optional<String> clusterName,
@QueryParam("keyspace") Optional<String> keyspaceName) {
List<RepairScheduleStatus> scheduleStatuses = Lists.newArrayList();
Collection<RepairSchedule> schedules = context.storage.getAllRepairSchedules();
Collection<RepairSchedule> schedules = getScheduleList(clusterName, keyspaceName);

for (RepairSchedule schedule : schedules) {
Optional<RepairUnit> unit = context.storage.getRepairUnit(schedule.getRepairUnitId());
if (unit.isPresent()) {
Expand All @@ -343,6 +346,20 @@ public Response listSchedules() {
return Response.status(Response.Status.OK).entity(scheduleStatuses).build();
}

private Collection<RepairSchedule> getScheduleList(Optional<String> clusterName, Optional<String> keyspaceName) {
Collection<RepairSchedule> schedules;

if(clusterName.isPresent() && keyspaceName.isPresent())
schedules = context.storage.getRepairSchedulesForClusterAndKeyspace(clusterName.get(), keyspaceName.get());
else if (clusterName.isPresent())
schedules = context.storage.getRepairSchedulesForCluster(clusterName.get());
else if (keyspaceName.isPresent())
schedules = context.storage.getRepairSchedulesForKeyspace(keyspaceName.get());
else
schedules = context.storage.getAllRepairSchedules();
return schedules;
}

/**
* Delete a RepairSchedule object with given id.
*
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/com/spotify/reaper/storage/IStorage.java
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,10 @@ Optional<RepairUnit> getRepairUnit(String cluster, String keyspace,

Collection<RepairSchedule> getRepairSchedulesForCluster(String clusterName);

Collection<RepairSchedule> getRepairSchedulesForKeyspace(String keyspaceName);

Collection<RepairSchedule> getRepairSchedulesForClusterAndKeyspace(String clusterName, String keyspaceName);

Collection<RepairSchedule> getAllRepairSchedules();

boolean updateRepairSchedule(RepairSchedule newRepairSchedule);
Expand Down
24 changes: 24 additions & 0 deletions src/main/java/com/spotify/reaper/storage/MemoryStorage.java
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,30 @@ public Collection<RepairSchedule> getRepairSchedulesForCluster(String clusterNam
}
return foundRepairSchedules;
}

@Override
public Collection<RepairSchedule> getRepairSchedulesForKeyspace(String keyspaceName) {
Collection<RepairSchedule> foundRepairSchedules = new ArrayList<>();
for (RepairSchedule repairSchedule : repairSchedules.values()) {
RepairUnit repairUnit = getRepairUnit(repairSchedule.getRepairUnitId()).get();
if (repairUnit.getKeyspaceName().equals(keyspaceName)) {
foundRepairSchedules.add(repairSchedule);
}
}
return foundRepairSchedules;
}

@Override
public Collection<RepairSchedule> getRepairSchedulesForClusterAndKeyspace(String clusterName, String keyspaceName) {
Collection<RepairSchedule> foundRepairSchedules = new ArrayList<>();
for (RepairSchedule repairSchedule : repairSchedules.values()) {
RepairUnit repairUnit = getRepairUnit(repairSchedule.getRepairUnitId()).get();
if (repairUnit.getClusterName().equals(clusterName) && repairUnit.getKeyspaceName().equals(keyspaceName)) {
foundRepairSchedules.add(repairSchedule);
}
}
return foundRepairSchedules;
}

@Override
public Collection<RepairSchedule> getAllRepairSchedules() {
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/com/spotify/reaper/storage/PostgresStorage.java
Original file line number Diff line number Diff line change
Expand Up @@ -421,7 +421,25 @@ public Collection<RepairSchedule> getRepairSchedulesForCluster(String clusterNam
}
return result;
}

@Override
public Collection<RepairSchedule> getRepairSchedulesForKeyspace(String keyspaceName) {
Collection<RepairSchedule> result;
try (Handle h = jdbi.open()) {
result = getPostgresStorage(h).getRepairSchedulesForKeyspace(keyspaceName);
}
return result;
}

@Override
public Collection<RepairSchedule> getRepairSchedulesForClusterAndKeyspace(String clusterName, String keyspaceName) {
Collection<RepairSchedule> result;
try (Handle h = jdbi.open()) {
result = getPostgresStorage(h).getRepairSchedulesForClusterAndKeySpace(clusterName, keyspaceName);
}
return result;
}

@Override
public Collection<RepairSchedule> getAllRepairSchedules() {
Collection<RepairSchedule> result;
Expand Down

0 comments on commit e6f419d

Please sign in to comment.