001package nl.nlighten.prometheus.tomcat;
002
003
004import javax.servlet.ServletConfig;
005import javax.servlet.annotation.WebServlet;
006
007import io.prometheus.client.Collector;
008import io.prometheus.client.CollectorRegistry;
009import io.prometheus.client.exporter.MetricsServlet;
010import io.prometheus.client.hotspot.DefaultExports;
011
012import java.util.Arrays;
013import java.util.Enumeration;
014import java.util.HashSet;
015
016
017@WebServlet("/")
018public class TomcatMetricsServlet extends MetricsServlet {
019
020    @Override
021    public void init(ServletConfig config) {
022        if (!initialized()) {
023            DefaultExports.initialize();
024            new TomcatGenericExports(false).register();
025            if (TomcatJdbcPoolExports.isTomcatJdbcUsed()) {
026                new TomcatJdbcPoolExports().register();
027            } else {
028                new TomcatDbcp2PoolExports().register();
029            }
030        }
031    }
032
033    private boolean initialized() {
034        Enumeration<Collector.MetricFamilySamples> samples = CollectorRegistry.defaultRegistry.filteredMetricFamilySamples(new HashSet<String>(Arrays.asList("tomcat_info")));
035        return samples.hasMoreElements();
036    }
037}
038
039