Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor how reporters interact with metrics. #127

Merged
merged 1 commit into from
Dec 3, 2011

Conversation

chids
Copy link
Contributor

@chids chids commented Nov 30, 2011

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.

= 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.
codahale added a commit that referenced this pull request Dec 3, 2011
Refactor how reporters interact with metrics.
@codahale codahale merged commit 5ae0be7 into dropwizard:development Dec 3, 2011
@chids chids deleted the reporter-refactoring branch October 8, 2018 12:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants