001package io.prometheus.client.exporter;
002
003import io.prometheus.client.Adapter;
004import io.prometheus.client.CollectorRegistry;
005import io.prometheus.client.Predicate;
006import io.prometheus.client.servlet.common.exporter.Exporter;
007import io.prometheus.client.servlet.common.exporter.ServletConfigurationException;
008
009import javax.servlet.ServletConfig;
010import javax.servlet.ServletException;
011import javax.servlet.http.HttpServlet;
012import javax.servlet.http.HttpServletRequest;
013import javax.servlet.http.HttpServletResponse;
014import java.io.IOException;
015
016import static io.prometheus.client.Adapter.wrap;
017
018/**
019 * The MetricsServlet class provides a simple way of exposing the metrics values.
020 */
021public class MetricsServlet extends HttpServlet {
022
023  private final Exporter exporter;
024
025  public MetricsServlet() {
026    this(CollectorRegistry.defaultRegistry, null);
027  }
028
029  public MetricsServlet(Predicate<String> sampleNameFilter) {
030    this(CollectorRegistry.defaultRegistry, sampleNameFilter);
031  }
032
033  public MetricsServlet(CollectorRegistry registry) {
034    this(registry, null);
035  }
036
037  public MetricsServlet(CollectorRegistry registry, Predicate<String> sampleNameFilter) {
038    exporter = new Exporter(registry, sampleNameFilter);
039  }
040
041  @Override
042  public void init(ServletConfig servletConfig) throws ServletException {
043    try {
044      super.init(servletConfig);
045      exporter.init(Adapter.wrap(servletConfig));
046    } catch (ServletConfigurationException e) {
047      throw new ServletException(e);
048    }
049  }
050
051  @Override
052  protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws IOException {
053    exporter.doGet(wrap(req), wrap(resp));
054  }
055
056  @Override
057  protected void doPost(final HttpServletRequest req, final HttpServletResponse resp) throws IOException {
058    exporter.doPost(wrap(req), wrap(resp));
059  }
060}