diff --git a/CHANGES.md b/CHANGES.md index c3a4c6efef66a3fa137cea3d68a42b3ddc33779d..ddd2224547f9e48d1f29f33e14a76de151e0b011 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -17,7 +17,8 @@ Release Notes. * Add Seata in the component definition. Seata plugin hosts on Seata project. * Extended Kafka plugin to properly trace consumers that have topic partitions directly assigned. * Support print SkyWalking context to logs. -* Add `MessageListener` enhancement in pulsar plugin +* Add `MessageListener` enhancement in pulsar plugin. +* fix a bug that spring-mvc set an error endpoint name if the controller class annotation implements an interface. * Add an optional agent plugin to support mybatis. #### OAP-Backend diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v3/ControllerConstructorInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v3/ControllerConstructorInterceptor.java index 1df6f58f25f1752e6b849a6e216cf4bad3757d15..5fa4f0a60b696ff92b0028bc4c2030498be284b9 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v3/ControllerConstructorInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v3/ControllerConstructorInterceptor.java @@ -22,6 +22,7 @@ import org.apache.skywalking.apm.plugin.spring.mvc.commons.PathMappingCache; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor; import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache; +import org.springframework.core.annotation.AnnotationUtils; import org.springframework.web.bind.annotation.RequestMapping; /** @@ -32,7 +33,7 @@ public class ControllerConstructorInterceptor implements InstanceConstructorInte @Override public void onConstruct(EnhancedInstance objInst, Object[] allArguments) { String basePath = ""; - RequestMapping basePathRequestMapping = objInst.getClass().getAnnotation(RequestMapping.class); + RequestMapping basePathRequestMapping = AnnotationUtils.findAnnotation(objInst.getClass(), RequestMapping.class); if (basePathRequestMapping != null) { if (basePathRequestMapping.value().length > 0) { basePath = basePathRequestMapping.value()[0]; diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/ControllerConstructorInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/ControllerConstructorInterceptor.java index 2930c55473afcc5f25b7806f46655fb3cf20ce2f..1e540fa5121cfb511a4acd7ca6f74e2781e7872b 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/ControllerConstructorInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/ControllerConstructorInterceptor.java @@ -22,6 +22,7 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedI import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache; import org.apache.skywalking.apm.plugin.spring.mvc.commons.PathMappingCache; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor; +import org.springframework.core.annotation.AnnotationUtils; import org.springframework.web.bind.annotation.RequestMapping; /** @@ -42,7 +43,7 @@ public class ControllerConstructorInterceptor implements InstanceConstructorInte @Override public void onConstruct(EnhancedInstance objInst, Object[] allArguments) { String basePath = ""; - RequestMapping basePathRequestMapping = objInst.getClass().getAnnotation(RequestMapping.class); + RequestMapping basePathRequestMapping = AnnotationUtils.findAnnotation(objInst.getClass(), RequestMapping.class); if (basePathRequestMapping != null) { if (basePathRequestMapping.value().length > 0) { basePath = basePathRequestMapping.value()[0]; diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/ControllerForLowVersionConstructorInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/ControllerForLowVersionConstructorInterceptor.java index 9bcbc6cabab93932f6002ce6080471621dd54b58..6a5c19bc9dba6661a5efada38f12c0ff6deb33f7 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/ControllerForLowVersionConstructorInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/ControllerForLowVersionConstructorInterceptor.java @@ -22,13 +22,14 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedI import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor; import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache; import org.apache.skywalking.apm.plugin.spring.mvc.commons.PathMappingCache; +import org.springframework.core.annotation.AnnotationUtils; import org.springframework.web.bind.annotation.RequestMapping; public class ControllerForLowVersionConstructorInterceptor implements InstanceConstructorInterceptor { @Override public void onConstruct(EnhancedInstance objInst, Object[] allArguments) { String basePath = ""; - RequestMapping basePathRequestMapping = objInst.getClass().getAnnotation(RequestMapping.class); + RequestMapping basePathRequestMapping = AnnotationUtils.findAnnotation(objInst.getClass(), RequestMapping.class); if (basePathRequestMapping != null) { if (basePathRequestMapping.value().length > 0) { basePath = basePathRequestMapping.value()[0]; diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/ControllerConstructorInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/ControllerConstructorInterceptor.java index 422c39b23c839ad2b8a7bf1be88eb14c38c11fbb..fb48be688f3caaeee04055c5daaf365ec04ba321 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/ControllerConstructorInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/ControllerConstructorInterceptor.java @@ -22,6 +22,7 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedI import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache; import org.apache.skywalking.apm.plugin.spring.mvc.commons.PathMappingCache; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor; +import org.springframework.core.annotation.AnnotationUtils; import org.springframework.web.bind.annotation.RequestMapping; /** @@ -42,7 +43,7 @@ public class ControllerConstructorInterceptor implements InstanceConstructorInte @Override public void onConstruct(EnhancedInstance objInst, Object[] allArguments) { String basePath = ""; - RequestMapping basePathRequestMapping = objInst.getClass().getAnnotation(RequestMapping.class); + RequestMapping basePathRequestMapping = AnnotationUtils.findAnnotation(objInst.getClass(), RequestMapping.class); if (basePathRequestMapping != null) { if (basePathRequestMapping.value().length > 0) { basePath = basePathRequestMapping.value()[0]; diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/RequestMappingMethodInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/RequestMappingMethodInterceptor.java index f83344025cc3ae0cf3439993a97242dd4a0ac23b..2bf651d09eedc911851047082a5232cf8e9ea7cd 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/RequestMappingMethodInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/RequestMappingMethodInterceptor.java @@ -35,11 +35,7 @@ public class RequestMappingMethodInterceptor extends AbstractMethodInterceptor { String requestURL = null; RequestMapping methodRequestMapping = AnnotationUtils.getAnnotation(m, RequestMapping.class); if (methodRequestMapping != null) { - if (methodRequestMapping.value().length > 0) { - requestURL = methodRequestMapping.value()[0]; - } else if (methodRequestMapping.path().length > 0) { - requestURL = methodRequestMapping.path()[0]; - } + requestURL = methodRequestMapping.value().length > 0 ? methodRequestMapping.value()[0] : ""; } return requestURL; }); diff --git a/test/plugin/scenarios/spring-3.0.x-scenario/config/expectedData.yaml b/test/plugin/scenarios/spring-3.0.x-scenario/config/expectedData.yaml index 53c13d02556a90eca2d803e3dc6d4a0cd5442a35..840f2bac55cd409a151aad9d140a2afa3d492f1d 100644 --- a/test/plugin/scenarios/spring-3.0.x-scenario/config/expectedData.yaml +++ b/test/plugin/scenarios/spring-3.0.x-scenario/config/expectedData.yaml @@ -14,52 +14,130 @@ # See the License for the specific language governing permissions and # limitations under the License. segmentItems: -- serviceName: spring-3.0.x-scenario - segmentSize: ge 2 - segments: - - segmentId: not null - spans: - - operationName: /healthCheck - operationId: 0 - parentSpanId: -1 - spanId: 0 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 14 - isError: false - spanType: Entry - peer: '' - tags: - - {key: url, value: 'http://localhost:8080/spring-3.0.x-scenario/healthCheck'} - - {key: http.method, value: HEAD} - skipAnalysis: 'false' - - segmentId: not null - spans: - - {operationName: test.apache.skywalking.apm.testcase.spring3.component.TestComponentBean.componentMethod, - operationId: 0, parentSpanId: 1, spanId: 2, spanLayer: Unknown, startTime: nq - 0, endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', - skipAnalysis: 'false'} - - {operationName: test.apache.skywalking.apm.testcase.spring3.dao.TestRepositoryBean.doSomeStuff, - operationId: 0, parentSpanId: 1, spanId: 3, spanLayer: Unknown, startTime: nq - 0, endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', - skipAnalysis: 'false'} - - {operationName: test.apache.skywalking.apm.testcase.spring3.service.TestServiceBean.doSomeBusiness, - operationId: 0, parentSpanId: 0, spanId: 1, spanLayer: Unknown, startTime: nq - 0, endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', - skipAnalysis: 'false'} - - operationName: /case/spring3 - operationId: 0 - parentSpanId: -1 - spanId: 0 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 14 - isError: false - spanType: Entry - peer: '' - tags: - - {key: url, value: 'http://localhost:8080/spring-3.0.x-scenario/case/spring3'} - - {key: http.method, value: GET} - skipAnalysis: 'false' + - serviceName: spring-3.0.x-scenario + segmentSize: ge 4 + segments: + - segmentId: not null + spans: + - operationName: /healthCheck + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 14 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-3.0.x-scenario/healthCheck'} + - {key: http.method, value: HEAD} + - segmentId: not null + spans: + - operationName: /impl/requestmapping + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 14 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-3.0.x-scenario/impl/requestmapping'} + - {key: http.method, value: GET} + refs: + - {parentEndpoint: /case/spring3, networkAddress: 'localhost:8080', refType: CrossProcess, + parentSpanId: 5, parentTraceSegmentId: not null, + parentServiceInstance: not null, parentService: spring-3.0.x-scenario, + traceId: not null} + - segmentId: not null + spans: + - operationName: '{GET}/impl/restmapping' + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 14 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-3.0.x-scenario/impl/restmapping'} + - {key: http.method, value: GET} + refs: + - {parentEndpoint: /case/spring3, networkAddress: 'localhost:8080', refType: CrossProcess, + parentSpanId: 6, parentTraceSegmentId: not null, + parentServiceInstance: not null, parentService: spring-3.0.x-scenario, + traceId: not null} + - segmentId: not null + spans: + - {operationName: test.apache.skywalking.apm.testcase.spring3.component.TestComponentBean.componentMethod, + operationId: 0, parentSpanId: 1, spanId: 2, spanLayer: Unknown, startTime: nq 0, + endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', + skipAnalysis: false} + - {operationName: test.apache.skywalking.apm.testcase.spring3.dao.TestRepositoryBean.doSomeStuff, + operationId: 0, parentSpanId: 1, spanId: 3, spanLayer: Unknown, startTime: nq 0, + endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', + skipAnalysis: false} + - {operationName: test.apache.skywalking.apm.testcase.spring3.service.TestServiceBean.doSomeBusiness, + operationId: 0, parentSpanId: 0, spanId: 1, spanLayer: Unknown, startTime: nq 0, + endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', + skipAnalysis: false} + - operationName: /spring-3.0.x-scenario/impl/requestmapping + operationId: 0 + parentSpanId: 4 + spanId: 5 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 13 + isError: false + spanType: Exit + peer: localhost:8080 + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-3.0.x-scenario/impl/requestmapping'} + - {key: http.method, value: GET} + - operationName: /spring-3.0.x-scenario/impl/restmapping + operationId: 0 + parentSpanId: 4 + spanId: 6 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 13 + isError: false + spanType: Exit + peer: localhost:8080 + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-3.0.x-scenario/impl/restmapping'} + - {key: http.method, value: GET} + - {operationName: test.apache.skywalking.apm.testcase.spring3.service.TestServiceBean.doInvokeImplCase, + operationId: 0, parentSpanId: 0, spanId: 4, spanLayer: Unknown, startTime: nq 0, + endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', + skipAnalysis: false} + - operationName: /case/spring3 + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 14 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-3.0.x-scenario/case/spring3'} + - {key: http.method, value: GET} diff --git a/test/plugin/scenarios/spring-3.0.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/spring3/CaseController.java b/test/plugin/scenarios/spring-3.0.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/spring3/CaseController.java index 487bff73ec57d9626b0a93481aef9d97fcc6387f..370ed7347bcfd349bde37ef1f2c67ddf5d212fe2 100644 --- a/test/plugin/scenarios/spring-3.0.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/spring3/CaseController.java +++ b/test/plugin/scenarios/spring-3.0.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/spring3/CaseController.java @@ -36,6 +36,7 @@ public class CaseController { @ResponseBody public String updateUser() { testServiceBean.doSomeBusiness("test"); + testServiceBean.doInvokeImplCase(); return SUCCESS; } diff --git a/test/plugin/scenarios/spring-3.0.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/spring3/implinterface/TestCaseController.java b/test/plugin/scenarios/spring-3.0.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/spring3/implinterface/TestCaseController.java new file mode 100644 index 0000000000000000000000000000000000000000..406e7fcbf4175d14f619b0926377e1a58cab2f68 --- /dev/null +++ b/test/plugin/scenarios/spring-3.0.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/spring3/implinterface/TestCaseController.java @@ -0,0 +1,35 @@ +/* + * 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.spring3.implinterface; + +import org.springframework.stereotype.Controller; + +@Controller +public class TestCaseController implements TestCaseInterface { + + @Override + public String implRequestMappingAnnotationTestCase() { + return "implRequestMappingAnnotationTestCase"; + } + + @Override + public String implRestAnnotationTestCase() { + return "implRestAnnotationTestCase"; + } +} diff --git a/test/plugin/scenarios/spring-3.0.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/spring3/implinterface/TestCaseInterface.java b/test/plugin/scenarios/spring-3.0.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/spring3/implinterface/TestCaseInterface.java new file mode 100644 index 0000000000000000000000000000000000000000..f63eb156cc0b7cca41d62dd7b38b1a1d906443d4 --- /dev/null +++ b/test/plugin/scenarios/spring-3.0.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/spring3/implinterface/TestCaseInterface.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.spring3.implinterface; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +@RequestMapping("/impl") +public interface TestCaseInterface { + @RequestMapping("/requestmapping") + @ResponseBody + String implRequestMappingAnnotationTestCase(); + + @RequestMapping(value = "/restmapping", method = RequestMethod.GET) + @ResponseBody + String implRestAnnotationTestCase(); +} diff --git a/test/plugin/scenarios/spring-3.0.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/spring3/service/TestServiceBean.java b/test/plugin/scenarios/spring-3.0.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/spring3/service/TestServiceBean.java index 811fe11648c9e602ce60019f4d996434407171f9..323b1c2c6acc4437752ba4a22f9222a64ae7a36c 100644 --- a/test/plugin/scenarios/spring-3.0.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/spring3/service/TestServiceBean.java +++ b/test/plugin/scenarios/spring-3.0.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/spring3/service/TestServiceBean.java @@ -20,11 +20,14 @@ package test.apache.skywalking.apm.testcase.spring3.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; import test.apache.skywalking.apm.testcase.spring3.dao.TestRepositoryBean; import test.apache.skywalking.apm.testcase.spring3.component.TestComponentBean; @Service public class TestServiceBean { + public static final String URL = "http://localhost:8080/spring-3.0.x-scenario"; + @Autowired private TestComponentBean componentBean; @@ -35,4 +38,10 @@ public class TestServiceBean { componentBean.componentMethod(name); repositoryBean.doSomeStuff(name); } + + public void doInvokeImplCase() { + RestTemplate restTemplate = new RestTemplate(); + restTemplate.getForObject(URL + "/impl/requestmapping", String.class); + restTemplate.getForObject(URL + "/impl/restmapping", String.class); + } } diff --git a/test/plugin/scenarios/spring-3.1.x-scenario/config/expectedData.yaml b/test/plugin/scenarios/spring-3.1.x-scenario/config/expectedData.yaml index b6d866de8d5aa6e579271a4f3c16d5901b995223..130ba561deb3fc1d2d8c34cba882d0d5dc6423aa 100644 --- a/test/plugin/scenarios/spring-3.1.x-scenario/config/expectedData.yaml +++ b/test/plugin/scenarios/spring-3.1.x-scenario/config/expectedData.yaml @@ -14,236 +14,315 @@ # See the License for the specific language governing permissions and # limitations under the License. segmentItems: -- serviceName: spring-3.1.x-scenario - segmentSize: ge 7 - segments: - - segmentId: not null - spans: - - operationName: /healthCheck - operationId: 0 - parentSpanId: -1 - spanId: 0 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 14 - isError: false - spanType: Entry - peer: '' - tags: - - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/healthCheck'} - - {key: http.method, value: HEAD} - skipAnalysis: 'false' - - segmentId: not null - spans: - - {operationName: test.apache.skywalking.apm.testcase.spring3.component.TestComponentBean.componentMethod, - operationId: 0, parentSpanId: 1, spanId: 2, spanLayer: Unknown, startTime: nq - 0, endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', - skipAnalysis: 'false'} - - {operationName: test.apache.skywalking.apm.testcase.spring3.dao.TestRepositoryBean.doSomeStuff, - operationId: 0, parentSpanId: 1, spanId: 3, spanLayer: Unknown, startTime: nq - 0, endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', - skipAnalysis: 'false'} - - {operationName: test.apache.skywalking.apm.testcase.spring3.service.TestServiceBean.doSomeBusiness, - operationId: 0, parentSpanId: 0, spanId: 1, spanLayer: Unknown, startTime: nq - 0, endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', - skipAnalysis: 'false'} - - operationName: /case/spring3 - operationId: 0 - parentSpanId: -1 - spanId: 0 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 14 - isError: false - spanType: Entry - peer: '' - tags: - - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/case/spring3/'} - - {key: http.method, value: GET} - refs: - - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, - parentSpanId: 1, parentTraceSegmentId: not null, parentServiceInstance: not - null, parentService: spring-3.1.x-scenario, traceId: not null} - skipAnalysis: 'false' - - segmentId: not null - spans: - - operationName: '{POST}/create/' - operationId: 0 - parentSpanId: -1 - spanId: 0 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 14 - isError: false - spanType: Entry - peer: '' - tags: - - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/create/'} - - {key: http.method, value: POST} - refs: - - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, - parentSpanId: 2, parentTraceSegmentId: not null, parentServiceInstance: not - null, parentService: spring-3.1.x-scenario, traceId: not null} - skipAnalysis: 'false' - - segmentId: not null - spans: - - operationName: '{GET}/get/{id}' - operationId: 0 - parentSpanId: -1 - spanId: 0 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 14 - isError: false - spanType: Entry - peer: '' - tags: - - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/get/1'} - - {key: http.method, value: GET} - refs: - - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, - parentSpanId: 3, parentTraceSegmentId: not null, parentServiceInstance: not - null, parentService: spring-3.1.x-scenario, traceId: not null} - skipAnalysis: 'false' - - segmentId: not null - spans: - - operationName: '{DELETE}/delete/{id}' - operationId: 0 - parentSpanId: -1 - spanId: 0 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 14 - isError: false - spanType: Entry - peer: '' - tags: - - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/delete/1'} - - {key: http.method, value: DELETE} - refs: - - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, - parentSpanId: 5, parentTraceSegmentId: not null, parentServiceInstance: not - null, parentService: spring-3.1.x-scenario, traceId: not null} - skipAnalysis: 'false' - - segmentId: not null - spans: - - operationName: /spring-3.1.x-scenario/case/spring3/ - operationId: 0 - parentSpanId: 0 - spanId: 1 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 12 - isError: false - spanType: Exit - peer: localhost:8080 - tags: - - {key: http.method, value: GET} - - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/case/spring3/'} - skipAnalysis: 'false' - - operationName: /spring-3.1.x-scenario/create/ - operationId: 0 - parentSpanId: 0 - spanId: 2 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 13 - isError: false - spanType: Exit - peer: localhost:8080 - tags: - - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/create/'} - - {key: http.method, value: POST} - skipAnalysis: 'false' - - operationName: /spring-3.1.x-scenario/get/1 - operationId: 0 - parentSpanId: 0 - spanId: 3 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 13 - isError: false - spanType: Exit - peer: localhost:8080 - tags: - - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/get/1'} - - {key: http.method, value: GET} - skipAnalysis: 'false' - - operationName: /spring-3.1.x-scenario/update/1 - operationId: 0 - parentSpanId: 0 - spanId: 4 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 13 - isError: false - spanType: Exit - peer: localhost:8080 - tags: - - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/update/1'} - - {key: http.method, value: PUT} - skipAnalysis: 'false' - - operationName: /spring-3.1.x-scenario/delete/1 - operationId: 0 - parentSpanId: 0 - spanId: 5 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 13 - isError: false - spanType: Exit - peer: localhost:8080 - tags: - - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/delete/1'} - - {key: http.method, value: DELETE} - skipAnalysis: 'false' - - operationName: /case/resttemplate - operationId: 0 - parentSpanId: -1 - spanId: 0 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 14 - isError: false - spanType: Entry - peer: '' - tags: - - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/case/resttemplate'} - - {key: http.method, value: GET} - - key: http.params - value: |- - q1=[v1] - chinese=[中文] - skipAnalysis: 'false' - - segmentId: not null - spans: - - operationName: '{PUT}/update/{id}' - operationId: 0 - parentSpanId: -1 - spanId: 0 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 14 - isError: false - spanType: Entry - peer: '' - tags: - - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/update/1'} - - {key: http.method, value: PUT} - refs: - - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, - parentSpanId: 4, parentTraceSegmentId: not null, parentServiceInstance: not - null, parentService: spring-3.1.x-scenario, traceId: not null} - skipAnalysis: 'false' + - serviceName: spring-3.1.x-scenario + segmentSize: ge 9 + segments: + - segmentId: not null + spans: + - operationName: /healthCheck + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 14 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/healthCheck'} + - {key: http.method, value: HEAD} + - segmentId: not null + spans: + - {operationName: test.apache.skywalking.apm.testcase.spring3.component.TestComponentBean.componentMethod, + operationId: 0, parentSpanId: 1, spanId: 2, spanLayer: Unknown, startTime: nq 0, + endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', + skipAnalysis: false} + - {operationName: test.apache.skywalking.apm.testcase.spring3.dao.TestRepositoryBean.doSomeStuff, + operationId: 0, parentSpanId: 1, spanId: 3, spanLayer: Unknown, startTime: nq 0, + endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', + skipAnalysis: false} + - {operationName: test.apache.skywalking.apm.testcase.spring3.service.TestServiceBean.doSomeBusiness, + operationId: 0, parentSpanId: 0, spanId: 1, spanLayer: Unknown, startTime: nq 0, + endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', + skipAnalysis: false} + - operationName: /case/spring3 + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 14 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/case/spring3/'} + - {key: http.method, value: GET} + refs: + - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, + parentSpanId: 1, parentTraceSegmentId: not null, + parentServiceInstance: not null, parentService: spring-3.1.x-scenario, + traceId: not null} + - segmentId: not null + spans: + - operationName: '{POST}/create/' + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 14 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/create/'} + - {key: http.method, value: POST} + refs: + - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, + parentSpanId: 2, parentTraceSegmentId: not null, + parentServiceInstance: not null, parentService: spring-3.1.x-scenario, + traceId: not null} + - segmentId: not null + spans: + - operationName: '{GET}/get/{id}' + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 14 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/get/1'} + - {key: http.method, value: GET} + refs: + - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, + parentSpanId: 3, parentTraceSegmentId: not null, + parentServiceInstance: not null, parentService: spring-3.1.x-scenario, + traceId: not null} + - segmentId: not null + spans: + - operationName: '{DELETE}/delete/{id}' + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 14 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/delete/1'} + - {key: http.method, value: DELETE} + refs: + - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, + parentSpanId: 5, parentTraceSegmentId: not null, + parentServiceInstance: not null, parentService: spring-3.1.x-scenario, + traceId: not null} + - segmentId: not null + spans: + - operationName: '{PUT}/update/{id}' + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 14 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/update/1'} + - {key: http.method, value: PUT} + refs: + - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, + parentSpanId: 4, parentTraceSegmentId: not null, + parentServiceInstance: not null, parentService: spring-3.1.x-scenario, + traceId: not null} + - segmentId: not null + spans: + - operationName: /impl/requestmapping + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 14 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/impl/requestmapping'} + - {key: http.method, value: GET} + refs: + - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, + parentSpanId: 6, parentTraceSegmentId: not null, + parentServiceInstance: not null, parentService: spring-3.1.x-scenario, + traceId: not null} + - segmentId: not null + spans: + - operationName: /spring-3.1.x-scenario/case/spring3/ + operationId: 0 + parentSpanId: 0 + spanId: 1 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 12 + isError: false + spanType: Exit + peer: localhost:8080 + skipAnalysis: false + tags: + - {key: http.method, value: GET} + - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/case/spring3/'} + - operationName: /spring-3.1.x-scenario/create/ + operationId: 0 + parentSpanId: 0 + spanId: 2 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 13 + isError: false + spanType: Exit + peer: localhost:8080 + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/create/'} + - {key: http.method, value: POST} + - operationName: /spring-3.1.x-scenario/get/1 + operationId: 0 + parentSpanId: 0 + spanId: 3 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 13 + isError: false + spanType: Exit + peer: localhost:8080 + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/get/1'} + - {key: http.method, value: GET} + - operationName: /spring-3.1.x-scenario/update/1 + operationId: 0 + parentSpanId: 0 + spanId: 4 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 13 + isError: false + spanType: Exit + peer: localhost:8080 + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/update/1'} + - {key: http.method, value: PUT} + - operationName: /spring-3.1.x-scenario/delete/1 + operationId: 0 + parentSpanId: 0 + spanId: 5 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 13 + isError: false + spanType: Exit + peer: localhost:8080 + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/delete/1'} + - {key: http.method, value: DELETE} + - operationName: /spring-3.1.x-scenario/impl/requestmapping + operationId: 0 + parentSpanId: 0 + spanId: 6 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 12 + isError: false + spanType: Exit + peer: localhost:8080 + skipAnalysis: false + tags: + - {key: http.method, value: GET} + - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/impl/requestmapping'} + - operationName: /spring-3.1.x-scenario/impl/restmapping + operationId: 0 + parentSpanId: 0 + spanId: 7 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 12 + isError: false + spanType: Exit + peer: localhost:8080 + skipAnalysis: false + tags: + - {key: http.method, value: GET} + - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/impl/restmapping'} + - operationName: /case/resttemplate + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 14 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/case/resttemplate'} + - {key: http.method, value: GET} + - key: http.params + value: |- + q1=[v1] + chinese=[中文] + - segmentId: not null + spans: + - operationName: '{GET}/impl/restmapping' + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 14 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/impl/restmapping'} + - {key: http.method, value: GET} + refs: + - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, + parentSpanId: 7, parentTraceSegmentId: not null, + parentServiceInstance: not null, parentService: spring-3.1.x-scenario, + traceId: not null} diff --git a/test/plugin/scenarios/spring-3.1.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/implinterface/TestCaseController.java b/test/plugin/scenarios/spring-3.1.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/implinterface/TestCaseController.java new file mode 100644 index 0000000000000000000000000000000000000000..4688ee54b58a53ab27eb5ad00b2ea6012da96c55 --- /dev/null +++ b/test/plugin/scenarios/spring-3.1.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/implinterface/TestCaseController.java @@ -0,0 +1,35 @@ +/* + * 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.implinterface; + +import org.springframework.stereotype.Controller; + +@Controller +public class TestCaseController implements TestCaseInterface { + + @Override + public String implRequestMappingAnnotationTestCase() { + return "implRequestMappingAnnotationTestCase"; + } + + @Override + public String implRestAnnotationTestCase() { + return "implRestAnnotationTestCase"; + } +} diff --git a/test/plugin/scenarios/spring-3.1.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/implinterface/TestCaseInterface.java b/test/plugin/scenarios/spring-3.1.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/implinterface/TestCaseInterface.java new file mode 100644 index 0000000000000000000000000000000000000000..eef5e42306f1af39935d11e75a0c2d83e803bd37 --- /dev/null +++ b/test/plugin/scenarios/spring-3.1.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/implinterface/TestCaseInterface.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.implinterface; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +@RequestMapping("/impl") +public interface TestCaseInterface { + @RequestMapping("/requestmapping") + @ResponseBody + String implRequestMappingAnnotationTestCase(); + + @RequestMapping(value = "/restmapping", method = RequestMethod.GET) + @ResponseBody + String implRestAnnotationTestCase(); +} diff --git a/test/plugin/scenarios/spring-3.1.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/resttemplate/RestTemplateController.java b/test/plugin/scenarios/spring-3.1.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/resttemplate/RestTemplateController.java index d1e32adb20afa569320941bda640f871d26e99be..7c82bc80a2bc68e7098c0d22aa35ac0985989bb6 100644 --- a/test/plugin/scenarios/spring-3.1.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/resttemplate/RestTemplateController.java +++ b/test/plugin/scenarios/spring-3.1.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/resttemplate/RestTemplateController.java @@ -19,6 +19,7 @@ package test.apache.skywalking.apm.testcase.resttemplate; import java.io.IOException; + import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; @@ -61,6 +62,14 @@ public class RestTemplateController { //Delete user new RestTemplate().delete(URL + "/delete/{id}", 1); + Request implRequestMappingRequest = new Request.Builder().url(URL + "/impl/requestmapping").build(); + response = new OkHttpClient().newCall(implRequestMappingRequest).execute(); + LOGGER.info(response.toString()); + + Request implRestMappingRequest = new Request.Builder().url(URL + "/impl/restmapping").build(); + response = new OkHttpClient().newCall(implRestMappingRequest).execute(); + LOGGER.info(response.toString()); + return SUCCESS; } diff --git a/test/plugin/scenarios/spring-4.1.x-scenario/config/expectedData.yaml b/test/plugin/scenarios/spring-4.1.x-scenario/config/expectedData.yaml index b4314fb2d472cb991691009fc322776b9e3c80ff..67f99edc7e6491daa9926a4432c41a10623c89ae 100644 --- a/test/plugin/scenarios/spring-4.1.x-scenario/config/expectedData.yaml +++ b/test/plugin/scenarios/spring-4.1.x-scenario/config/expectedData.yaml @@ -14,232 +14,312 @@ # See the License for the specific language governing permissions and # limitations under the License. segmentItems: -- serviceName: spring-4.1.x-scenario - segmentSize: ge 7 - segments: - - segmentId: not null - spans: - - operationName: /healthCheck - operationId: 0 - parentSpanId: -1 - spanId: 0 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 14 - isError: false - spanType: Entry - peer: '' - tags: - - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/healthCheck'} - - {key: http.method, value: HEAD} - skipAnalysis: 'false' - - segmentId: not null - spans: - - {operationName: test.apache.skywalking.apm.testcase.spring3.component.TestComponentBean.componentMethod, - operationId: 0, parentSpanId: 1, spanId: 2, spanLayer: Unknown, startTime: nq - 0, endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', - skipAnalysis: 'false'} - - {operationName: test.apache.skywalking.apm.testcase.spring3.dao.TestRepositoryBean.doSomeStuff, - operationId: 0, parentSpanId: 1, spanId: 3, spanLayer: Unknown, startTime: nq - 0, endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', - skipAnalysis: 'false'} - - {operationName: test.apache.skywalking.apm.testcase.spring3.service.TestServiceBean.doSomeBusiness, - operationId: 0, parentSpanId: 0, spanId: 1, spanLayer: Unknown, startTime: nq - 0, endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', - skipAnalysis: 'false'} - - operationName: /case/spring3 - operationId: 0 - parentSpanId: -1 - spanId: 0 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 14 - isError: false - spanType: Entry - peer: '' - tags: - - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/case/spring3/'} - - {key: http.method, value: GET} - refs: - - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, - parentSpanId: 1, parentTraceSegmentId: not null, parentServiceInstance: not - null, parentService: spring-4.1.x-scenario, traceId: not null} - skipAnalysis: 'false' - - segmentId: not null - spans: - - operationName: '{POST}/create/' - operationId: 0 - parentSpanId: -1 - spanId: 0 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 14 - isError: false - spanType: Entry - peer: '' - tags: - - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/create/'} - - {key: http.method, value: POST} - refs: - - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, - parentSpanId: 2, parentTraceSegmentId: not null, parentServiceInstance: not - null, parentService: spring-4.1.x-scenario, traceId: not null} - skipAnalysis: 'false' - - segmentId: not null - spans: - - operationName: '{GET}/get/{id}' - operationId: 0 - parentSpanId: -1 - spanId: 0 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 14 - isError: false - spanType: Entry - peer: '' - tags: - - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/get/1'} - - {key: http.method, value: GET} - refs: - - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, - parentSpanId: 3, parentTraceSegmentId: not null, parentServiceInstance: not - null, parentService: spring-4.1.x-scenario, traceId: not null} - skipAnalysis: 'false' - - segmentId: not null - spans: - - operationName: '{DELETE}/delete/{id}' - operationId: 0 - parentSpanId: -1 - spanId: 0 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 14 - isError: false - spanType: Entry - peer: '' - tags: - - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/delete/1'} - - {key: http.method, value: DELETE} - refs: - - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, - parentSpanId: 5, parentTraceSegmentId: not null, parentServiceInstance: not - null, parentService: spring-4.1.x-scenario, traceId: not null} - skipAnalysis: 'false' - - segmentId: not null - spans: - - operationName: /spring-4.1.x-scenario/case/spring3/ - operationId: 0 - parentSpanId: 0 - spanId: 1 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 12 - isError: false - spanType: Exit - peer: localhost:8080 - tags: - - {key: http.method, value: GET} - - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/case/spring3/'} - skipAnalysis: 'false' - - operationName: /spring-4.1.x-scenario/create/ - operationId: 0 - parentSpanId: 0 - spanId: 2 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 13 - isError: false - spanType: Exit - peer: localhost:8080 - tags: - - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/create/'} - - {key: http.method, value: POST} - skipAnalysis: 'false' - - operationName: /spring-4.1.x-scenario/get/1 - operationId: 0 - parentSpanId: 0 - spanId: 3 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 13 - isError: false - spanType: Exit - peer: localhost:8080 - tags: - - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/get/1'} - - {key: http.method, value: GET} - skipAnalysis: 'false' - - operationName: /spring-4.1.x-scenario/update/1 - operationId: 0 - parentSpanId: 0 - spanId: 4 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 13 - isError: false - spanType: Exit - peer: localhost:8080 - tags: - - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/update/1'} - - {key: http.method, value: PUT} - skipAnalysis: 'false' - - operationName: /spring-4.1.x-scenario/delete/1 - operationId: 0 - parentSpanId: 0 - spanId: 5 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 13 - isError: false - spanType: Exit - peer: localhost:8080 - tags: - - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/delete/1'} - - {key: http.method, value: DELETE} - skipAnalysis: 'false' - - operationName: /case/resttemplate - operationId: 0 - parentSpanId: -1 - spanId: 0 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 14 - isError: false - spanType: Entry - peer: '' - tags: - - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/case/resttemplate'} - - {key: http.method, value: GET} - skipAnalysis: 'false' - - segmentId: not null - spans: - - operationName: '{PUT}/update/{id}' - operationId: 0 - parentSpanId: -1 - spanId: 0 - spanLayer: Http - startTime: nq 0 - endTime: nq 0 - componentId: 14 - isError: false - spanType: Entry - peer: '' - tags: - - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/update/1'} - - {key: http.method, value: PUT} - refs: - - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, - parentSpanId: 4, parentTraceSegmentId: not null, parentServiceInstance: not - null, parentService: spring-4.1.x-scenario, traceId: not null} - skipAnalysis: 'false' + - serviceName: spring-4.1.x-scenario + segmentSize: ge 9 + segments: + - segmentId: not null + spans: + - operationName: /healthCheck + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 14 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/healthCheck'} + - {key: http.method, value: HEAD} + - segmentId: not null + spans: + - {operationName: test.apache.skywalking.apm.testcase.spring3.component.TestComponentBean.componentMethod, + operationId: 0, parentSpanId: 1, spanId: 2, spanLayer: Unknown, startTime: nq 0, + endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', + skipAnalysis: false} + - {operationName: test.apache.skywalking.apm.testcase.spring3.dao.TestRepositoryBean.doSomeStuff, + operationId: 0, parentSpanId: 1, spanId: 3, spanLayer: Unknown, startTime: nq 0, + endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', + skipAnalysis: false} + - {operationName: test.apache.skywalking.apm.testcase.spring3.service.TestServiceBean.doSomeBusiness, + operationId: 0, parentSpanId: 0, spanId: 1, spanLayer: Unknown, startTime: nq 0, + endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', + skipAnalysis: false} + - operationName: /case/spring3 + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 14 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/case/spring3/'} + - {key: http.method, value: GET} + refs: + - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, + parentSpanId: 1, parentTraceSegmentId: not null, + parentServiceInstance: not null, parentService: spring-4.1.x-scenario, + traceId: not null} + - segmentId: not null + spans: + - operationName: '{POST}/create/' + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 14 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/create/'} + - {key: http.method, value: POST} + refs: + - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, + parentSpanId: 2, parentTraceSegmentId: not null, + parentServiceInstance: not null, parentService: spring-4.1.x-scenario, + traceId: not null} + - segmentId: not null + spans: + - operationName: '{GET}/get/{id}' + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 14 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/get/1'} + - {key: http.method, value: GET} + refs: + - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, + parentSpanId: 3, parentTraceSegmentId: not null, + parentServiceInstance: not null, parentService: spring-4.1.x-scenario, + traceId: not null} + - segmentId: not null + spans: + - operationName: '{PUT}/update/{id}' + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 14 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/update/1'} + - {key: http.method, value: PUT} + refs: + - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, + parentSpanId: 4, parentTraceSegmentId: not null, + parentServiceInstance: not null, parentService: spring-4.1.x-scenario, + traceId: not null} + - segmentId: not null + spans: + - operationName: '{DELETE}/delete/{id}' + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 14 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/delete/1'} + - {key: http.method, value: DELETE} + refs: + - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, + parentSpanId: 5, parentTraceSegmentId: not null, + parentServiceInstance: not null, parentService: spring-4.1.x-scenario, + traceId: not null} + - segmentId: not null + spans: + - operationName: /impl/requestmapping + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 14 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/impl/requestmapping'} + - {key: http.method, value: GET} + refs: + - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, + parentSpanId: 6, parentTraceSegmentId: not null, + parentServiceInstance: not null, parentService: spring-4.1.x-scenario, + traceId: not null} + - segmentId: not null + spans: + - operationName: /spring-4.1.x-scenario/case/spring3/ + operationId: 0 + parentSpanId: 0 + spanId: 1 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 12 + isError: false + spanType: Exit + peer: localhost:8080 + skipAnalysis: false + tags: + - {key: http.method, value: GET} + - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/case/spring3/'} + - operationName: /spring-4.1.x-scenario/create/ + operationId: 0 + parentSpanId: 0 + spanId: 2 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 13 + isError: false + spanType: Exit + peer: localhost:8080 + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/create/'} + - {key: http.method, value: POST} + - operationName: /spring-4.1.x-scenario/get/1 + operationId: 0 + parentSpanId: 0 + spanId: 3 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 13 + isError: false + spanType: Exit + peer: localhost:8080 + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/get/1'} + - {key: http.method, value: GET} + - operationName: /spring-4.1.x-scenario/update/1 + operationId: 0 + parentSpanId: 0 + spanId: 4 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 13 + isError: false + spanType: Exit + peer: localhost:8080 + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/update/1'} + - {key: http.method, value: PUT} + - operationName: /spring-4.1.x-scenario/delete/1 + operationId: 0 + parentSpanId: 0 + spanId: 5 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 13 + isError: false + spanType: Exit + peer: localhost:8080 + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/delete/1'} + - {key: http.method, value: DELETE} + - operationName: /spring-4.1.x-scenario/impl/requestmapping + operationId: 0 + parentSpanId: 0 + spanId: 6 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 12 + isError: false + spanType: Exit + peer: localhost:8080 + skipAnalysis: false + tags: + - {key: http.method, value: GET} + - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/impl/requestmapping'} + - operationName: /spring-4.1.x-scenario/impl/restmapping + operationId: 0 + parentSpanId: 0 + spanId: 7 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 12 + isError: false + spanType: Exit + peer: localhost:8080 + skipAnalysis: false + tags: + - {key: http.method, value: GET} + - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/impl/restmapping'} + - operationName: /case/resttemplate + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 14 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/case/resttemplate'} + - {key: http.method, value: GET} + - segmentId: not null + spans: + - operationName: '{GET}/impl/restmapping' + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 14 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/impl/restmapping'} + - {key: http.method, value: GET} + refs: + - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, + parentSpanId: 7, parentTraceSegmentId: not null, + parentServiceInstance: not null, parentService: spring-4.1.x-scenario, + traceId: not null} + diff --git a/test/plugin/scenarios/spring-4.1.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/implinterface/TestCaseController.java b/test/plugin/scenarios/spring-4.1.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/implinterface/TestCaseController.java new file mode 100644 index 0000000000000000000000000000000000000000..7a95a9318a9f9d90c388543272a2b19432ad5925 --- /dev/null +++ b/test/plugin/scenarios/spring-4.1.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/implinterface/TestCaseController.java @@ -0,0 +1,35 @@ +/* + * 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.implinterface; + +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class TestCaseController implements TestCaseInterface { + + @Override + public String implRequestMappingAnnotationTestCase() { + return "implRequestMappingAnnotationTestCase"; + } + + @Override + public String implRestAnnotationTestCase() { + return "implRestAnnotationTestCase"; + } +} diff --git a/test/plugin/scenarios/spring-4.1.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/implinterface/TestCaseInterface.java b/test/plugin/scenarios/spring-4.1.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/implinterface/TestCaseInterface.java new file mode 100644 index 0000000000000000000000000000000000000000..b2af5844f8bc11ac8cd09be6b6210d82ce130d6f --- /dev/null +++ b/test/plugin/scenarios/spring-4.1.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/implinterface/TestCaseInterface.java @@ -0,0 +1,31 @@ +/* + * 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.implinterface; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +@RequestMapping("/impl") +public interface TestCaseInterface { + @RequestMapping("/requestmapping") + String implRequestMappingAnnotationTestCase(); + + @RequestMapping(value = "/restmapping", method = RequestMethod.GET) + String implRestAnnotationTestCase(); +} diff --git a/test/plugin/scenarios/spring-4.1.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/resttemplate/RestTemplateController.java b/test/plugin/scenarios/spring-4.1.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/resttemplate/RestTemplateController.java index 01785989e4e1012d8ba0cce3ed5e87c463528b3f..4695ada046a219e53efeaba6cf5d288d69b38eac 100644 --- a/test/plugin/scenarios/spring-4.1.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/resttemplate/RestTemplateController.java +++ b/test/plugin/scenarios/spring-4.1.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/resttemplate/RestTemplateController.java @@ -19,6 +19,7 @@ package test.apache.skywalking.apm.testcase.resttemplate; import java.io.IOException; + import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; @@ -61,6 +62,14 @@ public class RestTemplateController { //Delete user new RestTemplate().delete(URL + "/delete/{id}", 1); + Request implRequestMappingRequest = new Request.Builder().url(URL + "/impl/requestmapping").build(); + response = new OkHttpClient().newCall(implRequestMappingRequest).execute(); + LOGGER.info(response.toString()); + + Request implRestMappingRequest = new Request.Builder().url(URL + "/impl/restmapping").build(); + response = new OkHttpClient().newCall(implRestMappingRequest).execute(); + LOGGER.info(response.toString()); + return SUCCESS; } diff --git a/test/plugin/scenarios/spring-4.3.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/implinterface/TestCaseInterface.java b/test/plugin/scenarios/spring-4.3.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/implinterface/TestCaseInterface.java index cdafc054461521ded413219c6dc5e83cd3cb544d..4fea97b7b17fbcc134c02da0a38b63c9e7058cab 100644 --- a/test/plugin/scenarios/spring-4.3.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/implinterface/TestCaseInterface.java +++ b/test/plugin/scenarios/spring-4.3.x-scenario/src/main/java/test/apache/skywalking/apm/testcase/implinterface/TestCaseInterface.java @@ -21,10 +21,11 @@ package test.apache.skywalking.apm.testcase.implinterface; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +@RequestMapping("/impl") public interface TestCaseInterface { - @RequestMapping("/impl/requestmapping") + @RequestMapping(path = "/requestmapping") String implRequestMappingAnnotationTestCase(); - @GetMapping("/impl/restmapping") + @GetMapping("/restmapping") String implRestAnnotationTestCase(); }