package io.dropwizard.metrics.httpclient;
import static io.dropwizard.metrics.MetricRegistry.name;
import org.apache.http.HttpRequest;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpRequestWrapper;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.utils.URIBuilder;
import io.dropwizard.metrics.MetricName;
import java.net.URI;
import java.net.URISyntaxException;
public class HttpClientMetricNameStrategies {
public static final HttpClientMetricNameStrategy METHOD_ONLY =
new HttpClientMetricNameStrategy() {
@Override
public MetricName getNameFor(String name, HttpRequest request) {
return name(HttpClient.class,
name,
methodNameString(request));
}
};
public static final HttpClientMetricNameStrategy HOST_AND_METHOD =
new HttpClientMetricNameStrategy() {
@Override
public MetricName getNameFor(String name, HttpRequest request) {
return name(HttpClient.class,
name,
requestURI(request).getHost(),
methodNameString(request));
}
};
public static final HttpClientMetricNameStrategy QUERYLESS_URL_AND_METHOD =
new HttpClientMetricNameStrategy() {
@Override
public MetricName getNameFor(String name, HttpRequest request) {
try {
final URIBuilder url = new URIBuilder(requestURI(request));
return name(HttpClient.class,
name,
url.removeQuery().build().toString(),
methodNameString(request));
} catch (URISyntaxException e) {
throw new IllegalArgumentException(e);
}
}
};
private static String methodNameString(HttpRequest request) {
return request.getRequestLine().getMethod().toLowerCase() + "-requests";
}
private static URI requestURI(HttpRequest request) {
if (request instanceof HttpRequestWrapper)
return requestURI(((HttpRequestWrapper) request).getOriginal());
return (request instanceof HttpUriRequest) ?
((HttpUriRequest) request).getURI() :
URI.create(request.getRequestLine().getUri());
}
}