[유치수] [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:
Chisu Yu
2012-12-10 02:56:32 +00:00
parent ac9f18582d
commit bfaaea4858
@@ -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;
}
}