package io.robe.admin.resources; import com.codahale.metrics.MetricFilter; import com.codahale.metrics.json.MetricsModule; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.inject.Inject; import io.dropwizard.hibernate.UnitOfWork; import io.dropwizard.setup.Environment; import io.robe.auth.Credentials; import io.robe.auth.RobeAuth; import org.hibernate.FlushMode; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.concurrent.TimeUnit; @Path("metrics") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public class MetricsResource { private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper().registerModule( new MetricsModule( TimeUnit.SECONDS, TimeUnit.SECONDS, false, MetricFilter.ALL)); @Inject Environment environment; @GET @UnitOfWork(transactional = false, readOnly = true, flushMode = FlushMode.MANUAL) public Response get(@RobeAuth Credentials credentials) { Response.ResponseBuilder builder = Response.ok(); builder.status(Response.Status.ACCEPTED); try { builder.entity(OBJECT_MAPPER.writeValueAsString(environment.metrics())); } catch (JsonProcessingException e) { builder.status(Response.Status.INTERNAL_SERVER_ERROR); e.printStackTrace(); } return builder.build(); } }