Don’t check that a Gauge’s value is a Number until it’s being read
Spring Boot’s metrics require all values to be Numbers. A Dropwizard Gauge can have a non-Number value. Previously, to prevent this causing a problem, MetricRegistryMetricReader would check the value of a Gauge when it’s being added and ignore it if it had a non-Number value. Unfortunately, retrieving the value of a Gauge can take a non-trivial amount of time (hence CachedGauge) so this approach, while functional, could be improved. This commit updates the filtering to happen when a Metric is being retrieved from MetricRegistryMetricReader (via findOne or findAll) when its value is required anyway. At this point, any Gauge with a non-Number value is ignored. Closes gh-4874
This commit is contained in:
parent
d7fbe9efbb
commit
00f4538529
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2013-2015 the original author or authors.
|
* Copyright 2013-2016 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|
@ -87,9 +87,15 @@ public class MetricRegistryMetricReader implements MetricReader, MetricRegistryL
|
||||||
return new Metric<Number>(metricName, counter.getCount());
|
return new Metric<Number>(metricName, counter.getCount());
|
||||||
}
|
}
|
||||||
if (metric instanceof Gauge) {
|
if (metric instanceof Gauge) {
|
||||||
@SuppressWarnings("unchecked")
|
Object value = ((Gauge<?>) metric).getValue();
|
||||||
Gauge<Number> value = (Gauge<Number>) metric;
|
if (value instanceof Number) {
|
||||||
return new Metric<Number>(metricName, value.getValue());
|
return new Metric<Number>(metricName, (Number) value);
|
||||||
|
}
|
||||||
|
if (logger.isDebugEnabled()) {
|
||||||
|
logger.debug("Ignoring gauge '" + name + "' (" + metric
|
||||||
|
+ ") as its value is not a Number");
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
if (metric instanceof Sampling) {
|
if (metric instanceof Sampling) {
|
||||||
if (metricName.contains(".snapshot.")) {
|
if (metricName.contains(".snapshot.")) {
|
||||||
|
|
@ -129,13 +135,6 @@ public class MetricRegistryMetricReader implements MetricReader, MetricRegistryL
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onGaugeAdded(String name, Gauge<?> gauge) {
|
public void onGaugeAdded(String name, Gauge<?> gauge) {
|
||||||
if (!(gauge.getValue() instanceof Number)) {
|
|
||||||
if (logger.isDebugEnabled()) {
|
|
||||||
logger.debug("Ignoring gauge '" + name + "' (" + gauge
|
|
||||||
+ ") as its value is not a Number");
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.names.put(name, name);
|
this.names.put(name, name);
|
||||||
synchronized (this.monitor) {
|
synchronized (this.monitor) {
|
||||||
this.reverse.add(name, name);
|
this.reverse.add(name, name);
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2012-2015 the original author or authors.
|
* Copyright 2012-2016 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue