codahale/metrics — pull request #127 by chids (2011-11-30 15:23:21+00:00)
Title: Refactor how reporters interact with metrics.

Here's the first PR for this beast. Thought I might as well squash it and open a PR so we'd get a more concise way of discussing the changes.

= Origin
The core of this refactoring is the introduction of the MetricsProcessor
interface which now all the reporters implement. The primary driver here
is to eliminate a slew of code blocks following this pattern:

if(metric instanceof Timer) {
...
} else if(metric instanceof Counter) {
...
}
...etc...

So there's now a MetricsProcessor that solves this and forces it's
implementors to handle all different metric types. An effect of this is that
introducing a new type of metric will trickle down to all reporters and
implementors of this is interface.

= Collateral changes
In the process of getting this in place the following has also happened:
- New interface: "Summarized" that groups min(), max(), mean(), stdDev()
- New interface: "Percentiled" that groups percentile(double) and
percentiles(Double...)
- A lot of tests for reporters have been added (thanks to @jebl01)
- Utils.sortAndFilterMetrics() now returns the MetricName in its result
- Added Utils.filterMetrics() to only filter based on a MetricPredicate

The two new interfaces also allowed elimination of duplication in some
of the reporters.