Honor disabled metric attributes in JsonMetricsReporter.

This commit is contained in:
Jon Chambers 2020-11-18 15:07:51 -05:00 committed by Jon Chambers
parent 903ffef42c
commit 9b28672e19
2 changed files with 118 additions and 37 deletions

View File

@ -10,6 +10,7 @@ import com.codahale.metrics.Gauge;
import com.codahale.metrics.Histogram; import com.codahale.metrics.Histogram;
import com.codahale.metrics.Meter; import com.codahale.metrics.Meter;
import com.codahale.metrics.Metered; import com.codahale.metrics.Metered;
import com.codahale.metrics.MetricAttribute;
import com.codahale.metrics.MetricFilter; import com.codahale.metrics.MetricFilter;
import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.ScheduledReporter; import com.codahale.metrics.ScheduledReporter;
@ -30,8 +31,11 @@ import java.net.UnknownHostException;
import java.net.http.HttpClient; import java.net.http.HttpClient;
import java.net.http.HttpRequest; import java.net.http.HttpRequest;
import java.net.http.HttpResponse; import java.net.http.HttpResponse;
import java.util.Collections;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.SortedMap; import java.util.SortedMap;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -46,10 +50,11 @@ public class JsonMetricsReporter extends ScheduledReporter {
private final HttpClient httpClient; private final HttpClient httpClient;
public JsonMetricsReporter(MetricRegistry registry, URI uri, public JsonMetricsReporter(MetricRegistry registry, URI uri,
MetricFilter filter, TimeUnit rateUnit, TimeUnit durationUnit) MetricFilter filter, TimeUnit rateUnit, TimeUnit durationUnit,
Set<MetricAttribute> disabledMetricAttributes)
throws UnknownHostException throws UnknownHostException
{ {
super(registry, "json-reporter", filter, rateUnit, durationUnit); super(registry, "json-reporter", filter, rateUnit, durationUnit, Executors.newSingleThreadScheduledExecutor(), true, disabledMetricAttributes);
this.httpClient = HttpClient.newBuilder().version(HttpClient.Version.HTTP_2).build(); this.httpClient = HttpClient.newBuilder().version(HttpClient.Version.HTTP_2).build();
this.uri = UriBuilder.fromUri(uri).queryParam("h", InetAddress.getLocalHost().getHostName()).build(); this.uri = UriBuilder.fromUri(uri).queryParam("h", InetAddress.getLocalHost().getHostName()).build();
} }
@ -164,38 +169,110 @@ public class JsonMetricsReporter extends ScheduledReporter {
} }
private void writeTimedSnapshot(JsonGenerator json, Snapshot snapshot) throws IOException { private void writeTimedSnapshot(JsonGenerator json, Snapshot snapshot) throws IOException {
if (!getDisabledMetricAttributes().contains(MetricAttribute.MAX)) {
json.writeNumberField("max", convertDuration(snapshot.getMax())); json.writeNumberField("max", convertDuration(snapshot.getMax()));
}
if (!getDisabledMetricAttributes().contains(MetricAttribute.MEAN)) {
json.writeNumberField("mean", convertDuration(snapshot.getMean())); json.writeNumberField("mean", convertDuration(snapshot.getMean()));
}
if (!getDisabledMetricAttributes().contains(MetricAttribute.MIN)) {
json.writeNumberField("min", convertDuration(snapshot.getMin())); json.writeNumberField("min", convertDuration(snapshot.getMin()));
}
if (!getDisabledMetricAttributes().contains(MetricAttribute.STDDEV)) {
json.writeNumberField("stddev", convertDuration(snapshot.getStdDev())); json.writeNumberField("stddev", convertDuration(snapshot.getStdDev()));
}
if (!getDisabledMetricAttributes().contains(MetricAttribute.P50)) {
json.writeNumberField("median", convertDuration(snapshot.getMedian())); json.writeNumberField("median", convertDuration(snapshot.getMedian()));
}
if (!getDisabledMetricAttributes().contains(MetricAttribute.P75)) {
json.writeNumberField("p75", convertDuration(snapshot.get75thPercentile())); json.writeNumberField("p75", convertDuration(snapshot.get75thPercentile()));
}
if (!getDisabledMetricAttributes().contains(MetricAttribute.P95)) {
json.writeNumberField("p95", convertDuration(snapshot.get95thPercentile())); json.writeNumberField("p95", convertDuration(snapshot.get95thPercentile()));
}
if (!getDisabledMetricAttributes().contains(MetricAttribute.P98)) {
json.writeNumberField("p98", convertDuration(snapshot.get98thPercentile())); json.writeNumberField("p98", convertDuration(snapshot.get98thPercentile()));
}
if (!getDisabledMetricAttributes().contains(MetricAttribute.P99)) {
json.writeNumberField("p99", convertDuration(snapshot.get99thPercentile())); json.writeNumberField("p99", convertDuration(snapshot.get99thPercentile()));
}
if (!getDisabledMetricAttributes().contains(MetricAttribute.P999)) {
json.writeNumberField("p999", convertDuration(snapshot.get999thPercentile())); json.writeNumberField("p999", convertDuration(snapshot.get999thPercentile()));
} }
}
private void writeSnapshot(JsonGenerator json, Snapshot snapshot) throws IOException { private void writeSnapshot(JsonGenerator json, Snapshot snapshot) throws IOException {
if (!getDisabledMetricAttributes().contains(MetricAttribute.MAX)) {
json.writeNumberField("max", snapshot.getMax()); json.writeNumberField("max", snapshot.getMax());
}
if (!getDisabledMetricAttributes().contains(MetricAttribute.MEAN)) {
json.writeNumberField("mean", snapshot.getMean()); json.writeNumberField("mean", snapshot.getMean());
}
if (!getDisabledMetricAttributes().contains(MetricAttribute.MIN)) {
json.writeNumberField("min", snapshot.getMin()); json.writeNumberField("min", snapshot.getMin());
}
if (!getDisabledMetricAttributes().contains(MetricAttribute.STDDEV)) {
json.writeNumberField("stddev", snapshot.getStdDev()); json.writeNumberField("stddev", snapshot.getStdDev());
}
if (!getDisabledMetricAttributes().contains(MetricAttribute.P50)) {
json.writeNumberField("median", snapshot.getMedian()); json.writeNumberField("median", snapshot.getMedian());
}
if (!getDisabledMetricAttributes().contains(MetricAttribute.P75)) {
json.writeNumberField("p75", snapshot.get75thPercentile()); json.writeNumberField("p75", snapshot.get75thPercentile());
}
if (!getDisabledMetricAttributes().contains(MetricAttribute.P95)) {
json.writeNumberField("p95", snapshot.get95thPercentile()); json.writeNumberField("p95", snapshot.get95thPercentile());
}
if (!getDisabledMetricAttributes().contains(MetricAttribute.P98)) {
json.writeNumberField("p98", snapshot.get98thPercentile()); json.writeNumberField("p98", snapshot.get98thPercentile());
}
if (!getDisabledMetricAttributes().contains(MetricAttribute.P99)) {
json.writeNumberField("p99", snapshot.get99thPercentile()); json.writeNumberField("p99", snapshot.get99thPercentile());
}
if (!getDisabledMetricAttributes().contains(MetricAttribute.P999)) {
json.writeNumberField("p999", snapshot.get999thPercentile()); json.writeNumberField("p999", snapshot.get999thPercentile());
} }
}
private void writeMetered(JsonGenerator json, Metered meter) throws IOException { private void writeMetered(JsonGenerator json, Metered meter) throws IOException {
if (!getDisabledMetricAttributes().contains(MetricAttribute.COUNT)) {
json.writeNumberField("count", convertRate(meter.getCount())); json.writeNumberField("count", convertRate(meter.getCount()));
}
if (!getDisabledMetricAttributes().contains(MetricAttribute.MEAN_RATE)) {
json.writeNumberField("mean", convertRate(meter.getMeanRate())); json.writeNumberField("mean", convertRate(meter.getMeanRate()));
}
if (!getDisabledMetricAttributes().contains(MetricAttribute.M1_RATE)) {
json.writeNumberField("m1", convertRate(meter.getOneMinuteRate())); json.writeNumberField("m1", convertRate(meter.getOneMinuteRate()));
}
if (!getDisabledMetricAttributes().contains(MetricAttribute.M5_RATE)) {
json.writeNumberField("m5", convertRate(meter.getFiveMinuteRate())); json.writeNumberField("m5", convertRate(meter.getFiveMinuteRate()));
}
if (!getDisabledMetricAttributes().contains(MetricAttribute.M15_RATE)) {
json.writeNumberField("m15", convertRate(meter.getFifteenMinuteRate())); json.writeNumberField("m15", convertRate(meter.getFifteenMinuteRate()));
} }
}
private String sanitize(String metricName) { private String sanitize(String metricName) {
return SIMPLE_NAMES.matcher(metricName).replaceAll("_"); return SIMPLE_NAMES.matcher(metricName).replaceAll("_");
@ -209,15 +286,13 @@ public class JsonMetricsReporter extends ScheduledReporter {
private final MetricRegistry registry; private final MetricRegistry registry;
private MetricFilter filter = MetricFilter.ALL; private MetricFilter filter = MetricFilter.ALL;
private Set<MetricAttribute> disabledMetricAttributes = Collections.emptySet();
private TimeUnit rateUnit = TimeUnit.SECONDS; private TimeUnit rateUnit = TimeUnit.SECONDS;
private TimeUnit durationUnit = TimeUnit.MILLISECONDS; private TimeUnit durationUnit = TimeUnit.MILLISECONDS;
private URI uri; private URI uri;
private Builder(MetricRegistry registry) { private Builder(MetricRegistry registry) {
this.registry = registry; this.registry = registry;
this.rateUnit = TimeUnit.SECONDS;
this.durationUnit = TimeUnit.MILLISECONDS;
this.filter = MetricFilter.ALL;
} }
public Builder convertRatesTo(TimeUnit rateUnit) { public Builder convertRatesTo(TimeUnit rateUnit) {
@ -235,6 +310,11 @@ public class JsonMetricsReporter extends ScheduledReporter {
return this; return this;
} }
public Builder disabledMetricAttributes(Set<MetricAttribute> disabledMetricAttributes) {
this.disabledMetricAttributes = disabledMetricAttributes;
return this;
}
public Builder withUri(URI uri) { public Builder withUri(URI uri) {
this.uri = uri; this.uri = uri;
return this; return this;
@ -245,7 +325,7 @@ public class JsonMetricsReporter extends ScheduledReporter {
throw new IllegalArgumentException("No URI specified!"); throw new IllegalArgumentException("No URI specified!");
} }
return new JsonMetricsReporter(registry, uri, filter, rateUnit, durationUnit); return new JsonMetricsReporter(registry, uri, filter, rateUnit, durationUnit, disabledMetricAttributes);
} }
} }
} }

View File

@ -31,6 +31,7 @@ public class JsonMetricsReporterFactory extends BaseReporterFactory {
.convertRatesTo(getRateUnit()) .convertRatesTo(getRateUnit())
.convertDurationsTo(getDurationUnit()) .convertDurationsTo(getDurationUnit())
.filter(getFilter()) .filter(getFilter())
.disabledMetricAttributes(getDisabledAttributes())
.build(); .build();
} catch (UnknownHostException e) { } catch (UnknownHostException e) {
throw new IllegalArgumentException(e); throw new IllegalArgumentException(e);