package org.stagemonitor.core.metrics; import java.util.Arrays; import java.util.Collection; import com.codahale.metrics.Metric; import org.stagemonitor.core.metrics.metrics2.Metric2Filter; import org.stagemonitor.core.metrics.metrics2.MetricName; public class MetricNameFilter implements Metric2Filter { /** * A {@link Metric2Filter} that excludes any results * that match any of the provided patterns. * @param patterns * @return */ public static MetricNameFilter excludePatterns(MetricName... patterns) { return new MetricNameFilter(Arrays.asList(patterns), false); } /** * A {@link Metric2Filter} that excludes any results * that match any of the provided patterns. * @param patterns * @return */ public static MetricNameFilter excludePatterns(Collection<MetricName> patterns) { return new MetricNameFilter(patterns, false); } /** * A {@link Metric2Filter} that matches (includes) any results * that match any of the provided patterns. * @param patterns * @return */ public static MetricNameFilter includePatterns(MetricName... patterns) { return new MetricNameFilter(Arrays.asList(patterns), true); } private final Collection<MetricName> patterns; private final boolean matchResult; /** * Equivalent to {@link #includePatterns(MetricName...)} * @param patterns */ public MetricNameFilter(Collection<MetricName> patterns) { this(patterns, true); } private MetricNameFilter(Collection<MetricName> patterns, boolean matchResult) { this.patterns = patterns; this.matchResult = matchResult; } @Override public boolean matches(MetricName name, Metric metric) { for (final MetricName pattern : patterns) { if (name.matches(pattern)) { return matchResult; } } return !matchResult; } }