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 017/** 018 * The MetricsServlet class exists to provide a simple way of exposing the metrics values. 019 * 020 */ 021public class MetricsServlet extends HttpServlet { 022 023 private CollectorRegistry registry; 024 025 /** 026 * Construct a MetricsServlet for the default registry. 027 */ 028 public MetricsServlet() { 029 this(CollectorRegistry.defaultRegistry); 030 } 031 032 /** 033 * Construct a MetricsServlet for the given registry. 034 * @param registry collector registry 035 */ 036 public MetricsServlet(CollectorRegistry registry) { 037 this.registry = registry; 038 } 039 040 @Override 041 protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) 042 throws ServletException, IOException { 043 resp.setStatus(HttpServletResponse.SC_OK); 044 resp.setContentType(TextFormat.CONTENT_TYPE_004); 045 046 Writer writer = resp.getWriter(); 047 try { 048 TextFormat.write004(writer, registry.filteredMetricFamilySamples(parse(req))); 049 writer.flush(); 050 } finally { 051 writer.close(); 052 } 053 } 054 055 private Set<String> parse(HttpServletRequest req) { 056 String[] includedParam = req.getParameterValues("name[]"); 057 if (includedParam == null) { 058 return Collections.emptySet(); 059 } else { 060 return new HashSet<String>(Arrays.asList(includedParam)); 061 } 062 } 063 064 @Override 065 protected void doPost(final HttpServletRequest req, final HttpServletResponse resp) 066 throws ServletException, IOException { 067 doGet(req, resp); 068 } 069 070}