package com.jivesoftware.os.amza.ui.endpoints; import com.jivesoftware.os.amza.ui.region.AmzaPartitionsPluginRegion; import com.jivesoftware.os.amza.ui.region.AmzaPartitionsPluginRegion.AmzaPartitionsPluginRegionInput; import com.jivesoftware.os.amza.ui.soy.SoyService; 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.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @Singleton @Path("/amza/ui/partitions") public class AmzaPartitionsPluginEndpoints { private final SoyService soyService; private final AmzaPartitionsPluginRegion partitions; public AmzaPartitionsPluginEndpoints(@Context SoyService soyService, @Context AmzaPartitionsPluginRegion partitions) { this.soyService = soyService; this.partitions = partitions; } @GET @Produces(MediaType.TEXT_HTML) public Response ring() { String rendered = soyService.renderPlugin( partitions, new AmzaPartitionsPluginRegionInput()); return Response.ok(rendered).build(); } @POST @Produces(MediaType.TEXT_HTML) @Consumes(MediaType.APPLICATION_FORM_URLENCODED) public Response action( @FormParam("action") @DefaultValue("") String action, @FormParam("ringName") @DefaultValue("") String ringName, @FormParam("name") @DefaultValue("") String partitionName, @FormParam("durability") @DefaultValue("fsync_async") String durability, @FormParam("tombstoneTimestampAgeInMillis") @DefaultValue("0") long tombstoneTimestampAgeInMillis, @FormParam("tombstoneTimestampIntervalMillis") @DefaultValue("0") long tombstoneTimestampIntervalMillis, @FormParam("tombstoneVersionAgeInMillis") @DefaultValue("0") long tombstoneVersionAgeInMillis, @FormParam("tombstoneVersionIntervalMillis") @DefaultValue("0") long tombstoneVersionIntervalMillis, @FormParam("ttlTimestampAgeInMillis") @DefaultValue("0") long ttlTimestampAgeInMillis, @FormParam("ttlTimestampIntervalMillis") @DefaultValue("0") long ttlTimestampIntervalMillis, @FormParam("ttlVersionAgeInMillis") @DefaultValue("0") long ttlVersionAgeInMillis, @FormParam("ttlVersionIntervalMillis") @DefaultValue("0") long ttlVersionIntervalMillis, @FormParam("forceCompactionOnStartup") @DefaultValue("false") boolean forceCompactionOnStartup, @FormParam("consistency") @DefaultValue("leader_quorum") String consistency, @FormParam("requireConsistency") @DefaultValue("false") boolean requireConsistency, @FormParam("replicated") @DefaultValue("false") boolean replicated, @FormParam("disabled") @DefaultValue("false") boolean disabled, @FormParam("rowType") @DefaultValue("snappy_primary") String rowType, @FormParam("indexClassName") @DefaultValue("lab") String indexClassName, @FormParam("maxValueSizeInIndex") @DefaultValue("-1") int maxValueSizeInIndex, @FormParam("updatesBetweenLeaps") @DefaultValue("-1") int updatesBetweenLeaps, @FormParam("maxLeaps") @DefaultValue("-1") int maxLeaps) { String rendered = soyService.renderPlugin(partitions, new AmzaPartitionsPluginRegionInput( action, ringName, partitionName, durability, tombstoneTimestampAgeInMillis, tombstoneTimestampIntervalMillis, tombstoneVersionAgeInMillis, tombstoneVersionIntervalMillis, ttlTimestampAgeInMillis, ttlTimestampIntervalMillis, ttlVersionAgeInMillis, ttlVersionIntervalMillis, forceCompactionOnStartup, consistency, requireConsistency, replicated, disabled, rowType, indexClassName, maxValueSizeInIndex, null, // indexProperties updatesBetweenLeaps, maxLeaps)); return Response.ok(rendered).build(); } }