Skip to content

Commit

Permalink
add param option of httpclient3.
Browse files Browse the repository at this point in the history
  • Loading branch information
jaehong-kim committed Nov 17, 2015
1 parent 1ae5d04 commit 84cfc40
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 57 deletions.
6 changes: 4 additions & 2 deletions agent/src/main/resources/pinpoint.config
Expand Up @@ -176,8 +176,9 @@ profiler.jdbc.dbcp.connectionclose=true
###########################################################
# Apache HTTP Client 3.x #
###########################################################
# Profile HTTP Client 3.x
profiler.apache.httpclient3=true
# Record Parameter.
profiler.apache.httpclient3.param=true

# Record Cookies.
profiler.apache.httpclient3.cookie=true

Expand All @@ -194,6 +195,7 @@ profiler.apache.httpclient3.entity.dumptype=ALWAYS
# 1 out of n entities will be sampled where n is the rate. (10: 10%)
profiler.apache.httpclient3.entity.sampling.rate=1

# Record IO time.
profiler.apache.httpclient3.io=true

###########################################################
Expand Down
Expand Up @@ -19,6 +19,7 @@
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.net.URL;

public final class InterceptorUtils {
private InterceptorUtils() {
Expand Down Expand Up @@ -47,4 +48,29 @@ public static String exceptionToString(Throwable ex) {
}
return null;
}

public static String getHttpUrl(final String urlString, final boolean param) {
if (urlString == null || urlString.length() == 0) {
return "";
}

if (param) {
return urlString;
}

try {
final URL url = new URL(urlString);
final StringBuilder sb = new StringBuilder();
sb.append(url.getProtocol()).append("://");
sb.append(url.getHost());
if (url.getPort() > 0 && url.getPort() != url.getDefaultPort()) {
sb.append(":").append(url.getPort());
}

return sb.toString();
} catch (Exception ignored) {
}

return "";
}
}
Expand Up @@ -131,7 +131,7 @@ public byte[] doInTransform(Instrumentor Instrument, ClassLoader loader, String
execute.addInterceptor("com.navercorp.pinpoint.plugin.httpclient3.interceptor.HttpMethodBaseExecuteMethodInterceptor");
}

if (config.isApacheHttpClient3ProfileIo()) {
if (config.isIo()) {
InstrumentMethod writeRequest = target.getDeclaredMethod("writeRequest", "org.apache.commons.httpclient.HttpState", "org.apache.commons.httpclient.HttpConnection");

if (writeRequest != null) {
Expand Down
Expand Up @@ -25,72 +25,72 @@
*/
public class HttpClient3PluginConfig {

private boolean apacheHttpClient3ProfileCookie = false;
private DumpType apacheHttpClient3ProfileCookieDumpType = DumpType.EXCEPTION;
private int apacheHttpClient3ProfileCookieSamplingRate = 1;
private boolean apacheHttpClient3ProfileEntity = false;
private DumpType apacheHttpClient3ProfileEntityDumpType = DumpType.EXCEPTION;
private int apacheHttpClient3ProfileEntitySamplingRate = 1;
private boolean apacheHttpClient3ProfileIo;
private boolean param = true;
private boolean cookie = false;
private DumpType cookieDumpType = DumpType.EXCEPTION;
private int cookieSamplingRate = 1;
private boolean entity = false;
private DumpType entityDumpType = DumpType.EXCEPTION;
private int entitySamplingRate = 1;
private boolean io;

public HttpClient3PluginConfig(ProfilerConfig src) {
this.apacheHttpClient3ProfileCookie = src.readBoolean("profiler.apache.httpclient3.cookie", false);
this.apacheHttpClient3ProfileCookieDumpType = src.readDumpType("profiler.apache.httpclient3.cookie.dumptype", DumpType.EXCEPTION);
this.apacheHttpClient3ProfileCookieSamplingRate = src.readInt("profiler.apache.httpclient3.cookie.sampling.rate", 1);
this.param = src.readBoolean("profiler.apache.httpclient3.param", true);
this.cookie = src.readBoolean("profiler.apache.httpclient3.cookie", false);
this.cookieDumpType = src.readDumpType("profiler.apache.httpclient3.cookie.dumptype", DumpType.EXCEPTION);
this.cookieSamplingRate = src.readInt("profiler.apache.httpclient3.cookie.sampling.rate", 1);

this.apacheHttpClient3ProfileEntity = src.readBoolean("profiler.apache.httpclient3.entity", false);
this.apacheHttpClient3ProfileEntityDumpType = src.readDumpType("profiler.apache.httpclient3.entity.dumptype", DumpType.EXCEPTION);
this.apacheHttpClient3ProfileEntitySamplingRate = src.readInt("profiler.apache.httpclient3.entity.sampling.rate", 1);
this.entity = src.readBoolean("profiler.apache.httpclient3.entity", false);
this.entityDumpType = src.readDumpType("profiler.apache.httpclient3.entity.dumptype", DumpType.EXCEPTION);
this.entitySamplingRate = src.readInt("profiler.apache.httpclient3.entity.sampling.rate", 1);

this.apacheHttpClient3ProfileIo = src.readBoolean("profiler.apache.httpclient3.io", true);
this.io = src.readBoolean("profiler.apache.httpclient3.io", true);
}

public boolean isApacheHttpClient3ProfileCookie() {
return apacheHttpClient3ProfileCookie;
public boolean isParam() {
return param;
}

public DumpType getApacheHttpClient3ProfileCookieDumpType() {
return apacheHttpClient3ProfileCookieDumpType;
public boolean isCookie() {
return cookie;
}

public int getApacheHttpClient3ProfileCookieSamplingRate() {
return apacheHttpClient3ProfileCookieSamplingRate;
public DumpType getCookieDumpType() {
return cookieDumpType;
}

public boolean isApacheHttpClient3ProfileEntity() {
return apacheHttpClient3ProfileEntity;
public int getCookieSamplingRate() {
return cookieSamplingRate;
}

public DumpType getApacheHttpClient3ProfileEntityDumpType() {
return apacheHttpClient3ProfileEntityDumpType;
public boolean isEntity() {
return entity;
}

public int getApacheHttpClient3ProfileEntitySamplingRate() {
return apacheHttpClient3ProfileEntitySamplingRate;
public DumpType getEntityDumpType() {
return entityDumpType;
}

public boolean isApacheHttpClient3ProfileIo() {
return apacheHttpClient3ProfileIo;
public int getEntitySamplingRate() {
return entitySamplingRate;
}

public boolean isIo() {
return io;
}

@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("{apacheHttpClient3ProfileCookie=");
builder.append(apacheHttpClient3ProfileCookie);
builder.append(", apacheHttpClient3ProfileCookieDumpType=");
builder.append(apacheHttpClient3ProfileCookieDumpType);
builder.append(", apacheHttpClient3ProfileCookieSamplingRate=");
builder.append(apacheHttpClient3ProfileCookieSamplingRate);
builder.append(", apacheHttpClient3ProfileEntity=");
builder.append(apacheHttpClient3ProfileEntity);
builder.append(", apacheHttpClient3ProfileEntityDumpType=");
builder.append(apacheHttpClient3ProfileEntityDumpType);
builder.append(", apacheHttpClient3ProfileEntitySamplingRate=");
builder.append(apacheHttpClient3ProfileEntitySamplingRate);
builder.append(", apacheHttpClient3ProfileIo=");
builder.append(apacheHttpClient3ProfileIo);
builder.append("}");
return builder.toString();
final StringBuilder sb = new StringBuilder("{");
sb.append("param=").append(param);
sb.append(", cookie=").append(cookie);
sb.append(", cookieDumpType=").append(cookieDumpType);
sb.append(", cookieSamplingRate=").append(cookieSamplingRate);
sb.append(", entity=").append(entity);
sb.append(", entityDumpType=").append(entityDumpType);
sb.append(", entitySamplingRate=").append(entitySamplingRate);
sb.append(", io=").append(io);
sb.append('}');
return sb.toString();
}
}
Expand Up @@ -23,6 +23,7 @@
import com.navercorp.pinpoint.bootstrap.interceptor.annotation.Scope;
import com.navercorp.pinpoint.bootstrap.interceptor.scope.InterceptorScopeInvocation;
import com.navercorp.pinpoint.plugin.httpclient3.HttpClient3CallContextFactory;
import com.navercorp.pinpoint.plugin.httpclient3.HttpClient3PluginConfig;
import org.apache.commons.httpclient.HttpConstants;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.URI;
Expand Down Expand Up @@ -75,6 +76,7 @@ public class HttpMethodBaseExecuteMethodInterceptor implements AroundInterceptor
private MethodDescriptor descriptor;
private InterceptorScope interceptorScope;

private boolean param;
private boolean cookie;
private DumpType cookieDumpType;
private SimpleSampler cookieSampler;
Expand All @@ -90,22 +92,23 @@ public HttpMethodBaseExecuteMethodInterceptor(TraceContext traceContext, MethodD
this.descriptor = methodDescriptor;
this.interceptorScope = interceptorScope;

final ProfilerConfig config = traceContext.getProfilerConfig();
this.cookie = config.isApacheHttpClient3ProfileCookie();
this.cookieDumpType = config.getApacheHttpClient3ProfileCookieDumpType();
final HttpClient3PluginConfig config = new HttpClient3PluginConfig(traceContext.getProfilerConfig());
this.param = config.isParam();
this.cookie = config.isCookie();
this.cookieDumpType = config.getCookieDumpType();

if (cookie) {
this.cookieSampler = SimpleSamplerFactory.createSampler(cookie, config.getApacheHttpClient3ProfileCookieSamplingRate());
this.cookieSampler = SimpleSamplerFactory.createSampler(cookie, config.getCookieSamplingRate());
}

this.entity = config.isApacheHttpClient3ProfileEntity();
this.entityDumpType = config.getApacheHttpClient3ProfileEntityDumpType();
this.entity = config.isEntity();
this.entityDumpType = config.getEntityDumpType();

if (entity) {
this.entitySampler = SimpleSamplerFactory.createSampler(entity, config.getApacheHttpClient3ProfileEntitySamplingRate());
this.entitySampler = SimpleSamplerFactory.createSampler(entity, config.getEntitySamplingRate());
}

this.io = config.isApacheHttpClient3ProfileIo();
this.io = config.isIo();
}

@Override
Expand Down Expand Up @@ -185,7 +188,7 @@ public void after(Object target, Object[] args, Object result, Throwable throwab
try {
final URI uri = httpMethod.getURI();
String uriString = uri.getURI();
recorder.recordAttribute(AnnotationKey.HTTP_URL, uriString);
recorder.recordAttribute(AnnotationKey.HTTP_URL, InterceptorUtils.getHttpUrl(uriString, param));
recorder.recordDestinationId(getEndpoint(uri.getHost(), uri.getPort()));
} catch (URIException e) {
logger.error("Fail get URI", e);
Expand Down

0 comments on commit 84cfc40

Please sign in to comment.