001package io.prometheus.client.examples.guice.servlet;
002
003import com.google.inject.Inject;
004import com.google.inject.Singleton;
005import com.google.inject.name.Named;
006import io.prometheus.client.metrics.Counter;
007import io.prometheus.client.metrics.Summary;
008
009import javax.servlet.ServletException;
010import javax.servlet.http.HttpServlet;
011import javax.servlet.http.HttpServletRequest;
012import javax.servlet.http.HttpServletResponse;
013import java.io.IOException;
014
015@Singleton
016public class FooServlet extends HttpServlet {
017  private final Counter.Partial requestPartial;
018  private final Summary.Partial latencyPartial;
019
020  @Inject
021  public FooServlet(final @Named("handler") Counter requests,
022      final @Named("handler") Summary latencies) {
023
024    requestPartial = requests.newPartial().labelPair("handler", "foo");
025    latencyPartial = latencies.newPartial().labelPair("handler", "foo");
026  }
027
028  @Override
029  protected void doGet(final HttpServletRequest req, final HttpServletResponse resp)
030      throws ServletException, IOException {
031    final long start = System.currentTimeMillis();
032
033    final Counter.Partial count = requestPartial.clone();
034    final Summary.Partial latency = latencyPartial.clone();
035    try {
036      resp.setStatus(HttpServletResponse.SC_OK);
037      resp.getWriter().write("Here's one foo for you!");
038
039      count.labelPair("result", "success");
040      latency.labelPair("result", "success");
041    } catch (final IOException e) {
042      count.labelPair("result", "failure");
043      latency.labelPair("result", "failure");
044      throw e;
045    } catch (final RuntimeException e) {
046      count.labelPair("result", "failure");
047      latency.labelPair("result", "failure");
048      throw e;
049    } finally {
050      final long dur = System.currentTimeMillis() - start;
051
052      count.apply().increment();
053      latency.apply().observe((double)dur);
054    }
055  }
056}