private <V> SortedMap<String, V> getSortedMetrics(MetricFilter filter, Class<V> metricClass) { Map<String, V> collected = allMetrics.entrySet() .stream() .filter(it -> metricClass.isAssignableFrom(it.getValue().getClass())) .filter(it -> filter.matches(it.getKey(), it.getValue())) .collect(Collectors.toMap(Map.Entry::getKey, it -> metricClass.cast(it.getValue()))); return new TreeMap<>(collected); }
@Override public void removeMatching(MetricFilter filter) { allMetrics.entrySet().removeIf(entry -> filter.matches(entry.getKey(), entry.getValue())); }
@Override public void removeMatching(final MetricFilter filter) { metrics.entrySet().removeIf(it -> filter.matches(it.getKey(), it.getValue().metric)); }
@Override public boolean matches(String s, Metric metric) { return this.metricFilter.matches(s, ((MetricAdapter)metric).getMetric()); } }
private <T extends Metric> SortedMap<String, T> filterByType(final MetricFilter filter, final Class<T> type) { return metrics.entrySet().stream() .filter(it -> type.isInstance(it.getValue().metric)) .filter(it -> filter.matches(it.getKey(), it.getValue().metric)) .collect(toMap(Map.Entry::getKey, e -> type.cast(e.getValue().metric), (a, b) -> { throw new IllegalArgumentException("can't merge metrics"); // impossible }, TreeMap::new)); }
@Override public SortedMap<String, Counter> getCounters(MetricFilter metricFilter) { Map<String, com.codahale.metrics.Metric> metrics = this.metricRegistry.getMetrics(); SortedMap<String, Counter> counters = new TreeMap<>(); for(Map.Entry<String, com.codahale.metrics.Metric> entry : metrics.entrySet()) { com.codahale.metrics.Metric m = entry.getValue(); if(m instanceof MetricAdapter && ((MetricAdapter)m).getMetric() instanceof Counter && metricFilter.matches(entry.getKey(), ((MetricAdapter)m).getMetric())) { counters.put(entry.getKey(), (Counter)((MetricAdapter)m).getMetric()); } } return counters; }
@Override public SortedMap<String, Histogram> getHistograms(MetricFilter metricFilter) { Map<String, com.codahale.metrics.Metric> metrics = this.metricRegistry.getMetrics(); SortedMap<String, Histogram> histograms = new TreeMap<>(); for(Map.Entry<String, com.codahale.metrics.Metric> entry : metrics.entrySet()) { com.codahale.metrics.Metric m = entry.getValue(); if(m instanceof MetricAdapter && ((MetricAdapter)m).getMetric() instanceof Histogram && metricFilter.matches(entry.getKey(), ((MetricAdapter)m).getMetric())) { histograms.put(entry.getKey(), (Histogram)((MetricAdapter)m).getMetric()); } } return histograms; }
@Override public SortedMap<String, Gauge> getGauges(MetricFilter metricFilter) { Map<String, com.codahale.metrics.Metric> metrics = this.metricRegistry.getMetrics(); SortedMap<String, Gauge> gauges = new TreeMap<>(); for(Map.Entry<String, com.codahale.metrics.Metric> entry : metrics.entrySet()) { com.codahale.metrics.Metric m = entry.getValue(); if(m instanceof MetricAdapter && ((MetricAdapter)m).getMetric() instanceof Gauge && metricFilter.matches(entry.getKey(), ((MetricAdapter)m).getMetric())) { gauges.put(entry.getKey(), (Gauge)((MetricAdapter)m).getMetric()); } } return gauges; }
@Test public void theAllFilterMatchesAllMetrics() throws Exception { Assert.assertTrue(MetricFilter.ALL.matches("", metric)); } }
@Override public SortedMap<String, Meter> getMeters(MetricFilter metricFilter) { Map<String, com.codahale.metrics.Metric> metrics = this.metricRegistry.getMetrics(); SortedMap<String, Meter> meters = new TreeMap<>(); for(Map.Entry<String, com.codahale.metrics.Metric> entry : metrics.entrySet()) { com.codahale.metrics.Metric m = entry.getValue(); if(m instanceof MetricAdapter && ((MetricAdapter)m).getMetric() instanceof Meter && metricFilter.matches(entry.getKey(), ((MetricAdapter)m).getMetric())) { meters.put(entry.getKey(), (Meter)((MetricAdapter)m).getMetric()); } } return meters; }
@Override public SortedMap<String, Timer> getTimers(MetricFilter metricFilter) { Map<String, com.codahale.metrics.Metric> metrics = this.metricRegistry.getMetrics(); SortedMap<String, Timer> timers = new TreeMap<>(); for(Map.Entry<String, com.codahale.metrics.Metric> entry : metrics.entrySet()) { com.codahale.metrics.Metric m = entry.getValue(); if(m instanceof MetricAdapter && ((MetricAdapter)m).getMetric() instanceof Timer && metricFilter.matches(entry.getKey(), ((MetricAdapter)m).getMetric())) { timers.put(entry.getKey(), (Timer)((MetricAdapter)m).getMetric()); } } return timers; }