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