diff --git a/.github/workflows/plugins-jdk17-test.0.yaml b/.github/workflows/plugins-jdk17-test.0.yaml index 678acb3b5..a4e7684c9 100644 --- a/.github/workflows/plugins-jdk17-test.0.yaml +++ b/.github/workflows/plugins-jdk17-test.0.yaml @@ -60,6 +60,7 @@ jobs: - jersey-3.x-scenario - jetty-thread-pool-scenario - jetty-11.x-thread-pool-scenario + - grizzly-2.3.x-4.x-scenario steps: - uses: actions/checkout@v2 with: diff --git a/CHANGES.md b/CHANGES.md index abc5b1563..379f2ac32 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -15,6 +15,7 @@ Release Notes. * [Chore] Exclude proto files in the generated jar * Fix Jedis-2.x plugin can not get host info in jedis 3.3.x+ * Change the classloader to locate the agent path in AgentPackagePath, from `SystemClassLoader` to AgentPackagePath's loader. +* Support Grizzly Trace #### Documentation diff --git a/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java b/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java index 9bf62e3fe..2a51285bb 100755 --- a/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java +++ b/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java @@ -235,4 +235,6 @@ public class ComponentsDefine { public static final OfficialComponent JERSEY = new OfficialComponent(146, "Jersey"); + public static final OfficialComponent GRIZZLY = new OfficialComponent(147, "Grizzly"); + } diff --git a/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-plugin/pom.xml new file mode 100644 index 000000000..ffbc68970 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-plugin/pom.xml @@ -0,0 +1,44 @@ + + + + + org.apache.skywalking + apm-sdk-plugin + 8.16.0-SNAPSHOT + + 4.0.0 + + apm-grizzly-2.x-plugin + + + + UTF-8 + 2.4.0 + + + + org.glassfish.grizzly + grizzly-http-server + ${grizzly.version} + provided + + + \ No newline at end of file diff --git a/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/v2/HttpHandlerInterceptor.java b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/v2/HttpHandlerInterceptor.java new file mode 100644 index 000000000..1ffd1dc7b --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/v2/HttpHandlerInterceptor.java @@ -0,0 +1,69 @@ +/* + * 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.grizzly.v2; + +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; +import org.apache.skywalking.apm.agent.core.context.tag.Tags; +import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan; +import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.v2.InstanceMethodsAroundInterceptorV2; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.v2.MethodInvocationContext; +import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; +import org.glassfish.grizzly.http.server.Request; + +public class HttpHandlerInterceptor implements InstanceMethodsAroundInterceptorV2 { + + public static final String GRIZZLY_CONTEXT = "SW_GRIZZLY_CONTEXT"; + + @Override + public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, MethodInvocationContext context) throws Throwable { + // entry span + Request request = (Request) allArguments[0]; + request.getHeaderNames(); + final ContextCarrier carrier = new ContextCarrier(); + CarrierItem items = carrier.items(); + while (items.hasNext()) { + items = items.next(); + items.setHeadValue(request.getHeader(items.getHeadKey())); + } + final AbstractSpan span = ContextManager.createEntrySpan(request.getMethod().getMethodString() + ":" + request.getRequestURI(), carrier); + Tags.URL.set(span, request.getRequestURL().toString()); + Tags.HTTP.METHOD.set(span, request.getMethod().getMethodString()); + span.setComponent(ComponentsDefine.GRIZZLY); + SpanLayer.asHttp(span); + span.prepareForAsync(); + Object[] grizzlyContext = new Object[]{span, ContextManager.capture()}; + request.setAttribute(GRIZZLY_CONTEXT, grizzlyContext); + } + + @Override + public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, Object ret, MethodInvocationContext context) throws Throwable { + ContextManager.stopSpan(); + return ret; + } + + @Override + public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, Throwable t, MethodInvocationContext context) { + ContextManager.activeSpan().log(t); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/v2/HttpServiceInterceptor.java b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/v2/HttpServiceInterceptor.java new file mode 100644 index 000000000..6e0ab1da7 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/v2/HttpServiceInterceptor.java @@ -0,0 +1,66 @@ +/* + * 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.grizzly.v2; + +import java.lang.reflect.Method; +import org.apache.skywalking.apm.agent.core.context.ContextManager; +import org.apache.skywalking.apm.agent.core.context.ContextSnapshot; +import org.apache.skywalking.apm.agent.core.context.tag.Tags; +import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.v2.InstanceMethodsAroundInterceptorV2; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.v2.MethodInvocationContext; +import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; +import org.glassfish.grizzly.http.server.Request; +import org.glassfish.grizzly.http.server.Response; + +import static org.apache.skywalking.apm.plugin.grizzly.v2.HttpHandlerInterceptor.GRIZZLY_CONTEXT; + +public class HttpServiceInterceptor implements InstanceMethodsAroundInterceptorV2 { + + @Override + public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, MethodInvocationContext context) throws Throwable { + Request request = (Request) allArguments[0]; + Object[] grizzlyContext = (Object[]) request.getAttribute(GRIZZLY_CONTEXT); + context.setContext(grizzlyContext); + ContextSnapshot contextSnapshot = (ContextSnapshot) grizzlyContext[1]; + AbstractSpan span = ContextManager.createLocalSpan("GrizzlyRunService"); + span.setComponent(ComponentsDefine.GRIZZLY); + ContextManager.continued(contextSnapshot); + } + + @Override + public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, Object ret, MethodInvocationContext context) throws Throwable { + Object[] grizzlyContext = (Object[]) context.getContext(); + AbstractSpan abstractSpan = (AbstractSpan) grizzlyContext[0]; + ContextManager.stopSpan(); + Response response = (Response) allArguments[1]; + Tags.HTTP_RESPONSE_STATUS_CODE.set(abstractSpan, response.getStatus()); + if (response.getStatus() >= 400) { + abstractSpan.errorOccurred(); + } + abstractSpan.asyncFinish(); + return ret; + } + + @Override + public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, Throwable t, MethodInvocationContext context) { + ContextManager.activeSpan().log(t); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/v2/define/AbstractWitnessInstrumentation.java b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/v2/define/AbstractWitnessInstrumentation.java new file mode 100644 index 000000000..aba43f64f --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/v2/define/AbstractWitnessInstrumentation.java @@ -0,0 +1,36 @@ +/* + * 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.grizzly.v2.define; + +import java.util.Collections; +import java.util.List; +import org.apache.skywalking.apm.agent.core.plugin.WitnessMethod; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.v2.ClassInstanceMethodsEnhancePluginDefineV2; + +import static net.bytebuddy.matcher.ElementMatchers.named; + +public abstract class AbstractWitnessInstrumentation extends ClassInstanceMethodsEnhancePluginDefineV2 { + + @Override + protected List witnessMethods() { + return Collections.singletonList(new WitnessMethod( + "org.glassfish.grizzly.http.server.HttpHandler", + named("runService") + )); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/v2/define/HttpHandlerInstrumentation.java b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/v2/define/HttpHandlerInstrumentation.java new file mode 100644 index 000000000..98be7e090 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/v2/define/HttpHandlerInstrumentation.java @@ -0,0 +1,66 @@ +/* + * 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.grizzly.v2.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.v2.InstanceMethodsInterceptV2Point; +import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; + +import static net.bytebuddy.matcher.ElementMatchers.named; +import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName; + +public class HttpHandlerInstrumentation extends AbstractWitnessInstrumentation { + + private static final String ENHANCE_CLASS = "org.glassfish.grizzly.http.server.HttpHandler"; + private static final String DO_HANDLER_METHOD_INTERCEPTOR = "org.apache.skywalking.apm.plugin.grizzly.v2.HttpHandlerInterceptor"; + + @Override + protected ClassMatch enhanceClass() { + return byName(ENHANCE_CLASS); + } + + @Override + public ConstructorInterceptPoint[] getConstructorsInterceptPoints() { + return new ConstructorInterceptPoint[0]; + } + + @Override + public InstanceMethodsInterceptV2Point[] getInstanceMethodsInterceptV2Points() { + return new InstanceMethodsInterceptV2Point[]{ + new InstanceMethodsInterceptV2Point() { + @Override + public ElementMatcher getMethodsMatcher() { + return named("doHandle"); + } + + @Override + public String getMethodsInterceptorV2() { + return DO_HANDLER_METHOD_INTERCEPTOR; + } + + @Override + public boolean isOverrideArgs() { + return false; + } + } + }; + } +} diff --git a/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/v2/define/HttpServiceInstrumentation.java b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/v2/define/HttpServiceInstrumentation.java new file mode 100644 index 000000000..e71ee163e --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grizzly/v2/define/HttpServiceInstrumentation.java @@ -0,0 +1,66 @@ +/* + * 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.grizzly.v2.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.v2.InstanceMethodsInterceptV2Point; +import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; + +import static net.bytebuddy.matcher.ElementMatchers.named; +import static org.apache.skywalking.apm.agent.core.plugin.match.HierarchyMatch.byHierarchyMatch; + +public class HttpServiceInstrumentation extends AbstractWitnessInstrumentation { + + private static final String SERVICE_METHOD_INTERCEPTOR = "org.apache.skywalking.apm.plugin.grizzly.v2.HttpServiceInterceptor"; + + @Override + protected ClassMatch enhanceClass() { + return byHierarchyMatch("org.glassfish.grizzly.http.server.HttpHandler"); + } + + @Override + public ConstructorInterceptPoint[] getConstructorsInterceptPoints() { + return new ConstructorInterceptPoint[0]; + } + + @Override + public InstanceMethodsInterceptV2Point[] getInstanceMethodsInterceptV2Points() { + return new InstanceMethodsInterceptV2Point[]{ + new InstanceMethodsInterceptV2Point() { + @Override + public ElementMatcher getMethodsMatcher() { + return named("service"); + } + + @Override + public String getMethodsInterceptorV2() { + return SERVICE_METHOD_INTERCEPTOR; + } + + @Override + public boolean isOverrideArgs() { + return false; + } + } + }; + } + +} diff --git a/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-plugin/src/main/resources/skywalking-plugin.def new file mode 100644 index 000000000..b3570393b --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/grizzly-2.3.x-4.x-plugin/src/main/resources/skywalking-plugin.def @@ -0,0 +1,19 @@ +# 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. + +grizzly-2.3.x-4.x=org.apache.skywalking.apm.plugin.grizzly.v2.define.HttpHandlerInstrumentation +grizzly-2.3.x-4.x=org.apache.skywalking.apm.plugin.grizzly.v2.define.HttpServiceInstrumentation + diff --git a/apm-sniffer/apm-sdk-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/pom.xml index 508ea1b67..2f31e7280 100644 --- a/apm-sniffer/apm-sdk-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/pom.xml @@ -129,6 +129,7 @@ jetty-thread-pool-plugin jersey-2.x-plugin jersey-3.x-plugin + grizzly-2.3.x-4.x-plugin pom diff --git a/docs/en/setup/service-agent/java-agent/Plugin-list.md b/docs/en/setup/service-agent/java-agent/Plugin-list.md index 6c0c26a2d..6121cb614 100644 --- a/docs/en/setup/service-agent/java-agent/Plugin-list.md +++ b/docs/en/setup/service-agent/java-agent/Plugin-list.md @@ -161,3 +161,4 @@ - jetty-thread-pool - jersey-2.x - jersey-3.x +- grizzly-2.3.x-4.x diff --git a/docs/en/setup/service-agent/java-agent/Supported-list.md b/docs/en/setup/service-agent/java-agent/Supported-list.md index b4123fda6..77abc6a40 100644 --- a/docs/en/setup/service-agent/java-agent/Supported-list.md +++ b/docs/en/setup/service-agent/java-agent/Supported-list.md @@ -23,6 +23,7 @@ metrics based on the tracing data. * [Netty SocketIO](https://github.com/mrniko/netty-socketio) 1.x * [Micronaut HTTP Server](https://github.com/micronaut-projects/micronaut-core) 3.2.x -> 3.6.x * [Jersey REST framework](https://github.com/eclipse-ee4j/jersey) 2.x -> 3.x + * [Grizzly](https://github.com/eclipse-ee4j/grizzly) 2.3.x -> 4.x * HTTP Client * [Feign](https://github.com/OpenFeign/feign) 9.x * [Netflix Spring Cloud Feign](https://github.com/spring-cloud/spring-cloud-openfeign) 1.1.x -> 2.x diff --git a/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/bin/startup.sh b/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/bin/startup.sh new file mode 100644 index 000000000..8fa9a4f34 --- /dev/null +++ b/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/bin/startup.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# +# 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. + +home="$(cd "$(dirname $0)"; pwd)" + +java -jar ${agent_opts} ${home}/../libs/grizzly-2.3.x-4.x-scenario.jar & \ No newline at end of file diff --git a/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/config/expectedData.yaml b/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/config/expectedData.yaml new file mode 100644 index 000000000..407d84d3a --- /dev/null +++ b/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/config/expectedData.yaml @@ -0,0 +1,132 @@ +# 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. + +segmentItems: + - serviceName: grizzly-2.3.x-4.x-scenario + segmentSize: ge 5 + segments: + - segmentId: not null + spans: + - operationName: GrizzlyRunService + parentSpanId: '-1' + spanId: '0' + spanLayer: Unknown + refs: + - parentEndpoint: 'GET:/grizzly-2.3.x-4.x-scenario/case/receive-context' + networkAddress: '' + refType: CrossThread + parentSpanId: 0 + parentTraceSegmentId: not null + parentServiceInstance: not null + parentService: grizzly-2.3.x-4.x-scenario + traceId: not null + startTime: gt 0 + endTime: gt 0 + componentId: '147' + isError: 'false' + spanType: Local + peer: '' + skipAnalysis: 'false' + - segmentId: not null + spans: + - operationName: 'GET:/grizzly-2.3.x-4.x-scenario/case/receive-context' + parentSpanId: '-1' + spanId: '0' + spanLayer: Http + tags: + - key: url + value: http://127.0.0.1:18181/grizzly-2.3.x-4.x-scenario/case/receive-context + - key: http.method + value: GET + - key: http.status_code + value: '200' + refs: + - parentEndpoint: GrizzlyRunService + networkAddress: '127.0.0.1:18181' + refType: CrossProcess + parentSpanId: 1 + parentTraceSegmentId: not null + parentServiceInstance: not null + parentService: grizzly-2.3.x-4.x-scenario + traceId: not null + startTime: gt 0 + endTime: gt 0 + componentId: '147' + isError: 'false' + spanType: Entry + peer: '' + skipAnalysis: 'false' + - segmentId: not null + spans: + - operationName: 'GET:/grizzly-2.3.x-4.x-scenario/case/grizzly-2.3.x-4.x-scenario' + parentSpanId: '-1' + spanId: '0' + spanLayer: Http + tags: + - key: url + value: http://localhost:18181/grizzly-2.3.x-4.x-scenario/case/grizzly-2.3.x-4.x-scenario + - key: http.method + value: GET + - key: http.status_code + value: '200' + startTime: gt 0 + endTime: gt 0 + componentId: '147' + isError: 'false' + spanType: Entry + peer: '' + skipAnalysis: 'false' + - segmentId: not null + spans: + - operationName: /grizzly-2.3.x-4.x-scenario/case/receive-context + parentSpanId: '0' + spanId: '1' + spanLayer: Http + tags: + - key: http.method + value: GET + - key: url + value: http://127.0.0.1:18181/grizzly-2.3.x-4.x-scenario/case/receive-context + - key: http.status_code + value: '200' + startTime: gt 0 + endTime: gt 0 + componentId: '12' + isError: 'false' + spanType: Exit + peer: '127.0.0.1:18181' + skipAnalysis: 'false' + - operationName: GrizzlyRunService + parentSpanId: '-1' + spanId: '0' + spanLayer: Unknown + refs: + - parentEndpoint: 'GET:/grizzly-2.3.x-4.x-scenario/case/grizzly-2.3.x-4.x-scenario' + networkAddress: '' + refType: CrossThread + parentSpanId: 0 + parentTraceSegmentId: not null + parentServiceInstance: not null + parentService: grizzly-2.3.x-4.x-scenario + traceId: not null + startTime: gt 0 + endTime: gt 0 + componentId: '147' + isError: 'false' + spanType: Local + peer: '' + skipAnalysis: 'false' + diff --git a/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/configuration.yml b/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/configuration.yml new file mode 100644 index 000000000..edaf117b2 --- /dev/null +++ b/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/configuration.yml @@ -0,0 +1,22 @@ +# 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. + +type: jvm +entryService: http://localhost:18181/grizzly-2.3.x-4.x-scenario/case/grizzly-2.3.x-4.x-scenario +healthCheck: http://localhost:18181/grizzly-2.3.x-4.x-scenario/case/healthCheck +startScript: ./bin/startup.sh +environment: +dependencies: diff --git a/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/pom.xml b/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/pom.xml new file mode 100644 index 000000000..60f843edc --- /dev/null +++ b/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/pom.xml @@ -0,0 +1,122 @@ + + + + + org.apache.skywalking.apm.testcase + grizzly-2.3.x-4.x-scenario + 1.0.0 + jar + + 4.0.0 + + + UTF-8 + 1.8 + 3.8.1 + + 4.0.0 + + 2.6.2 + + + skywalking-grizzly-2.3.x-4.x-scenario + + + + org.glassfish.grizzly + grizzly-http-server + ${test.framework.version} + + + com.squareup.okhttp + okhttp + 2.4.0 + + + + + + grizzly-2.3.x-4.x-scenario + + + org.apache.maven.plugins + maven-shade-plugin + 3.1.0 + + + package + + shade + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + test.apache.skywalking.apm.testcase.grizzly.Application + + + + + + + + + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${compiler.version} + ${compiler.version} + ${project.build.sourceEncoding} + + + + org.apache.maven.plugins + maven-assembly-plugin + + + assemble + package + + single + + + + src/main/assembly/assembly.xml + + ./target/ + + + + + + + diff --git a/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/src/main/assembly/assembly.xml b/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/src/main/assembly/assembly.xml new file mode 100644 index 000000000..ecfcc295c --- /dev/null +++ b/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/src/main/assembly/assembly.xml @@ -0,0 +1,41 @@ + + + + + zip + + + + + ./bin + 0775 + + + + + + ${project.build.directory}/grizzly-2.3.x-4.x-scenario.jar + ./libs + 0775 + + + diff --git a/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/Application.java b/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/Application.java new file mode 100644 index 000000000..1dd28c597 --- /dev/null +++ b/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/Application.java @@ -0,0 +1,46 @@ +/* + * 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 test.apache.skywalking.apm.testcase.grizzly; + +import java.io.IOException; +import org.glassfish.grizzly.http.server.HttpServer; +import org.glassfish.grizzly.http.server.NetworkListener; +import test.apache.skywalking.apm.testcase.grizzly.controller.CaseHandler; +import test.apache.skywalking.apm.testcase.grizzly.controller.HealCheckHandler; +import test.apache.skywalking.apm.testcase.grizzly.controller.ReceiveContextHandler; + +public class Application { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpServer server = new HttpServer(); + NetworkListener networkListener = new NetworkListener("grizzly-scenariotest", + "0.0.0.0", 18181); + server.addListener(networkListener); + server.getServerConfiguration().addHttpHandler(new CaseHandler(), + "/grizzly-2.3.x-4.x-scenario/case/grizzly-2.3.x-4.x-scenario"); + server.getServerConfiguration() + .addHttpHandler(new HealCheckHandler(), + "/grizzly-2.3.x-4.x-scenario/case/healthCheck"); + server.getServerConfiguration().addHttpHandler(new ReceiveContextHandler(), + "/grizzly-2.3.x-4.x-scenario/case/receive-context"); + server.start(); + Thread.sleep(10000); + System.in.read(); + } +} diff --git a/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/controller/CaseHandler.java b/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/controller/CaseHandler.java new file mode 100644 index 000000000..e03982585 --- /dev/null +++ b/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/controller/CaseHandler.java @@ -0,0 +1,45 @@ +/* + * 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 test.apache.skywalking.apm.testcase.grizzly.controller; + +import com.squareup.okhttp.OkHttpClient; +import java.io.IOException; +import org.glassfish.grizzly.http.server.HttpHandler; +import org.glassfish.grizzly.http.server.Request; +import org.glassfish.grizzly.http.server.Response; + +public class CaseHandler extends HttpHandler { + + @Override + public void service(Request request, Response response) throws Exception { + + com.squareup.okhttp.Request okhttpRequest = new com.squareup.okhttp.Request.Builder().url( + "http://127.0.0.1:18181/grizzly-2.3.x-4.x-scenario/case/receive-context") + .build(); + try { + new OkHttpClient().newCall(okhttpRequest).execute(); + } catch (IOException e) { + throw new RuntimeException(e); + } + String hello = "hello"; + response.setContentType("text/plain"); + response.setContentLength(hello.length()); + response.getWriter().write(hello); + } +} diff --git a/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/controller/HealCheckHandler.java b/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/controller/HealCheckHandler.java new file mode 100644 index 000000000..ba3011fc1 --- /dev/null +++ b/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/controller/HealCheckHandler.java @@ -0,0 +1,34 @@ +/* + * 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 test.apache.skywalking.apm.testcase.grizzly.controller; + +import org.glassfish.grizzly.http.server.HttpHandler; +import org.glassfish.grizzly.http.server.Request; +import org.glassfish.grizzly.http.server.Response; + +public class HealCheckHandler extends HttpHandler { + + @Override + public void service(Request request, Response response) throws Exception { + String hello = "hello"; + response.setContentType("text/plain"); + response.setContentLength(hello.length()); + response.getWriter().write(hello); + } +} diff --git a/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/controller/ReceiveContextHandler.java b/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/controller/ReceiveContextHandler.java new file mode 100644 index 000000000..0459bc712 --- /dev/null +++ b/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/grizzly/controller/ReceiveContextHandler.java @@ -0,0 +1,34 @@ +/* + * 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 test.apache.skywalking.apm.testcase.grizzly.controller; + +import org.glassfish.grizzly.http.server.HttpHandler; +import org.glassfish.grizzly.http.server.Request; +import org.glassfish.grizzly.http.server.Response; + +public class ReceiveContextHandler extends HttpHandler { + + @Override + public void service(Request request, Response response) throws Exception { + String hello = "hello"; + response.setContentType("text/plain"); + response.setContentLength(hello.length()); + response.getWriter().write(hello); + } +} diff --git a/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/support-version.list b/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/support-version.list new file mode 100644 index 000000000..ad4820f8d --- /dev/null +++ b/test/plugin/scenarios/grizzly-2.3.x-4.x-scenario/support-version.list @@ -0,0 +1,20 @@ +# 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. + +2.3.35 +2.4.4 +3.0.1 +4.0.0 \ No newline at end of file diff --git a/test/plugin/scenarios/jersey-2.0.x-2.25.x-scenario/config/expectedData.yaml b/test/plugin/scenarios/jersey-2.0.x-2.25.x-scenario/config/expectedData.yaml index 0c1e3ba4e..787a5ea16 100644 --- a/test/plugin/scenarios/jersey-2.0.x-2.25.x-scenario/config/expectedData.yaml +++ b/test/plugin/scenarios/jersey-2.0.x-2.25.x-scenario/config/expectedData.yaml @@ -16,58 +16,158 @@ segmentItems: - serviceName: jersey-2.0.x-2.25.x-scenario - segmentSize: ge 3 + segmentSize: ge 4 segments: - segmentId: not null spans: - - operationName: not null - parentSpanId: -1 - spanId: 0 - spanLayer: Http - startTime: gt 0 - endTime: gt 0 - componentId: 146 - isError: false - spanType: Entry - peer: '' - skipAnalysis: false - tags: - - {key: url, value: 'http://127.0.0.1:18080/jersey-2.0.x-2.25.x-scenario/case/receiveContext'} - - {key: http.method, value: GET} - refs: - - {parentEndpoint: not null, networkAddress: '127.0.0.1:18080', - refType: CrossProcess, parentSpanId: 1, parentTraceSegmentId: not null, - parentServiceInstance: not null, parentService: jersey-2.0.x-2.25.x-scenario, - traceId: not null} + - operationName: GET:/jersey-2.0.x-2.25.x-scenario/case/jersey-2.0.x-2.25.x-scenario + parentSpanId: '-1' + spanId: '0' + spanLayer: Http + tags: + - key: url + value: http://localhost:18080/jersey-2.0.x-2.25.x-scenario/case/jersey-2.0.x-2.25.x-scenario + - key: http.method + value: GET + - key: http.status_code + value: '200' + startTime: gt 0 + endTime: gt 0 + componentId: '147' + isError: 'false' + spanType: Entry + peer: '' + skipAnalysis: 'false' - segmentId: not null spans: - - operationName: /jersey-2.0.x-2.25.x-scenario/case/receiveContext - parentSpanId: 0 - spanId: 1 - spanLayer: Http - startTime: gt 0 - endTime: gt 0 - componentId: 12 - isError: false - spanType: Exit - peer: 127.0.0.1:18080 - skipAnalysis: false - tags: - - {key: http.method, value: GET} - - {key: url, value: 'http://127.0.0.1:18080/jersey-2.0.x-2.25.x-scenario/case/receiveContext'} - - {key: http.status_code, value: '200'} - - operationName: not null - parentSpanId: -1 - spanId: 0 - spanLayer: Http - startTime: gt 0 - endTime: gt 0 - componentId: 146 - isError: false - spanType: Entry - peer: '' - skipAnalysis: false - tags: - - {key: url, value: 'http://localhost:18080/jersey-2.0.x-2.25.x-scenario/case/jersey-2.0.x-2.25.x-scenario'} - - {key: http.method, value: GET} + - operationName: not null + parentSpanId: '0' + spanId: '1' + spanLayer: Http + tags: + - key: url + value: http://127.0.0.1:18080/jersey-2.0.x-2.25.x-scenario/case/receiveContext + - key: http.method + value: GET + refs: + - parentEndpoint: not null + networkAddress: '127.0.0.1:18080' + refType: CrossProcess + parentSpanId: 2 + parentTraceSegmentId: not null + parentServiceInstance: not null + parentService: jersey-2.0.x-2.25.x-scenario + traceId: not null + startTime: gt 0 + endTime: gt 0 + componentId: '146' + isError: 'false' + spanType: Entry + peer: '' + skipAnalysis: 'false' + - operationName: GrizzlyRunService + parentSpanId: '-1' + spanId: '0' + spanLayer: Unknown + refs: + - parentEndpoint: 'GET:/jersey-2.0.x-2.25.x-scenario/case/receiveContext' + networkAddress: '' + refType: CrossThread + parentSpanId: 0 + parentTraceSegmentId: not null + parentServiceInstance: not null + parentService: jersey-2.0.x-2.25.x-scenario + traceId: not null + startTime: gt 0 + endTime: gt 0 + componentId: '147' + isError: 'false' + spanType: Local + peer: '' + skipAnalysis: 'false' + - segmentId: not null + spans: + - operationName: 'GET:/jersey-2.0.x-2.25.x-scenario/case/receiveContext' + parentSpanId: '-1' + spanId: '0' + spanLayer: Http + tags: + - key: url + value: http://127.0.0.1:18080/jersey-2.0.x-2.25.x-scenario/case/receiveContext + - key: http.method + value: GET + - key: http.status_code + value: '200' + refs: + - parentEndpoint: not null + networkAddress: '127.0.0.1:18080' + refType: CrossProcess + parentSpanId: 2 + parentTraceSegmentId: not null + parentServiceInstance: not null + parentService: jersey-2.0.x-2.25.x-scenario + traceId: not null + startTime: gt 0 + endTime: gt 0 + componentId: '147' + isError: 'false' + spanType: Entry + peer: '' + skipAnalysis: 'false' + - segmentId: not null + spans: + - operationName: /jersey-2.0.x-2.25.x-scenario/case/receiveContext + parentSpanId: '1' + spanId: '2' + spanLayer: Http + tags: + - key: http.method + value: GET + - key: url + value: http://127.0.0.1:18080/jersey-2.0.x-2.25.x-scenario/case/receiveContext + - key: http.status_code + value: '200' + startTime: gt 0 + endTime: gt 0 + componentId: '12' + isError: 'false' + spanType: Exit + peer: '127.0.0.1:18080' + skipAnalysis: 'false' + - operationName: not null + parentSpanId: '0' + spanId: '1' + spanLayer: Http + tags: + - key: url + value: http://localhost:18080/jersey-2.0.x-2.25.x-scenario/case/jersey-2.0.x-2.25.x-scenario + - key: http.method + value: GET + startTime: gt 0 + endTime: gt 0 + componentId: '146' + isError: 'false' + spanType: Entry + peer: '' + skipAnalysis: 'false' + - operationName: GrizzlyRunService + parentSpanId: '-1' + spanId: '0' + spanLayer: Unknown + refs: + - parentEndpoint: GET:/jersey-2.0.x-2.25.x-scenario/case/jersey-2.0.x-2.25.x-scenario + networkAddress: '' + refType: CrossThread + parentSpanId: 0 + parentTraceSegmentId: not null + parentServiceInstance: not null + parentService: jersey-2.0.x-2.25.x-scenario + traceId: not null + startTime: gt 0 + endTime: gt 0 + componentId: '147' + isError: 'false' + spanType: Local + peer: '' + skipAnalysis: 'false' diff --git a/test/plugin/scenarios/jersey-2.26.x-2.39.x-scenario/config/expectedData.yaml b/test/plugin/scenarios/jersey-2.26.x-2.39.x-scenario/config/expectedData.yaml index 1bae35e93..7f1bf3b79 100644 --- a/test/plugin/scenarios/jersey-2.26.x-2.39.x-scenario/config/expectedData.yaml +++ b/test/plugin/scenarios/jersey-2.26.x-2.39.x-scenario/config/expectedData.yaml @@ -16,58 +16,158 @@ segmentItems: - serviceName: jersey-2.26.x-2.39.x-scenario - segmentSize: ge 3 + segmentSize: ge 4 segments: - segmentId: not null spans: - - operationName: not null - parentSpanId: -1 - spanId: 0 - spanLayer: Http - startTime: gt 0 - endTime: gt 0 - componentId: 146 - isError: false - spanType: Entry - peer: '' - skipAnalysis: false - tags: - - {key: url, value: 'http://127.0.0.1:18080/jersey-2.26.x-2.39.x-scenario/case/receiveContext'} - - {key: http.method, value: GET} - refs: - - {parentEndpoint: not null, networkAddress: '127.0.0.1:18080', - refType: CrossProcess, parentSpanId: 1, parentTraceSegmentId: not null, - parentServiceInstance: not null, parentService: jersey-2.26.x-2.39.x-scenario, - traceId: not null} + - operationName: GET:/jersey-2.26.x-2.39.x-scenario/case/jersey-2.26.x-2.39.x-scenario + parentSpanId: '-1' + spanId: '0' + spanLayer: Http + tags: + - key: url + value: http://localhost:18080/jersey-2.26.x-2.39.x-scenario/case/jersey-2.26.x-2.39.x-scenario + - key: http.method + value: GET + - key: http.status_code + value: '200' + startTime: gt 0 + endTime: gt 0 + componentId: '147' + isError: 'false' + spanType: Entry + peer: '' + skipAnalysis: 'false' - segmentId: not null spans: - - operationName: /jersey-2.26.x-2.39.x-scenario/case/receiveContext - parentSpanId: 0 - spanId: 1 - spanLayer: Http - startTime: gt 0 - endTime: gt 0 - componentId: 12 - isError: false - spanType: Exit - peer: 127.0.0.1:18080 - skipAnalysis: false - tags: - - {key: http.method, value: GET} - - {key: url, value: 'http://127.0.0.1:18080/jersey-2.26.x-2.39.x-scenario/case/receiveContext'} - - {key: http.status_code, value: '200'} - - operationName: not null - parentSpanId: -1 - spanId: 0 - spanLayer: Http - startTime: gt 0 - endTime: gt 0 - componentId: 146 - isError: false - spanType: Entry - peer: '' - skipAnalysis: false - tags: - - {key: url, value: 'http://localhost:18080/jersey-2.26.x-2.39.x-scenario/case/jersey-2.26.x-2.39.x-scenario'} - - {key: http.method, value: GET} + - operationName: not null + parentSpanId: '0' + spanId: '1' + spanLayer: Http + tags: + - key: url + value: http://127.0.0.1:18080/jersey-2.26.x-2.39.x-scenario/case/receiveContext + - key: http.method + value: GET + refs: + - parentEndpoint: not null + networkAddress: '127.0.0.1:18080' + refType: CrossProcess + parentSpanId: 2 + parentTraceSegmentId: not null + parentServiceInstance: not null + parentService: jersey-2.26.x-2.39.x-scenario + traceId: not null + startTime: gt 0 + endTime: gt 0 + componentId: '146' + isError: 'false' + spanType: Entry + peer: '' + skipAnalysis: 'false' + - operationName: GrizzlyRunService + parentSpanId: '-1' + spanId: '0' + spanLayer: Unknown + refs: + - parentEndpoint: 'GET:/jersey-2.26.x-2.39.x-scenario/case/receiveContext' + networkAddress: '' + refType: CrossThread + parentSpanId: 0 + parentTraceSegmentId: not null + parentServiceInstance: not null + parentService: jersey-2.26.x-2.39.x-scenario + traceId: not null + startTime: gt 0 + endTime: gt 0 + componentId: '147' + isError: 'false' + spanType: Local + peer: '' + skipAnalysis: 'false' + - segmentId: not null + spans: + - operationName: 'GET:/jersey-2.26.x-2.39.x-scenario/case/receiveContext' + parentSpanId: '-1' + spanId: '0' + spanLayer: Http + tags: + - key: url + value: http://127.0.0.1:18080/jersey-2.26.x-2.39.x-scenario/case/receiveContext + - key: http.method + value: GET + - key: http.status_code + value: '200' + refs: + - parentEndpoint: not null + networkAddress: '127.0.0.1:18080' + refType: CrossProcess + parentSpanId: 2 + parentTraceSegmentId: not null + parentServiceInstance: not null + parentService: jersey-2.26.x-2.39.x-scenario + traceId: not null + startTime: gt 0 + endTime: gt 0 + componentId: '147' + isError: 'false' + spanType: Entry + peer: '' + skipAnalysis: 'false' + - segmentId: not null + spans: + - operationName: /jersey-2.26.x-2.39.x-scenario/case/receiveContext + parentSpanId: '1' + spanId: '2' + spanLayer: Http + tags: + - key: http.method + value: GET + - key: url + value: http://127.0.0.1:18080/jersey-2.26.x-2.39.x-scenario/case/receiveContext + - key: http.status_code + value: '200' + startTime: gt 0 + endTime: gt 0 + componentId: '12' + isError: 'false' + spanType: Exit + peer: '127.0.0.1:18080' + skipAnalysis: 'false' + - operationName: not null + parentSpanId: '0' + spanId: '1' + spanLayer: Http + tags: + - key: url + value: http://localhost:18080/jersey-2.26.x-2.39.x-scenario/case/jersey-2.26.x-2.39.x-scenario + - key: http.method + value: GET + startTime: gt 0 + endTime: gt 0 + componentId: '146' + isError: 'false' + spanType: Entry + peer: '' + skipAnalysis: 'false' + - operationName: GrizzlyRunService + parentSpanId: '-1' + spanId: '0' + spanLayer: Unknown + refs: + - parentEndpoint: GET:/jersey-2.26.x-2.39.x-scenario/case/jersey-2.26.x-2.39.x-scenario + networkAddress: '' + refType: CrossThread + parentSpanId: 0 + parentTraceSegmentId: not null + parentServiceInstance: not null + parentService: jersey-2.26.x-2.39.x-scenario + traceId: not null + startTime: gt 0 + endTime: gt 0 + componentId: '147' + isError: 'false' + spanType: Local + peer: '' + skipAnalysis: 'false' diff --git a/test/plugin/scenarios/jersey-3.x-scenario/config/expectedData.yaml b/test/plugin/scenarios/jersey-3.x-scenario/config/expectedData.yaml index 1c688c182..4c251717b 100644 --- a/test/plugin/scenarios/jersey-3.x-scenario/config/expectedData.yaml +++ b/test/plugin/scenarios/jersey-3.x-scenario/config/expectedData.yaml @@ -16,58 +16,158 @@ segmentItems: - serviceName: jersey-3.x-scenario - segmentSize: ge 3 + segmentSize: ge 4 segments: - segmentId: not null spans: - - operationName: not null - parentSpanId: -1 - spanId: 0 - spanLayer: Http - startTime: gt 0 - endTime: gt 0 - componentId: 146 - isError: false - spanType: Entry - peer: '' - skipAnalysis: false - tags: - - {key: url, value: 'http://127.0.0.1:18080/jersey-3.x-scenario/case/receiveContext'} - - {key: http.method, value: GET} - refs: - - {parentEndpoint: not null, networkAddress: '127.0.0.1:18080', - refType: CrossProcess, parentSpanId: 1, parentTraceSegmentId: not null, - parentServiceInstance: not null, parentService: jersey-3.x-scenario, - traceId: not null} + - operationName: GET:/jersey-3.x-scenario/case/jersey-3.x-scenario + parentSpanId: '-1' + spanId: '0' + spanLayer: Http + tags: + - key: url + value: http://localhost:18080/jersey-3.x-scenario/case/jersey-3.x-scenario + - key: http.method + value: GET + - key: http.status_code + value: '200' + startTime: gt 0 + endTime: gt 0 + componentId: '147' + isError: 'false' + spanType: Entry + peer: '' + skipAnalysis: 'false' - segmentId: not null spans: - - operationName: /jersey-3.x-scenario/case/receiveContext - parentSpanId: 0 - spanId: 1 - spanLayer: Http - startTime: gt 0 - endTime: gt 0 - componentId: 12 - isError: false - spanType: Exit - peer: 127.0.0.1:18080 - skipAnalysis: false - tags: - - {key: http.method, value: GET} - - {key: url, value: 'http://127.0.0.1:18080/jersey-3.x-scenario/case/receiveContext'} - - {key: http.status_code, value: '200'} - - operationName: not null - parentSpanId: -1 - spanId: 0 - spanLayer: Http - startTime: gt 0 - endTime: gt 0 - componentId: 146 - isError: false - spanType: Entry - peer: '' - skipAnalysis: false - tags: - - {key: url, value: 'http://localhost:18080/jersey-3.x-scenario/case/jersey-3.x-scenario'} - - {key: http.method, value: GET} + - operationName: not null + parentSpanId: '0' + spanId: '1' + spanLayer: Http + tags: + - key: url + value: http://127.0.0.1:18080/jersey-3.x-scenario/case/receiveContext + - key: http.method + value: GET + refs: + - parentEndpoint: not null + networkAddress: '127.0.0.1:18080' + refType: CrossProcess + parentSpanId: 2 + parentTraceSegmentId: not null + parentServiceInstance: not null + parentService: jersey-3.x-scenario + traceId: not null + startTime: gt 0 + endTime: gt 0 + componentId: '146' + isError: 'false' + spanType: Entry + peer: '' + skipAnalysis: 'false' + - operationName: GrizzlyRunService + parentSpanId: '-1' + spanId: '0' + spanLayer: Unknown + refs: + - parentEndpoint: 'GET:/jersey-3.x-scenario/case/receiveContext' + networkAddress: '' + refType: CrossThread + parentSpanId: 0 + parentTraceSegmentId: not null + parentServiceInstance: not null + parentService: jersey-3.x-scenario + traceId: not null + startTime: gt 0 + endTime: gt 0 + componentId: '147' + isError: 'false' + spanType: Local + peer: '' + skipAnalysis: 'false' + - segmentId: not null + spans: + - operationName: 'GET:/jersey-3.x-scenario/case/receiveContext' + parentSpanId: '-1' + spanId: '0' + spanLayer: Http + tags: + - key: url + value: http://127.0.0.1:18080/jersey-3.x-scenario/case/receiveContext + - key: http.method + value: GET + - key: http.status_code + value: '200' + refs: + - parentEndpoint: not null + networkAddress: '127.0.0.1:18080' + refType: CrossProcess + parentSpanId: 2 + parentTraceSegmentId: not null + parentServiceInstance: not null + parentService: jersey-3.x-scenario + traceId: not null + startTime: gt 0 + endTime: gt 0 + componentId: '147' + isError: 'false' + spanType: Entry + peer: '' + skipAnalysis: 'false' + - segmentId: not null + spans: + - operationName: /jersey-3.x-scenario/case/receiveContext + parentSpanId: '1' + spanId: '2' + spanLayer: Http + tags: + - key: http.method + value: GET + - key: url + value: http://127.0.0.1:18080/jersey-3.x-scenario/case/receiveContext + - key: http.status_code + value: '200' + startTime: gt 0 + endTime: gt 0 + componentId: '12' + isError: 'false' + spanType: Exit + peer: '127.0.0.1:18080' + skipAnalysis: 'false' + - operationName: not null + parentSpanId: '0' + spanId: '1' + spanLayer: Http + tags: + - key: url + value: http://localhost:18080/jersey-3.x-scenario/case/jersey-3.x-scenario + - key: http.method + value: GET + startTime: gt 0 + endTime: gt 0 + componentId: '146' + isError: 'false' + spanType: Entry + peer: '' + skipAnalysis: 'false' + - operationName: GrizzlyRunService + parentSpanId: '-1' + spanId: '0' + spanLayer: Unknown + refs: + - parentEndpoint: GET:/jersey-3.x-scenario/case/jersey-3.x-scenario + networkAddress: '' + refType: CrossThread + parentSpanId: 0 + parentTraceSegmentId: not null + parentServiceInstance: not null + parentService: jersey-3.x-scenario + traceId: not null + startTime: gt 0 + endTime: gt 0 + componentId: '147' + isError: 'false' + spanType: Local + peer: '' + skipAnalysis: 'false'