(TK-316) Extract specific filter class for Categories
This commit is contained in:
parent
01038b682d
commit
95602726e4
7 changed files with 64 additions and 68 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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,16 +25,6 @@ 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;
|
||||
}
|
||||
} else {
|
||||
if ( method != null ) {
|
||||
return false;
|
||||
} else if ( url != null ) {
|
||||
|
@ -53,44 +33,22 @@ public class ClientMetricFilter implements MetricFilter{
|
|||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
} else {
|
||||
if ( method != null ) {
|
||||
return url.equals(metric.getUrl()) && method.equals(metric.getMethod());
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
} else {
|
||||
if ( method != null ) {
|
||||
return false;
|
||||
} else if ( url != null ) {
|
||||
|
@ -99,7 +57,6 @@ public class ClientMetricFilter implements MetricFilter{
|
|||
return metricId.equals(metric.getMetricId());
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -20,4 +20,6 @@ public abstract class ClientTimer extends Timer {
|
|||
public Metrics.MetricType getMetricType() {
|
||||
return metricType;
|
||||
}
|
||||
|
||||
public abstract boolean isCategory(String category);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue