001package nl.nlighten.prometheus.wildfly; 002 003import io.undertow.servlet.ServletExtension; 004import io.undertow.servlet.api.DeploymentInfo; 005import io.undertow.servlet.api.FilterInfo; 006 007import javax.servlet.DispatcherType; 008import javax.servlet.ServletContext; 009 010import org.slf4j.Logger; 011import org.slf4j.LoggerFactory; 012 013import java.util.Arrays; 014import java.util.List; 015 016/** 017 * An undertow servlet extension that adds the {@link ServletMetricsFilter} to a deployment unless the context is blacklisted through 018 * the prometheus.wildfly.filter.blacklist system property. 019 */ 020 021public class MetricFilterExtension implements ServletExtension { 022 private static final Logger LOG = LoggerFactory.getLogger(MetricFilterExtension.class); 023 private static List<String> contextBlacklist = Arrays.asList(System.getProperty("prometheus.wildfly.filter.blacklist", "/metrics").split(",")); 024 025 026 @Override 027 public void handleDeployment(DeploymentInfo deploymentInfo, ServletContext servletContext) { 028 029 if (!contextBlacklist.contains(deploymentInfo.getContextPath())) { 030 LOG.info("Adding metrics filter to deployment for context " + deploymentInfo.getContextPath()); 031 FilterInfo metricsFilterInfo = new FilterInfo("metricsfilter", ServletMetricsFilter.class); 032 metricsFilterInfo.setAsyncSupported(true); 033 metricsFilterInfo.addInitParam(ServletMetricsFilter.BUCKET_CONFIG_PARAM,System.getProperty("prometheus.wildfly.filter.buckets","")); 034 deploymentInfo.addFilter(metricsFilterInfo); 035 deploymentInfo.addFilterUrlMapping("metricsfilter", "/*", DispatcherType.REQUEST); 036 } else { 037 LOG.info("Metrics filter not added to black listed context " + deploymentInfo.getContextPath()); 038 LOG.info(contextBlacklist.toString()); 039 } 040 } 041}