Skip to content
This repository was archived by the owner on Jun 3, 2024. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -462,5 +462,4 @@
</build>
</profile>
</profiles>

</project>
28 changes: 28 additions & 0 deletions src/main/java/com/ryantenney/metrics/spring/RegexMetricFilter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.ryantenney.metrics.spring;

import java.util.regex.Pattern;

import com.codahale.metrics.Metric;
import com.codahale.metrics.MetricFilter;

public class RegexMetricFilter implements MetricFilter {
private final Pattern filter;

public RegexMetricFilter(String pattern) {
this(Pattern.compile(pattern));
}

private RegexMetricFilter(Pattern filter) {
this.filter = filter;
}

@Override
public boolean matches(String name, Metric metric) {
return filter.matcher(name).matches();
}

@Override
public String toString() {
return "[MetricFilter regex=" + filter.pattern() + "]";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,12 @@
*/
package com.ryantenney.metrics.spring.config;

import static com.ryantenney.metrics.spring.config.MetricsNamespaceHandler.METRICS_NAMESPACE;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.ConstructorArgumentValues;
Expand All @@ -31,10 +35,10 @@
import org.w3c.dom.Element;

import com.codahale.metrics.Metric;
import com.codahale.metrics.MetricFilter;
import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.MetricSet;

import static com.ryantenney.metrics.spring.config.MetricsNamespaceHandler.METRICS_NAMESPACE;
import com.ryantenney.metrics.spring.RegexMetricFilter;

class RegisterMetricBeanDefinitionParser implements BeanDefinitionParser {

Expand Down Expand Up @@ -79,6 +83,7 @@ public BeanDefinition parse(Element element, ParserContext parserContext) {

public static class MetricRegisterer implements InitializingBean {

private final Logger log = LoggerFactory.getLogger(MetricRegisterer.class);
private final MetricRegistry metricRegistry;
private final String name;
private final Metric metric;
Expand All @@ -95,9 +100,22 @@ public MetricRegisterer(MetricRegistry metricRegistry, String name, Metric metri

@Override
public void afterPropertiesSet() throws Exception {
metricRegistry.register(name, metric);
try {
metricRegistry.register(name, metric);
} catch (IllegalArgumentException iae) {
// handle duplicate names gracefully
replaceMetrics();
}
}

private void replaceMetrics() {
// Metrics really should provide a way to do this themselves
log.warn("Possible duplicate registry detected for name '{}', replacing with {}", name, metric.getClass());
MetricFilter filter = new RegexMetricFilter("^" + name + ".*$");
metricRegistry.removeMatching(filter);
metricRegistry.register(name, metric);
}
}

}

Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
package com.ryantenney.metrics.spring.reporter;

import java.util.Map;
import java.util.regex.Pattern;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
Expand All @@ -27,13 +26,15 @@
import org.springframework.core.convert.TypeDescriptor;
import org.springframework.core.convert.support.DefaultConversionService;

import com.codahale.metrics.Metric;
import com.codahale.metrics.MetricFilter;
import com.codahale.metrics.MetricRegistry;
import com.ryantenney.metrics.spring.RegexMetricFilter;

public abstract class AbstractReporterFactoryBean<T> implements FactoryBean<T>, InitializingBean, BeanFactoryAware {

protected static final String FILTER_PATTERN = "filter";


protected static final String FILTER_PATTERN = "filter";
protected static final String FILTER_REF = "filter-ref";

private MetricRegistry metricRegistry;
Expand Down Expand Up @@ -155,20 +156,7 @@ else if (hasProperty(FILTER_REF)) {
}

protected MetricFilter metricFilterPattern(String pattern) {
final Pattern filter = Pattern.compile(pattern);
return new MetricFilter() {

@Override
public boolean matches(String name, Metric metric) {
return filter.matcher(name).matches();
}

@Override
public String toString() {
return "[MetricFilter regex=" + filter.pattern() + "]";
}

};
return new RegexMetricFilter(pattern);
}

}
6 changes: 6 additions & 0 deletions src/test/resources/register-element-test.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,5 +35,11 @@
<bean metrics:name="jvm.thread-states" class="com.codahale.metrics.jvm.ThreadStatesGaugeSet" />
<bean metrics:name="jvm.fd.usage" class="com.codahale.metrics.jvm.FileDescriptorRatioGauge" />
</metrics:register>
<!-- test duplicate names due to spring lifecycle issues this can occur -->
<metrics:register metric-registry="metrics">
<bean metrics:name="jvm.gc" class="com.codahale.metrics.jvm.GarbageCollectorMetricSet" />
<bean metrics:name="jvm.fd.usage" class="com.codahale.metrics.jvm.FileDescriptorRatioGauge" />
</metrics:register>


</beans>