diff --git a/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/DropwizardExports.java b/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/DropwizardExports.java index 4bf89899f..f7d0c3aff 100644 --- a/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/DropwizardExports.java +++ b/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/DropwizardExports.java @@ -9,6 +9,7 @@ import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.Snapshot; import com.codahale.metrics.Timer; +import io.prometheus.client.Predicate; import io.prometheus.client.dropwizard.samplebuilder.SampleBuilder; import io.prometheus.client.dropwizard.samplebuilder.DefaultSampleBuilder; @@ -93,20 +94,25 @@ MetricFamilySamples fromCounter(String dropwizardName, Counter counter) { * Export gauge as a prometheus gauge. */ MetricFamilySamples fromGauge(String dropwizardName, Gauge gauge) { - Object obj = gauge.getValue(); - double value; - if (obj instanceof Number) { - value = ((Number) obj).doubleValue(); - } else if (obj instanceof Boolean) { - value = ((Boolean) obj) ? 1 : 0; - } else { - LOGGER.log(Level.FINE, String.format("Invalid type for Gauge %s: %s", sanitizeMetricName(dropwizardName), - obj == null ? "null" : obj.getClass().getName())); - return null; + try { + Object obj = gauge.getValue(); + double value; + if (obj instanceof Number) { + value = ((Number) obj).doubleValue(); + } else if (obj instanceof Boolean) { + value = ((Boolean) obj) ? 1 : 0; + } else { + LOGGER.log(Level.FINE, String.format("Invalid type for Gauge %s: %s", sanitizeMetricName(dropwizardName), + obj == null ? "null" : obj.getClass().getName())); + return null; + } + MetricFamilySamples.Sample sample = sampleBuilder.createSample(dropwizardName, "", + new ArrayList(), new ArrayList(), value); + return new MetricFamilySamples(sample.name, Type.GAUGE, getHelpMessage(dropwizardName, gauge), Arrays.asList(sample)); + } catch (NullPointerException e) { + e.printStackTrace(); } - MetricFamilySamples.Sample sample = sampleBuilder.createSample(dropwizardName, "", - new ArrayList(), new ArrayList(), value); - return new MetricFamilySamples(sample.name, Type.GAUGE, getHelpMessage(dropwizardName, gauge), Arrays.asList(sample)); + return null; } /** @@ -180,6 +186,38 @@ public List collect() { return new ArrayList(mfSamplesMap.values()); } + @Override + public List collect(Predicate sampleNameFilter) { + Map mfSamplesMap = new HashMap(); + + for (SortedMap.Entry entry : registry.getGauges(metricFilter).entrySet()) { + if(sampleNameFilter.test(entry.getKey())) { + addToMap(mfSamplesMap, fromGauge(entry.getKey(), entry.getValue())); + } + } + for (SortedMap.Entry entry : registry.getCounters(metricFilter).entrySet()) { + if (sampleNameFilter.test(entry.getKey())) { + addToMap(mfSamplesMap, fromCounter(entry.getKey(), entry.getValue())); + } + } + for (SortedMap.Entry entry : registry.getHistograms(metricFilter).entrySet()) { + if (sampleNameFilter.test(entry.getKey())) { + addToMap(mfSamplesMap, fromHistogram(entry.getKey(), entry.getValue())); + } + } + for (SortedMap.Entry entry : registry.getTimers(metricFilter).entrySet()) { + if (sampleNameFilter.test(entry.getKey())) { + addToMap(mfSamplesMap, fromTimer(entry.getKey(), entry.getValue())); + } + } + for (SortedMap.Entry entry : registry.getMeters(metricFilter).entrySet()) { + if (sampleNameFilter.test(entry.getKey())) { + addToMap(mfSamplesMap, fromMeter(entry.getKey(), entry.getValue())); + } + } + return new ArrayList(mfSamplesMap.values()); + } + private void addToMap(Map mfSamplesMap, MetricFamilySamples newMfSamples) { if (newMfSamples != null) {