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}