Add optimization to apache async client instrumentation

This commit is contained in:
Nikolay Martynov 2019-09-17 11:47:57 -04:00
parent 0748c10b72
commit e9fc866e67
1 changed files with 32 additions and 16 deletions

View File

@ -7,6 +7,7 @@ import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.RequestLine; import org.apache.http.RequestLine;
import org.apache.http.StatusLine; import org.apache.http.StatusLine;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.protocol.HttpContext; import org.apache.http.protocol.HttpContext;
import org.apache.http.protocol.HttpCoreContext; import org.apache.http.protocol.HttpCoreContext;
@ -26,40 +27,55 @@ public class ApacheHttpAsyncClientDecorator extends HttpClientDecorator<HttpRequ
@Override @Override
protected String method(final HttpRequest request) { protected String method(final HttpRequest request) {
final RequestLine requestLine = request.getRequestLine(); if (request instanceof HttpUriRequest) {
return requestLine == null ? null : requestLine.getMethod(); return ((HttpUriRequest) request).getMethod();
} else {
final RequestLine requestLine = request.getRequestLine();
return requestLine == null ? null : requestLine.getMethod();
}
} }
@Override @Override
protected URI url(final HttpRequest request) throws URISyntaxException { protected URI url(final HttpRequest request) throws URISyntaxException {
final RequestLine requestLine = request.getRequestLine(); /*
return requestLine == null ? null : new URI(requestLine.getUri()); * Note: this is essentially an optimization: HttpUriRequest allows quicker access to required information.
* The downside is that we need to load HttpUriRequest which essentially means we depend on httpasyncclient
* library depending on httpclient library. Currently this seems to be the case.
*/
if (request instanceof HttpUriRequest) {
return ((HttpUriRequest) request).getURI();
} else {
final RequestLine requestLine = request.getRequestLine();
return requestLine == null ? null : new URI(requestLine.getUri());
}
} }
@Override @Override
protected String hostname(final HttpRequest request) { protected String hostname(final HttpRequest request) {
final RequestLine requestLine = request.getRequestLine(); try {
if (requestLine != null) { final URI uri = url(request);
try { if (uri != null) {
return new URI(requestLine.getUri()).getHost(); return uri.getHost();
} catch (final URISyntaxException e) { } else {
return null; return null;
} }
} catch (final URISyntaxException e) {
return null;
} }
return null;
} }
@Override @Override
protected Integer port(final HttpRequest request) { protected Integer port(final HttpRequest request) {
final RequestLine requestLine = request.getRequestLine(); try {
if (requestLine != null) { final URI uri = url(request);
try { if (uri != null) {
return new URI(requestLine.getUri()).getPort(); return uri.getPort();
} catch (final URISyntaxException e) { } else {
return null; return null;
} }
} catch (final URISyntaxException e) {
return null;
} }
return null;
} }
@Override @Override