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}