Skip to content

Commit fa6f97a

Browse files
committed
Move filtering to MetricsRegistry.
1 parent e0f29c3 commit fa6f97a

File tree

4 files changed

+63
-23
lines changed

4 files changed

+63
-23
lines changed

metrics-core/src/main/java/com/yammer/metrics/core/MetricsRegistry.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.Iterator;
44
import java.util.List;
55
import java.util.Map;
6+
import java.util.NoSuchElementException;
67
import java.util.concurrent.ConcurrentMap;
78
import java.util.concurrent.ConcurrentSkipListMap;
89
import java.util.concurrent.CopyOnWriteArrayList;
@@ -131,4 +132,47 @@ public void remove() {
131132
}
132133
};
133134
}
135+
136+
public Iterable<Map.Entry<String, Metric>> filter(final MetricPredicate predicate) {
137+
return new Iterable<Map.Entry<String, Metric>>() {
138+
@Override
139+
public Iterator<Map.Entry<String, Metric>> iterator() {
140+
final Iterator<Map.Entry<String, Metric>> iterator = MetricsRegistry.this.iterator();
141+
return new Iterator<Map.Entry<String, Metric>>() {
142+
private Map.Entry<String, Metric> element;
143+
144+
@Override
145+
public boolean hasNext() {
146+
if (element != null) {
147+
return true;
148+
}
149+
150+
while (iterator.hasNext()) {
151+
final Map.Entry<String, Metric> possibleElement = iterator.next();
152+
if (predicate.matches(possibleElement.getKey(), possibleElement.getValue())) {
153+
this.element = possibleElement;
154+
return true;
155+
}
156+
}
157+
return false;
158+
}
159+
160+
@Override
161+
public Map.Entry<String, Metric> next() {
162+
if (hasNext()) {
163+
final Map.Entry<String, Metric> e = element;
164+
this.element = null;
165+
return e;
166+
}
167+
throw new NoSuchElementException();
168+
}
169+
170+
@Override
171+
public void remove() {
172+
throw new UnsupportedOperationException();
173+
}
174+
};
175+
}
176+
};
177+
}
134178
}

metrics-core/src/main/java/com/yammer/metrics/reporting/CsvReporter.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -148,21 +148,21 @@ public void run() {
148148
final long time = TimeUnit.MILLISECONDS.toSeconds(clock.getTime() - startTime);
149149
final MetricDispatcher dispatcher = new MetricDispatcher();
150150
try {
151-
for (Entry<String, Metric> entry : getMetricsRegistry()) {
152-
final String metricName = entry.getKey();
151+
for (Entry<String, Metric> entry : getMetricsRegistry().filter(predicate)) {
152+
final String name = entry.getKey();
153153
final Metric metric = entry.getValue();
154-
if (predicate.matches(metricName, metric)) {
154+
if (metric != null) {
155155
final Context context = new Context() {
156156
@Override
157157
public PrintStream getStream(String header) throws IOException {
158-
final PrintStream stream = getPrintStream(metricName, header);
158+
final PrintStream stream = getPrintStream(name, header);
159159
stream.print(time);
160160
stream.print(',');
161161
return stream;
162162
}
163163

164164
};
165-
dispatcher.dispatch(entry.getValue(), entry.getKey(), this, context);
165+
dispatcher.dispatch(metric, name, this, context);
166166
}
167167
}
168168
} catch (Exception e) {

metrics-ganglia/src/main/java/com/yammer/metrics/ganglia/GangliaReporter.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -262,16 +262,14 @@ public void run() {
262262
}
263263

264264
private void printRegularMetrics() {
265-
for (Map.Entry<String, Metric> entry : getMetricsRegistry()) {
265+
for (Map.Entry<String, Metric> entry : getMetricsRegistry().filter(predicate)) {
266266
final String name = entry.getKey();
267267
final Metric metric = entry.getValue();
268-
if (predicate.matches(name, metric)) {
269-
if (metric != null) {
270-
try {
271-
dispatcher.dispatch(metric, name, this, null);
272-
} catch (Exception ignored) {
273-
LOG.error("Error printing regular metrics:", ignored);
274-
}
268+
if (metric != null) {
269+
try {
270+
dispatcher.dispatch(metric, name, this, null);
271+
} catch (Exception ignored) {
272+
LOG.error("Error printing regular metrics:", ignored);
275273
}
276274
}
277275
}

metrics-graphite/src/main/java/com/yammer/metrics/graphite/GraphiteReporter.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -239,16 +239,14 @@ public void run() {
239239
}
240240

241241
protected void printRegularMetrics(final Long epoch) {
242-
for (Entry<String, Metric> entry : getMetricsRegistry()) {
243-
if (predicate.matches(entry.getKey(), entry.getValue())) {
244-
final String name = entry.getKey();
245-
final Metric metric = entry.getValue();
246-
if (metric != null) {
247-
try {
248-
dispatcher.dispatch(metric, name, this, epoch);
249-
} catch (Exception ignored) {
250-
LOG.error("Error printing regular metrics:", ignored);
251-
}
242+
for (Entry<String, Metric> entry : getMetricsRegistry().filter(predicate)) {
243+
final String name = entry.getKey();
244+
final Metric metric = entry.getValue();
245+
if (metric != null) {
246+
try {
247+
dispatcher.dispatch(metric, name, this, epoch);
248+
} catch (Exception ignored) {
249+
LOG.error("Error printing regular metrics:", ignored);
252250
}
253251
}
254252
}

0 commit comments

Comments
 (0)