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 BarServlet extends HttpServlet { 017 private final Counter.Partial requestPartial; 018 private final Summary.Partial latencyPartial; 019 020 @Inject 021 public BarServlet(final @Named("handler") Counter requests, 022 final @Named("handler") Summary latencies) { 023 024 requestPartial = requests.newPartial().labelPair("handler", "bar"); 025 latencyPartial = latencies.newPartial().labelPair("handler", "bar"); 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 // Fictitiously take up to 100ms to provision a response. 037 Thread.sleep((long)(Math.random() * 100)); 038 039 resp.setStatus(HttpServletResponse.SC_OK); 040 resp.getWriter().write("Here's one bar for you!"); 041 042 count.labelPair("result", "success"); 043 latency.labelPair("result", "success"); 044 } catch (final IOException e) { 045 count.labelPair("result", "failure"); 046 latency.labelPair("result", "failure"); 047 throw e; 048 } catch (final RuntimeException e) { 049 count.labelPair("result", "failure"); 050 latency.labelPair("result", "failure"); 051 throw e; 052 } catch (final InterruptedException e) { 053 count.labelPair("result", "failure"); 054 latency.labelPair("result", "failure"); 055 } finally { 056 final long dur = System.currentTimeMillis() - start; 057 count.apply().increment(); 058 latency.apply().observe((double)dur); 059 } 060 } 061}