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