package bo.gotthardt.metrics;
import com.codahale.metrics.MetricRegistry;
import com.google.common.base.Charsets;
import com.google.common.base.Optional;
import com.google.common.io.Resources;
import javax.inject.Inject;
import javax.ws.rs.*;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
/**
* @author Bo Gotthardt
*/
@Path("/metrics")
public class MetricsResource {
private final MetricRegistry metrics;
private final String gif;
@Inject
public MetricsResource(MetricRegistry metrics) {
this.metrics = metrics;
try {
this.gif = Resources.toString(Resources.getResource("bo/gotthardt/metrics/1x1.gif"), Charsets.UTF_8);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@POST
@Path("/meter/{name}")
public void meter(@PathParam("name") String name, @QueryParam("value") Optional<Long> value) {
metrics.meter(name).mark(value.or(1L));
}
@POST
@Path("/timer/{name}")
public void timer(@PathParam("name") String name, @QueryParam("value") long value) {
metrics.timer(name).update(value, TimeUnit.MILLISECONDS);
}
@GET
@Path("/meter/{name}.gif")
@Produces("image/gif")
public String meterGif(@PathParam("name") String name, @QueryParam("value") Optional<Long> value) {
metrics.meter(name).mark(value.or(1L));
return gif;
}
@GET
@Path("/timer.gif")
@Produces("image/gif")
public String timerGif(@QueryParam("name") String name, @QueryParam("value") long value) {
metrics.timer(name).update(value, TimeUnit.MILLISECONDS);
return gif;
}
}