diff --git a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/pom.xml index c0a897168..8f15dd024 100644 --- a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/pom.xml @@ -28,7 +28,7 @@ apm-armeria-0.85.x-plugin armeria-0.85.x-plugin jar - SkyWalking Agent Plugin for Armeria 0.85.0 ~ 0.97.0 + SkyWalking Agent Plugin for Armeria 0.85.0 ~ 0.98.0 1.8 diff --git a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria085ClientInterceptor.java b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria085ClientInterceptor.java index 1b352dddd..14ecbcb18 100644 --- a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria085ClientInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria085ClientInterceptor.java @@ -20,18 +20,20 @@ package org.apache.skywalking.apm.plugin.armeria; import com.linecorp.armeria.client.UserClient; import com.linecorp.armeria.common.HttpMethod; import com.linecorp.armeria.common.HttpRequest; +import java.lang.reflect.Method; +import java.net.URI; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; -import java.lang.reflect.Method; -import java.net.URI; - -@SuppressWarnings("rawtypes") +@SuppressWarnings({ + "rawtypes", + "unused" +}) public class Armeria085ClientInterceptor extends ArmeriaClientInterceptor { @Override public void beforeMethod(final EnhancedInstance objInst, final Method method, final Object[] allArguments, - final Class[] argumentsTypes, final MethodInterceptResult result) throws Throwable { + final Class[] argumentsTypes, final MethodInterceptResult result) { final UserClient userClient = (UserClient) objInst; final URI uri = userClient.uri(); @@ -48,7 +50,7 @@ public class Armeria085ClientInterceptor extends ArmeriaClientInterceptor { @Override public Object afterMethod(final EnhancedInstance objInst, final Method method, final Object[] allArguments, - final Class[] argumentsTypes, final Object ret) { + final Class[] argumentsTypes, final Object ret) { Object req = allArguments[5]; diff --git a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria085ServerInterceptor.java b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria085ServerInterceptor.java index f326cfba8..6e7e48493 100644 --- a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria085ServerInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria085ServerInterceptor.java @@ -20,6 +20,7 @@ package org.apache.skywalking.apm.plugin.armeria; import com.linecorp.armeria.common.DefaultHttpRequest; import com.linecorp.armeria.common.HttpHeaders; import io.netty.util.AsciiString; +import java.lang.reflect.Method; import org.apache.skywalking.apm.agent.core.context.CarrierItem; import org.apache.skywalking.apm.agent.core.context.ContextCarrier; import org.apache.skywalking.apm.agent.core.context.ContextManager; @@ -31,12 +32,11 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceM import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; -import java.lang.reflect.Method; - +@SuppressWarnings("unused") // actually used public class Armeria085ServerInterceptor implements InstanceMethodsAroundInterceptor { @Override public void beforeMethod(final EnhancedInstance objInst, final Method method, final Object[] allArguments, - final Class[] argumentsTypes, final MethodInterceptResult result) throws Throwable { + final Class[] argumentsTypes, final MethodInterceptResult result) { DefaultHttpRequest httpRequest = (DefaultHttpRequest) allArguments[1]; HttpHeaders headers = httpRequest.headers(); @@ -57,7 +57,7 @@ public class Armeria085ServerInterceptor implements InstanceMethodsAroundInterce @Override public Object afterMethod(final EnhancedInstance objInst, final Method method, final Object[] allArguments, - final Class[] argumentsTypes, final Object ret) { + final Class[] argumentsTypes, final Object ret) { if (ContextManager.isActive()) { ContextManager.stopSpan(); } @@ -66,7 +66,7 @@ public class Armeria085ServerInterceptor implements InstanceMethodsAroundInterce @Override public void handleMethodException(final EnhancedInstance objInst, final Method method, final Object[] allArguments, - final Class[] argumentsTypes, final Throwable t) { + final Class[] argumentsTypes, final Throwable t) { if (ContextManager.isActive()) { ContextManager.activeSpan().errorOccurred().log(t); } diff --git a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria086ClientInterceptor.java b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria086ClientInterceptor.java index 8c193ee61..4987b5cc3 100644 --- a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria086ClientInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria086ClientInterceptor.java @@ -17,21 +17,23 @@ package org.apache.skywalking.apm.plugin.armeria; -import java.lang.reflect.Method; -import java.net.URI; - import com.linecorp.armeria.client.UserClient; import com.linecorp.armeria.common.HttpMethod; import com.linecorp.armeria.common.HttpRequest; +import java.lang.reflect.Method; +import java.net.URI; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; -@SuppressWarnings("rawtypes") +@SuppressWarnings({ + "rawtypes", + "unused" +}) public class Armeria086ClientInterceptor extends ArmeriaClientInterceptor { @Override public void beforeMethod(final EnhancedInstance objInst, final Method method, final Object[] allArguments, - final Class[] argumentsTypes, final MethodInterceptResult result) throws Throwable { + final Class[] argumentsTypes, final MethodInterceptResult result) { final UserClient userClient = (UserClient) objInst; final URI uri = userClient.uri(); @@ -48,7 +50,7 @@ public class Armeria086ClientInterceptor extends ArmeriaClientInterceptor { @Override public Object afterMethod(final EnhancedInstance objInst, final Method method, final Object[] allArguments, - final Class[] argumentsTypes, final Object ret) { + final Class[] argumentsTypes, final Object ret) { Object req = allArguments[6]; diff --git a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria098ClientInterceptor.java b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria098ClientInterceptor.java new file mode 100644 index 000000000..d133aa6f0 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/Armeria098ClientInterceptor.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.skywalking.apm.plugin.armeria; + +import com.linecorp.armeria.client.UserClient; +import com.linecorp.armeria.common.HttpMethod; +import com.linecorp.armeria.common.HttpRequest; +import java.lang.reflect.Method; +import java.net.URI; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; + +@SuppressWarnings({ + "rawtypes", + "unused" +}) +public class Armeria098ClientInterceptor extends ArmeriaClientInterceptor { + + @Override + public void beforeMethod(final EnhancedInstance objInst, final Method method, final Object[] allArguments, + final Class[] argumentsTypes, final MethodInterceptResult result) { + + final UserClient userClient = (UserClient) objInst; + final URI uri = userClient.uri(); + final HttpMethod httpMethod = (HttpMethod) allArguments[1]; + final String path = (String) allArguments[2]; + final Object req = allArguments[5]; + + if (!(req instanceof HttpRequest)) { + return; + } + + beforeMethod(uri, httpMethod, path); + } + + @Override + public Object afterMethod(final EnhancedInstance objInst, final Method method, final Object[] allArguments, + final Class[] argumentsTypes, final Object ret) { + + final Object req = allArguments[5]; + + afterMethod(req); + + return ret; + } +} diff --git a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/ArmeriaClientInterceptor.java b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/ArmeriaClientInterceptor.java index 65c85834a..a62d5c71e 100644 --- a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/ArmeriaClientInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/ArmeriaClientInterceptor.java @@ -17,15 +17,14 @@ package org.apache.skywalking.apm.plugin.armeria; -import java.lang.reflect.Method; -import java.net.URI; - import com.linecorp.armeria.client.Clients; import com.linecorp.armeria.common.HttpHeadersBuilder; import com.linecorp.armeria.common.HttpMethod; import com.linecorp.armeria.common.HttpRequest; import com.linecorp.armeria.common.util.SafeCloseable; import io.netty.util.AsciiString; +import java.lang.reflect.Method; +import java.net.URI; import org.apache.skywalking.apm.agent.core.context.CarrierItem; import org.apache.skywalking.apm.agent.core.context.ContextCarrier; import org.apache.skywalking.apm.agent.core.context.ContextManager; @@ -72,7 +71,7 @@ public abstract class ArmeriaClientInterceptor implements InstanceMethodsAroundI @Override public void handleMethodException(final EnhancedInstance objInst, final Method method, final Object[] allArguments, - final Class[] argumentsTypes, final Throwable t) { + final Class[] argumentsTypes, final Throwable t) { if (ContextManager.isActive()) { ContextManager.activeSpan().errorOccurred().log(t); } diff --git a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/define/Armeria085ClientInstrumentation.java b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/define/Armeria085ClientInstrumentation.java index a415294e1..0f7add1df 100644 --- a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/define/Armeria085ClientInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/define/Armeria085ClientInstrumentation.java @@ -29,6 +29,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName; +/** + * Instruments Armeria client 0.85.x + */ public class Armeria085ClientInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { private static final String ENHANCE_CLASS = "com.linecorp.armeria.client.UserClient"; private static final String INTERCEPTOR_CLASS = "org.apache.skywalking.apm.plugin.armeria.Armeria085ClientInterceptor"; diff --git a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/define/Armeria085ServerInstrumentation.java b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/define/Armeria085ServerInstrumentation.java index e2f85f228..f4857cae7 100644 --- a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/define/Armeria085ServerInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/define/Armeria085ServerInstrumentation.java @@ -28,6 +28,9 @@ import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName; +/** + * Instruments Armeria server 0.85.x + */ public class Armeria085ServerInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { private static final String ENHANCE_CLASS = "com.linecorp.armeria.server.HttpServerHandler"; private static final String INTERCEPTOR_CLASS = "org.apache.skywalking.apm.plugin.armeria.Armeria085ServerInterceptor"; @@ -48,8 +51,9 @@ public class Armeria085ServerInstrumentation extends ClassInstanceMethodsEnhance new InstanceMethodsInterceptPoint() { @Override public ElementMatcher getMethodsMatcher() { - return named("handleRequest").and(takesArgument(0, named("io.netty.channel.ChannelHandlerContext"))) - .and(takesArgument(1, named("com.linecorp.armeria.server.DecodedHttpRequest"))); + return named("handleRequest") + .and(takesArgument(0, named("io.netty.channel.ChannelHandlerContext"))) + .and(takesArgument(1, named("com.linecorp.armeria.server.DecodedHttpRequest"))); } @Override diff --git a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/define/Armeria086ClientInstrumentation.java b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/define/Armeria086ClientInstrumentation.java index 018fe7fa2..f1f17bda8 100644 --- a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/define/Armeria086ClientInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/define/Armeria086ClientInstrumentation.java @@ -29,6 +29,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName; +/** + * Instruments Armeria client 0.86.x ~ 0.97.x + */ public class Armeria086ClientInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { private static final String ENHANCE_CLASS = "com.linecorp.armeria.client.UserClient"; private static final String INTERCEPTOR_CLASS = "org.apache.skywalking.apm.plugin.armeria.Armeria086ClientInterceptor"; diff --git a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/define/Armeria098ClientInstrumentation.java b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/define/Armeria098ClientInstrumentation.java new file mode 100644 index 000000000..d21208071 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/armeria/define/Armeria098ClientInstrumentation.java @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.skywalking.apm.plugin.armeria.define; + +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; +import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; + +import static net.bytebuddy.matcher.ElementMatchers.named; +import static net.bytebuddy.matcher.ElementMatchers.takesArgument; +import static net.bytebuddy.matcher.ElementMatchers.takesArguments; +import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName; + +/** + * Instruments Armeria client 0.98.x + */ +public class Armeria098ClientInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { + private static final String ENHANCE_CLASS = "com.linecorp.armeria.client.UserClient"; + private static final String INTERCEPTOR_CLASS_98 = "org.apache.skywalking.apm.plugin.armeria.Armeria098ClientInterceptor"; + + @Override + protected ClassMatch enhanceClass() { + return byName(ENHANCE_CLASS); + } + + @Override + public ConstructorInterceptPoint[] getConstructorsInterceptPoints() { + return new ConstructorInterceptPoint[0]; + } + + @Override + public InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() { + return new InstanceMethodsInterceptPoint[] { + new InstanceMethodsInterceptPoint() { + @Override + public ElementMatcher getMethodsMatcher() { + return named("execute") + .and(takesArguments(7)) + .and(takesArgument(0, named("com.linecorp.armeria.client.endpoint.EndpointGroup"))) + .and(takesArgument(1, named("com.linecorp.armeria.common.HttpMethod"))) + .and(takesArgument(2, named("java.lang.String"))) + .and(takesArgument(3, named("java.lang.String"))) + .and(takesArgument(4, named("java.lang.String"))); + } + + @Override + public String getMethodsInterceptor() { + return INTERCEPTOR_CLASS_98; + } + + @Override + public boolean isOverrideArgs() { + return false; + } + } + }; + } + + /** + * Witness classes that are added since 0.63.0 + * + * @return witness classes + */ + @Override + protected String[] witnessClasses() { + return new String[] { + "com.linecorp.armeria.common.AbstractHttpHeadersBuilder" + }; + } +} diff --git a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/resources/skywalking-plugin.def index 2702ca918..af6ee9abe 100644 --- a/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/resources/skywalking-plugin.def +++ b/apm-sniffer/apm-sdk-plugin/armeria-0.85.x-plugin/src/main/resources/skywalking-plugin.def @@ -16,4 +16,5 @@ armeria-085=org.apache.skywalking.apm.plugin.armeria.define.Armeria085ServerInstrumentation armeria-085=org.apache.skywalking.apm.plugin.armeria.define.Armeria085ClientInstrumentation -armeria-086=org.apache.skywalking.apm.plugin.armeria.define.Armeria086ClientInstrumentation \ No newline at end of file +armeria-086=org.apache.skywalking.apm.plugin.armeria.define.Armeria086ClientInstrumentation +armeria-098=org.apache.skywalking.apm.plugin.armeria.define.Armeria098ClientInstrumentation \ No newline at end of file