mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-09-03 03:33:27 +08:00
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");
|
||||
* 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());
|
||||
}
|
||||
if (metric instanceof Gauge) {
|
||||
@SuppressWarnings("unchecked")
|
||||
Gauge<Number> value = (Gauge<Number>) metric;
|
||||
return new Metric<Number>(metricName, value.getValue());
|
||||
Object value = ((Gauge<?>) metric).getValue();
|
||||
if (value instanceof Number) {
|
||||
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 (metricName.contains(".snapshot.")) {
|
||||
@ -129,13 +135,6 @@ public class MetricRegistryMetricReader implements MetricReader, MetricRegistryL
|
||||
|
||||
@Override
|
||||
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);
|
||||
synchronized (this.monitor) {
|
||||
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");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
Loading…
Reference in New Issue
Block a user