001package io.prometheus.client.exporter;
002
003import io.prometheus.client.CollectorRegistry;
004import io.prometheus.client.exporter.common.TextFormat;
005
006import javax.servlet.ServletException;
007import javax.servlet.http.HttpServlet;
008import javax.servlet.http.HttpServletRequest;
009import javax.servlet.http.HttpServletResponse;
010import java.io.IOException;
011import java.io.Writer;
012import java.util.Arrays;
013import java.util.Collections;
014import java.util.HashSet;
015import java.util.Set;
016
017public class MetricsServlet extends HttpServlet {
018
019  private CollectorRegistry registry;
020
021  /**
022   * Construct a MetricsServlet for the default registry.
023   */
024  public MetricsServlet() {
025    this(CollectorRegistry.defaultRegistry);
026  }
027
028  /**
029   * Construct a MetricsServlet for the given registry.
030   */
031  public MetricsServlet(CollectorRegistry registry) {
032    this.registry = registry;
033  }
034
035  @Override
036  protected void doGet(final HttpServletRequest req, final HttpServletResponse resp)
037          throws ServletException, IOException {
038    resp.setStatus(HttpServletResponse.SC_OK);
039    resp.setContentType(TextFormat.CONTENT_TYPE_004);
040
041    Writer writer = resp.getWriter();
042    try {
043      TextFormat.write004(writer, registry.filteredMetricFamilySamples(parse(req)));
044      writer.flush();
045    } finally {
046      writer.close();
047    }
048  }
049
050  private Set<String> parse(HttpServletRequest req) {
051    String[] includedParam = req.getParameterValues("name[]");
052    if (includedParam == null) {
053      return Collections.emptySet();
054    } else {
055      return new HashSet<String>(Arrays.asList(includedParam));
056    }
057  }
058
059  @Override
060  protected void doPost(final HttpServletRequest req, final HttpServletResponse resp)
061          throws ServletException, IOException {
062    doGet(req, resp);
063  }
064
065}