From da0b4ca55f138ea8a4da195693473cf646a9e013 Mon Sep 17 00:00:00 2001 From: IluckySi <1151262684@qq.com> Date: Tue, 17 Oct 2017 10:56:19 +0800 Subject: [PATCH] Suppor Xmemcached V2.x --- ...dConstructorWithComplexArgInterceptor.java | 28 +++++++++++++------ ...ConstructorWithHostPortArgInterceptor.java | 7 +++++ ...orWithInetSocketAddressArgInterceptor.java | 7 +++++ ...thInetSocketAddressListArgInterceptor.java | 12 ++++++-- .../v2/XMemcachedMethodInterceptor.java | 6 ++++ .../v2/XMemcachedMethodInterceptorTest.java | 2 +- 6 files changed, 49 insertions(+), 13 deletions(-) diff --git a/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/main/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedConstructorWithComplexArgInterceptor.java b/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/main/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedConstructorWithComplexArgInterceptor.java index 6a4409f97..491f6a9b0 100644 --- a/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/main/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedConstructorWithComplexArgInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/main/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedConstructorWithComplexArgInterceptor.java @@ -25,6 +25,20 @@ import java.util.Map.Entry; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor; +/** + * {@link XMemcachedConstructorWithComplexArgInterceptor} intercept constructor of + * {@link XMemcachedClient(MemcachedSessionLocator locator,BufferAllocator allocator, Configuration conf, + * Map socketOptions, CommandFactory commandFactory, Transcoder transcoder, + * Map addressMap, List stateListeners, + * Map map, int poolSize, long connectTimeout, String name, boolean failureMode)} or + * {@link XMemcachedClient(MemcachedSessionLocator locator, BufferAllocator allocator, Configuration conf, + * Map socketOptions, CommandFactory commandFactory, Transcoder transcoder, + * Map addressMap, int[] weights, List stateListeners, + * Map infoMap, int poolSize, long connectTimeout, final String name, boolean failureMode)}. + * For parameter addressMap, every k-v is a master standby mode. + * + * @author IluckySi + */ public class XMemcachedConstructorWithComplexArgInterceptor implements InstanceConstructorInterceptor { @Override @@ -32,23 +46,19 @@ public class XMemcachedConstructorWithComplexArgInterceptor implements InstanceC StringBuilder memcachConnInfo = new StringBuilder(); @SuppressWarnings("unchecked") Map inetSocketAddressMap = (Map)allArguments[6]; - StringBuilder master = new StringBuilder(); for (Entry entry : inetSocketAddressMap.entrySet()) { - if (master.length() == 0) { - master = append(master,entry.getKey()); - } + memcachConnInfo = append(memcachConnInfo, entry.getKey()); memcachConnInfo = append(memcachConnInfo, entry.getValue()); } - memcachConnInfo = master.append(memcachConnInfo); - Integer l = memcachConnInfo.length(); - if (l > 1) { - memcachConnInfo = new StringBuilder(memcachConnInfo.substring(0, l - 1)); + Integer length = memcachConnInfo.length(); + if (length > 1) { + memcachConnInfo = new StringBuilder(memcachConnInfo.substring(0, length - 1)); } objInst.setSkyWalkingDynamicField(memcachConnInfo.toString()); } /** - * Parse InetSocketAddress + * Parse InetSocketAddress in specified format * @param sb * @param inetSocketAddress * @return diff --git a/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/main/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedConstructorWithHostPortArgInterceptor.java b/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/main/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedConstructorWithHostPortArgInterceptor.java index d54e2af7f..c2f63fe79 100644 --- a/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/main/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedConstructorWithHostPortArgInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/main/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedConstructorWithHostPortArgInterceptor.java @@ -21,6 +21,13 @@ package org.skywalking.apm.plugin.xmemcached.v2; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor; +/** + * {@link XMemcachedConstructorWithHostPortArgInterceptor} intercept constructor of + * {@link XMemcachedClient(final String host, final int port)} or + * {@link XMemcachedClient(final String host, final int port, int weight)}. + * + * @author IluckySi + */ public class XMemcachedConstructorWithHostPortArgInterceptor implements InstanceConstructorInterceptor { @Override diff --git a/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/main/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedConstructorWithInetSocketAddressArgInterceptor.java b/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/main/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedConstructorWithInetSocketAddressArgInterceptor.java index d013d9d29..023fa9445 100644 --- a/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/main/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedConstructorWithInetSocketAddressArgInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/main/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedConstructorWithInetSocketAddressArgInterceptor.java @@ -23,6 +23,13 @@ import java.net.InetSocketAddress; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor; +/** + * {@link XMemcachedConstructorWithInetSocketAddressArgInterceptor} intercept constructor of + * {@link XMemcachedClient(final InetSocketAddress inetSocketAddress)} or + * {@link XMemcachedClient(final InetSocketAddress inetSocketAddress, int weight)}. + * + * @author IluckySi + */ public class XMemcachedConstructorWithInetSocketAddressArgInterceptor implements InstanceConstructorInterceptor { @Override diff --git a/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/main/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedConstructorWithInetSocketAddressListArgInterceptor.java b/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/main/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedConstructorWithInetSocketAddressListArgInterceptor.java index fb538b346..a38111b98 100644 --- a/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/main/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedConstructorWithInetSocketAddressListArgInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/main/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedConstructorWithInetSocketAddressListArgInterceptor.java @@ -24,6 +24,12 @@ import java.util.List; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor; +/** + * {@link XMemcachedConstructorWithInetSocketAddressListArgInterceptor} intercept constructor of + * {@link XMemcachedClient(List addressList). + * + * @author IluckySi + */ public class XMemcachedConstructorWithInetSocketAddressListArgInterceptor implements InstanceConstructorInterceptor { @Override @@ -36,9 +42,9 @@ public class XMemcachedConstructorWithInetSocketAddressListArgInterceptor implem int port = inetSocketAddress.getPort(); memcachConnInfo.append(host).append(":").append(port).append(";"); } - int l = memcachConnInfo.length(); - if (l > 1) { - memcachConnInfo = new StringBuilder(memcachConnInfo.substring(0, l - 1)); + int length = memcachConnInfo.length(); + if (length > 1) { + memcachConnInfo = new StringBuilder(memcachConnInfo.substring(0, length - 1)); } objInst.setSkyWalkingDynamicField(memcachConnInfo.toString()); } diff --git a/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/main/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedMethodInterceptor.java b/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/main/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedMethodInterceptor.java index 0b34205c1..77fb44440 100644 --- a/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/main/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedMethodInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/main/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedMethodInterceptor.java @@ -29,6 +29,12 @@ import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsA import org.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; import org.skywalking.apm.network.trace.component.ComponentsDefine; +/** + * {@link XMemcachedMethodInterceptor} intercept the operation method, + * record the memcached host, operation name and the key of the operation. + * + * @author IluckySi + */ public class XMemcachedMethodInterceptor implements InstanceMethodsAroundInterceptor { private static final String XMEMCACHED = "XMemcached/"; diff --git a/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/test/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedMethodInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/test/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedMethodInterceptorTest.java index 5e59234b2..96f66d25e 100644 --- a/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/test/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedMethodInterceptorTest.java +++ b/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/src/test/java/org/skywalking/apm/plugin/xmemcached/v2/XMemcachedMethodInterceptorTest.java @@ -116,7 +116,7 @@ public class XMemcachedMethodInterceptorTest { assertThat(span.isExit(), is(true)); assertThat(SpanHelper.getComponentId(span), is(20)); List tags = SpanHelper.getTags(span); - assertThat(tags.get(0).getValue(), is("Memcache")); + assertThat(tags.get(0).getValue(), is("Memcached")); assertThat(tags.get(1).getValue(), is("set OperationKey")); assertThat(SpanHelper.getLayer(span), is(SpanLayer.DB)); }