mirror of
https://github.com/wahyd4/pinpoint.git
synced 2026-08-16 16:28:48 +10:00
[유치수] [NOBTS] replace extractHost method
git-svn-id: http://svn.bds.nhncorp.com/pe/hippo-tomcat-profiler/trunk@1003 84d0f5b1-2673-498c-a247-62c4ff18d310
This commit is contained in:
+103
-48
@@ -1,12 +1,12 @@
|
||||
package com.profiler.modifier.connector.interceptors;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Arrays;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.apache.http.HttpHost;
|
||||
import org.apache.http.client.methods.HttpUriRequest;
|
||||
import org.apache.http.client.utils.URIUtils;
|
||||
|
||||
import com.profiler.common.ServiceType;
|
||||
import com.profiler.context.Header;
|
||||
@@ -22,6 +22,7 @@ import com.profiler.util.StringUtils;
|
||||
* Method interceptor
|
||||
* <p/>
|
||||
* <p/>
|
||||
*
|
||||
* <pre>
|
||||
* org.apache.http.impl.client.AbstractHttpClient.
|
||||
* public final HttpResponse execute(HttpUriRequest request) throws IOException, ClientProtocolException
|
||||
@@ -29,62 +30,116 @@ import com.profiler.util.StringUtils;
|
||||
*/
|
||||
public class Execute2MethodInterceptor implements StaticAroundInterceptor, ByteCodeMethodDescriptorSupport {
|
||||
|
||||
private final Logger logger = Logger.getLogger(Execute2MethodInterceptor.class.getName());
|
||||
private MethodDescriptor descriptor;
|
||||
private final Logger logger = Logger.getLogger(Execute2MethodInterceptor.class.getName());
|
||||
private MethodDescriptor descriptor;
|
||||
|
||||
@Override
|
||||
public void before(Object target, String className, String methodName, String parameterDescription, Object[] args) {
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("before " + StringUtils.toString(target) + " " + className + "." + methodName + parameterDescription + " args:" + Arrays.toString(args));
|
||||
}
|
||||
TraceContext traceContext = TraceContext.getTraceContext();
|
||||
Trace trace = traceContext.currentTraceObject();
|
||||
if (trace == null) {
|
||||
return;
|
||||
}
|
||||
trace.traceBlockBegin();
|
||||
trace.markBeforeTime();
|
||||
@Override
|
||||
public void before(Object target, String className, String methodName, String parameterDescription, Object[] args) {
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("before " + StringUtils.toString(target) + " " + className + "." + methodName + parameterDescription + " args:" + Arrays.toString(args));
|
||||
}
|
||||
TraceContext traceContext = TraceContext.getTraceContext();
|
||||
Trace trace = traceContext.currentTraceObject();
|
||||
if (trace == null) {
|
||||
return;
|
||||
}
|
||||
trace.traceBlockBegin();
|
||||
trace.markBeforeTime();
|
||||
|
||||
TraceID nextId = trace.getTraceId();
|
||||
TraceID nextId = trace.getTraceId();
|
||||
|
||||
final HttpUriRequest request = (HttpUriRequest) args[0];
|
||||
final HttpUriRequest request = (HttpUriRequest) args[0];
|
||||
|
||||
// UUID format을 그대로.
|
||||
request.addHeader(Header.HTTP_TRACE_ID.toString(), nextId.getId().toString());
|
||||
request.addHeader(Header.HTTP_SPAN_ID.toString(), Long.toString(nextId.getSpanId()));
|
||||
request.addHeader(Header.HTTP_PARENT_SPAN_ID.toString(), Long.toString(nextId.getParentSpanId()));
|
||||
request.addHeader(Header.HTTP_SAMPLED.toString(), String.valueOf(nextId.isSampled()));
|
||||
request.addHeader(Header.HTTP_FLAGS.toString(), String.valueOf(nextId.getFlags()));
|
||||
// UUID format을 그대로.
|
||||
request.addHeader(Header.HTTP_TRACE_ID.toString(), nextId.getId().toString());
|
||||
request.addHeader(Header.HTTP_SPAN_ID.toString(), Long.toString(nextId.getSpanId()));
|
||||
request.addHeader(Header.HTTP_PARENT_SPAN_ID.toString(), Long.toString(nextId.getParentSpanId()));
|
||||
request.addHeader(Header.HTTP_SAMPLED.toString(), String.valueOf(nextId.isSampled()));
|
||||
request.addHeader(Header.HTTP_FLAGS.toString(), String.valueOf(nextId.getFlags()));
|
||||
|
||||
HttpHost host = URIUtils.extractHost(request.getURI());
|
||||
HttpHost host = extractHost(request.getURI());
|
||||
|
||||
trace.recordRpcName(ServiceType.HTTP_CLIENT, request.getProtocolVersion().toString(), "CLIENT");
|
||||
|
||||
trace.recordRpcName(ServiceType.HTTP_CLIENT, request.getProtocolVersion().toString(), "CLIENT");
|
||||
|
||||
int port = host.getPort();
|
||||
trace.recordEndPoint(request.getProtocolVersion() + ":" + host.getHostName() + ((port > 0) ? ":" + port : ""));
|
||||
trace.recordAttribute("http.url", request.getRequestLine().getUri());
|
||||
}
|
||||
trace.recordEndPoint(request.getProtocolVersion() + ":" + host.getHostName() + ((port > 0) ? ":" + port : ""));
|
||||
trace.recordAttribute("http.url", request.getRequestLine().getUri());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void after(Object target, String className, String methodName, String parameterDescription, Object[] args, Object result) {
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("after " + StringUtils.toString(target) + " " + className + "." + methodName + parameterDescription + " args:" + Arrays.toString(args));
|
||||
}
|
||||
@Override
|
||||
public void after(Object target, String className, String methodName, String parameterDescription, Object[] args, Object result) {
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("after " + StringUtils.toString(target) + " " + className + "." + methodName + parameterDescription + " args:" + Arrays.toString(args));
|
||||
}
|
||||
|
||||
TraceContext traceContext = TraceContext.getTraceContext();
|
||||
Trace trace = traceContext.currentTraceObject();
|
||||
if (trace == null) {
|
||||
return;
|
||||
}
|
||||
trace.recordApi(descriptor);
|
||||
trace.recordException(result);
|
||||
TraceContext traceContext = TraceContext.getTraceContext();
|
||||
Trace trace = traceContext.currentTraceObject();
|
||||
if (trace == null) {
|
||||
return;
|
||||
}
|
||||
trace.recordApi(descriptor);
|
||||
trace.recordException(result);
|
||||
|
||||
trace.markAfterTime();
|
||||
trace.traceBlockEnd();
|
||||
}
|
||||
trace.markAfterTime();
|
||||
trace.traceBlockEnd();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setMethodDescriptor(MethodDescriptor descriptor) {
|
||||
this.descriptor = descriptor;
|
||||
}
|
||||
@Override
|
||||
public void setMethodDescriptor(MethodDescriptor descriptor) {
|
||||
this.descriptor = descriptor;
|
||||
}
|
||||
|
||||
private HttpHost extractHost(final URI uri) {
|
||||
if (uri == null) {
|
||||
return null;
|
||||
}
|
||||
HttpHost target = null;
|
||||
if (uri.isAbsolute()) {
|
||||
int port = uri.getPort(); // may be overridden later
|
||||
String host = uri.getHost();
|
||||
if (host == null) { // normal parse failed; let's do it ourselves
|
||||
// authority does not seem to care about the valid character-set
|
||||
// for host names
|
||||
host = uri.getAuthority();
|
||||
if (host != null) {
|
||||
// Strip off any leading user credentials
|
||||
int at = host.indexOf('@');
|
||||
if (at >= 0) {
|
||||
if (host.length() > at + 1) {
|
||||
host = host.substring(at + 1);
|
||||
} else {
|
||||
host = null; // @ on its own
|
||||
}
|
||||
}
|
||||
// Extract the port suffix, if present
|
||||
if (host != null) {
|
||||
int colon = host.indexOf(':');
|
||||
if (colon >= 0) {
|
||||
int pos = colon + 1;
|
||||
int len = 0;
|
||||
for (int i = pos; i < host.length(); i++) {
|
||||
if (Character.isDigit(host.charAt(i))) {
|
||||
len++;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (len > 0) {
|
||||
try {
|
||||
port = Integer.parseInt(host.substring(pos, pos + len));
|
||||
} catch (NumberFormatException ex) {
|
||||
}
|
||||
}
|
||||
host = host.substring(0, colon);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
String scheme = uri.getScheme();
|
||||
if (host != null) {
|
||||
target = new HttpHost(host, port, scheme);
|
||||
}
|
||||
}
|
||||
return target;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user