001package io.prometheus.client.exporter;
002
003import io.prometheus.client.Collector;
004import io.prometheus.client.CollectorRegistry;
005import io.prometheus.client.exporter.common.TextFormat;
006
007import javax.servlet.ServletException;
008import javax.servlet.http.HttpServlet;
009import javax.servlet.http.HttpServletRequest;
010import javax.servlet.http.HttpServletResponse;
011import java.util.Collections;
012import java.util.Enumeration;
013import java.io.IOException;
014import java.io.Writer;
015
016public class MetricsServlet extends HttpServlet {
017
018  private CollectorRegistry registry;
019
020  /**
021   * Construct a MetricsServlet for the default registry.
022   */
023  public MetricsServlet() {
024    this(CollectorRegistry.defaultRegistry);
025  }
026
027  /**
028   * Construct a MetricsServlet for the given registry.
029   */
030  public MetricsServlet(CollectorRegistry registry) {
031    this.registry = registry;
032  }
033
034  @Override
035  protected void doGet(final HttpServletRequest req, final HttpServletResponse resp)
036      throws ServletException, IOException {
037    resp.setStatus(HttpServletResponse.SC_OK);
038    resp.setContentType(TextFormat.CONTENT_TYPE_004);
039
040    Writer writer = resp.getWriter();
041    TextFormat.write004(writer, registry.metricFamilySamples());
042    writer.flush();
043    writer.close();
044  }
045
046  @Override
047  protected void doPost(final HttpServletRequest req, final HttpServletResponse resp)
048        throws ServletException, IOException {
049    doGet(req, resp);
050  }
051
052}