package com.jivesoftware.os.amza.ui.endpoints;
import com.google.common.collect.Sets;
import com.jivesoftware.os.amza.api.partition.PartitionName;
import com.jivesoftware.os.amza.ui.region.MetricsPluginRegion;
import com.jivesoftware.os.amza.ui.region.MetricsPluginRegion.MetricsPluginRegionInput;
import com.jivesoftware.os.amza.ui.soy.SoyService;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.List;
import javax.inject.Singleton;
import javax.ws.rs.Consumes;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
/**
*
*/
@Singleton
@Path("/amza/ui/metrics")
public class MetricsPluginEndpoints {
private final SoyService soyService;
private final MetricsPluginRegion pluginRegion;
public MetricsPluginEndpoints(@Context SoyService soyService, @Context MetricsPluginRegion pluginRegion) {
this.soyService = soyService;
this.pluginRegion = pluginRegion;
}
@GET
@Produces(MediaType.TEXT_HTML)
public Response filter(@QueryParam("partitionName") @DefaultValue("") String partitionName,
@QueryParam("ringName") @DefaultValue("") String ringName,
@QueryParam("exact") @DefaultValue("false") boolean exact,
@QueryParam("visualize") @DefaultValue("false") boolean visualize) {
String rendered = soyService.renderPlugin(pluginRegion,
new MetricsPluginRegionInput(ringName, partitionName, exact, visualize));
return Response.ok(rendered).build();
}
@GET
@Produces(MediaType.TEXT_HTML)
@Path("/stats")
public Response stats(@QueryParam("partitionName") String partitionName,
@QueryParam("exact") boolean exact) {
return Response.ok(pluginRegion.renderStats(partitionName, exact)).build();
}
@GET
@Produces(MediaType.TEXT_HTML)
@Path("/overview")
public Response overview(@QueryParam("expand") List<String> expand) throws Exception {
return Response.ok(pluginRegion.renderOverview(expand == null ? Collections.emptySet() : Sets.newHashSet(expand))).build();
}
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.TEXT_HTML)
@Path("/abandon")
public Response abandon(@FormParam("ringName") @DefaultValue("") String ringName,
@FormParam("partitionName") @DefaultValue("") String partitionName) throws Exception {
byte[] ringNameBytes = ringName.getBytes(StandardCharsets.UTF_8);
byte[] partitionNameBytes = partitionName.getBytes(StandardCharsets.UTF_8);
if (ringNameBytes.length > 0 && partitionNameBytes.length > 0) {
if (pluginRegion.abandonPartition(new PartitionName(false, ringNameBytes, partitionNameBytes))) {
return Response.ok("Success").build();
}
}
return Response.status(Status.EXPECTATION_FAILED).build();
}
}