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}