(TK-316) Extract specific filter class for Categories

This commit is contained in:
Chris Price 2016-05-05 05:47:04 -07:00
parent 01038b682d
commit 95602726e4
7 changed files with 64 additions and 68 deletions

View file

@ -0,0 +1,22 @@
package com.puppetlabs.http.client.impl.metrics;
import com.codahale.metrics.Metric;
import com.codahale.metrics.MetricFilter;
import com.puppetlabs.http.client.metrics.*;
public class CategoryClientTimerMetricFilter implements MetricFilter {
private final String category;
public CategoryClientTimerMetricFilter(String category) {
this.category = category;
}
@Override
public boolean matches(String s, Metric metric) {
if (metric instanceof ClientTimer) {
return ((ClientTimer)metric).isCategory(category);
} else {
return false;
}
}
}

View file

@ -4,29 +4,19 @@ import com.codahale.metrics.MetricFilter;
import com.codahale.metrics.Metric;
import com.puppetlabs.http.client.metrics.MetricIdClientTimer;
import com.puppetlabs.http.client.metrics.Metrics;
import com.puppetlabs.http.client.metrics.ClientTimer;
import com.puppetlabs.http.client.metrics.UrlAndMethodClientTimer;
import com.puppetlabs.http.client.metrics.UrlClientTimer;
import java.util.ArrayList;
public class ClientMetricFilter implements MetricFilter{
private String category;
private String url;
private String method;
private ArrayList<String> metricId;
private Metrics.MetricType metricType;
// TODO: break this class up into two or more filter classes; it's combining a lot of logic at the moment
public ClientMetricFilter(String category, Metrics.MetricType metricType) {
this.category = category;
this.metricType = metricType;
}
public ClientMetricFilter(String url, String method, ArrayList<String> metricId,
Metrics.MetricType metricType) {
this.category = null;
this.url = url;
this.method = method;
this.metricId = metricId;
@ -35,23 +25,12 @@ public class ClientMetricFilter implements MetricFilter{
private boolean isMatch(UrlClientTimer metric) {
if ( metric.getMetricType().equals(metricType) ) {
if ( category != null ) {
switch (category) {
case Metrics.ID_NAMESPACE:
return false;
case Metrics.URL_METHOD_NAMESPACE:
return false;
case Metrics.URL_NAMESPACE:
return true;
}
if ( method != null ) {
return false;
} else if ( url != null ) {
return url.equals(metric.getUrl());
} else {
if ( method != null ) {
return false;
} else if ( url != null ) {
return url.equals(metric.getUrl());
} else {
return false;
}
return false;
}
}
return false;
@ -59,21 +38,10 @@ public class ClientMetricFilter implements MetricFilter{
private boolean isMatch(UrlAndMethodClientTimer metric) {
if ( metric.getMetricType().equals(metricType) ) {
if ( category != null ) {
switch (category) {
case Metrics.ID_NAMESPACE:
return false;
case Metrics.URL_METHOD_NAMESPACE:
return true;
case Metrics.URL_NAMESPACE:
return false;
}
if ( method != null ) {
return url.equals(metric.getUrl()) && method.equals(metric.getMethod());
} else {
if ( method != null ) {
return url.equals(metric.getUrl()) && method.equals(metric.getMethod());
} else {
return false;
}
return false;
}
}
return false;
@ -81,23 +49,12 @@ public class ClientMetricFilter implements MetricFilter{
private boolean isMatch(MetricIdClientTimer metric) {
if ( metric.getMetricType().equals(metricType) ) {
if ( category != null ) {
switch (category) {
case Metrics.ID_NAMESPACE:
return true;
case Metrics.URL_METHOD_NAMESPACE:
return false;
case Metrics.URL_NAMESPACE:
return false;
}
if ( method != null ) {
return false;
} else if ( url != null ) {
return false;
} else {
if ( method != null ) {
return false;
} else if ( url != null ) {
return false;
} else {
return metricId.equals(metric.getMetricId());
}
return metricId.equals(metric.getMetricId());
}
}
return false;

View file

@ -20,4 +20,6 @@ public abstract class ClientTimer extends Timer {
public Metrics.MetricType getMetricType() {
return metricType;
}
public abstract boolean isCategory(String category);
}

View file

@ -16,4 +16,9 @@ public class MetricIdClientTimer extends ClientTimer {
public List<String> getMetricId() {
return metricId;
}
@Override
public boolean isCategory(String category) {
return category.equals(Metrics.ID_NAMESPACE);
}
}

View file

@ -1,7 +1,9 @@
package com.puppetlabs.http.client.metrics;
import com.codahale.metrics.MetricFilter;
import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.Timer;
import com.puppetlabs.http.client.impl.metrics.CategoryClientTimerMetricFilter;
import com.puppetlabs.http.client.impl.metrics.ClientMetricFilter;
import com.puppetlabs.http.client.impl.metrics.TimerMetricData;
@ -11,7 +13,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
public class Metrics {
public static final String METRIC_NAMESPACE = "puppetlabs.http-client.experimental";
@ -29,7 +30,7 @@ public class Metrics {
}
private static List<UrlClientTimer> getUrlClientTimerArray(MetricRegistry registry,
ClientMetricFilter filter) {
MetricFilter filter) {
List<UrlClientTimer> timerArray = new ArrayList<>();
for (Map.Entry<String, Timer> entry : registry.getTimers(filter).entrySet()) {
UrlClientTimer timer = (UrlClientTimer)entry.getValue();
@ -39,7 +40,7 @@ public class Metrics {
}
private static List<UrlAndMethodClientTimer> getUrlAndMethodClientTimerArray(MetricRegistry registry,
ClientMetricFilter filter) {
MetricFilter filter) {
List<UrlAndMethodClientTimer> timerArray = new ArrayList<>();
for (Map.Entry<String, Timer> entry : registry.getTimers(filter).entrySet()) {
UrlAndMethodClientTimer timer = (UrlAndMethodClientTimer)entry.getValue();
@ -49,7 +50,7 @@ public class Metrics {
}
private static List<MetricIdClientTimer> getMetricIdClientTimerArray(MetricRegistry registry,
ClientMetricFilter filter) {
MetricFilter filter) {
List<MetricIdClientTimer> timerArray = new ArrayList<>();
for (Map.Entry<String, Timer> entry : registry.getTimers(filter).entrySet()) {
MetricIdClientTimer timer = (MetricIdClientTimer)entry.getValue();
@ -61,13 +62,12 @@ public class Metrics {
public static ClientTimerContainer getClientMetrics(MetricRegistry metricRegistry){
if (metricRegistry != null) {
return new ClientTimerContainer(
getUrlClientTimerArray(metricRegistry, new ClientMetricFilter(URL_NAMESPACE,
MetricType.FULL_RESPONSE)), getUrlAndMethodClientTimerArray(metricRegistry,
new ClientMetricFilter(URL_METHOD_NAMESPACE,
MetricType.FULL_RESPONSE)), getMetricIdClientTimerArray(metricRegistry,
new ClientMetricFilter(ID_NAMESPACE,
MetricType.FULL_RESPONSE))
);
getUrlClientTimerArray(metricRegistry,
new CategoryClientTimerMetricFilter(URL_NAMESPACE)),
getUrlAndMethodClientTimerArray(metricRegistry,
new CategoryClientTimerMetricFilter(URL_METHOD_NAMESPACE)),
getMetricIdClientTimerArray(metricRegistry,
new CategoryClientTimerMetricFilter(ID_NAMESPACE)));
} else {
throw new IllegalArgumentException("Metric registry must not be null");
}
@ -99,7 +99,7 @@ public class Metrics {
if (metricRegistry != null) {
if (metricId.length == 0) {
return getMetricIdClientTimerArray(metricRegistry,
new ClientMetricFilter(ID_NAMESPACE, MetricType.FULL_RESPONSE));
new CategoryClientTimerMetricFilter(ID_NAMESPACE));
} else {
return getMetricIdClientTimerArray(metricRegistry,
new ClientMetricFilter(null, null,

View file

@ -12,4 +12,9 @@ public class UrlAndMethodClientTimer extends UrlClientTimer {
public String getMethod() {
return method;
}
@Override
public boolean isCategory(String category) {
return category.equals(Metrics.URL_METHOD_NAMESPACE);
}
}

View file

@ -11,4 +11,9 @@ public class UrlClientTimer extends ClientTimer {
public String getUrl() {
return url;
}
@Override
public boolean isCategory(String category) {
return category.equals(Metrics.URL_NAMESPACE);
}
}