package io.dropwizard.metrics; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import com.google.common.collect.ImmutableSet; import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; class RegexStringMatchingStrategy implements StringMatchingStrategy { private final LoadingCache<String, Pattern> patternCache; RegexStringMatchingStrategy() { patternCache = CacheBuilder.newBuilder() .expireAfterWrite(1, TimeUnit.HOURS) .build(new CacheLoader<String, Pattern>() { @Override public Pattern load(String regex) throws Exception { return Pattern.compile(regex); } }); } @Override public boolean containsMatch(ImmutableSet<String> matchExpressions, String metricName) { for (String regexExpression : matchExpressions) { if (patternCache.getUnchecked(regexExpression).matcher(metricName).matches()) { // just need to match on a single value - return as soon as we do return true; } } return false; } }