From 45c890172ff30848a46d533eac95ef4c3a736e1a Mon Sep 17 00:00:00 2001 From: Joe Zou Date: Fri, 16 Aug 2019 17:46:24 +0800 Subject: [PATCH 1/3] Add Spring web operation name handler --- .../HandlerInterceptorSpanDecorator.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/opentracing-spring-web/src/main/java/io/opentracing/contrib/spring/web/interceptor/HandlerInterceptorSpanDecorator.java b/opentracing-spring-web/src/main/java/io/opentracing/contrib/spring/web/interceptor/HandlerInterceptorSpanDecorator.java index 7cff9c0e..820f6dc0 100644 --- a/opentracing-spring-web/src/main/java/io/opentracing/contrib/spring/web/interceptor/HandlerInterceptorSpanDecorator.java +++ b/opentracing-spring-web/src/main/java/io/opentracing/contrib/spring/web/interceptor/HandlerInterceptorSpanDecorator.java @@ -132,6 +132,34 @@ public void onAfterConcurrentHandlingStarted(HttpServletRequest httpServletReque } }; + /** + * Decorator to record details about the handler as log events recorded on the span. + * Support Spring RequestMapping + */ + HandlerInterceptorSpanDecorator HANDLER_SPRING_WEB_METHOD_OPERATION_NAME = new HandlerInterceptorSpanDecorator() { + @Override + public void onPreHandle(HttpServletRequest httpServletRequest, Object handler, Span span) { + String webOperationName = HandlerUtils.getOperationName(handler); + if (webOperationName != null) { + span.setOperationName(webOperationName); + return; + } + + String metaData = HandlerInterceptorSpanDecorator.HandlerUtils.methodName(handler); + if (metaData != null) { + span.setOperationName(metaData); + } + } + + @Override + public void onAfterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler, Exception ex, Span span) { + } + + @Override + public void onAfterConcurrentHandlingStarted(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler, Span span) { + } + }; + /** * Helper class for deriving tags/logs from handler object. */ @@ -162,9 +190,33 @@ public static String methodName(Object handler) { ((HandlerMethod) handler).getMethod().getName() : null; } + @Deprecated public static String requestMapping(Object handler) { String[] mappings = ((HandlerMethod) handler).getMethodAnnotation(RequestMapping.class).path(); return Arrays.toString(mappings); } + + public static String methodRequestMapping(Object handler) { + String[] mappings = (((HandlerMethod) handler).getMethodAnnotation(RequestMapping.class)).value(); + return mappings != null && mappings.length > 0 ? mappings[0] : null; + } + + public static String clazzRequestMapping(Object handler) { + String[] mappings = ((HandlerMethod) handler).getBeanType().getAnnotation(RequestMapping.class).value(); + return mappings != null && mappings.length > 0 ? mappings[0] : null; + } + + public static String getOperationName(Object handler){ + StringBuffer operationName = null; + String methodRequestMapping = methodRequestMapping(handler); + if (methodRequestMapping != null) { + operationName = new StringBuffer(methodRequestMapping); + String clazzRequestMapping = clazzRequestMapping(handler); + if (clazzRequestMapping != null) { + operationName.insert(0, clazzRequestMapping); + } + } + return operationName==null?null:operationName.toString(); + } } } From f3ee4fb358405dc10fe3fe04a6f58ca07a32d661 Mon Sep 17 00:00:00 2001 From: Joe Zou Date: Fri, 16 Aug 2019 17:53:27 +0800 Subject: [PATCH 2/3] Add Spring web operation name handler --- .../web/interceptor/HandlerInterceptorSpanDecorator.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/opentracing-spring-web/src/main/java/io/opentracing/contrib/spring/web/interceptor/HandlerInterceptorSpanDecorator.java b/opentracing-spring-web/src/main/java/io/opentracing/contrib/spring/web/interceptor/HandlerInterceptorSpanDecorator.java index 820f6dc0..fbbf42c5 100644 --- a/opentracing-spring-web/src/main/java/io/opentracing/contrib/spring/web/interceptor/HandlerInterceptorSpanDecorator.java +++ b/opentracing-spring-web/src/main/java/io/opentracing/contrib/spring/web/interceptor/HandlerInterceptorSpanDecorator.java @@ -190,9 +190,8 @@ public static String methodName(Object handler) { ((HandlerMethod) handler).getMethod().getName() : null; } - @Deprecated public static String requestMapping(Object handler) { - String[] mappings = ((HandlerMethod) handler).getMethodAnnotation(RequestMapping.class).path(); + String[] mappings = ((HandlerMethod) handler).getMethodAnnotation(RequestMapping.class).value(); return Arrays.toString(mappings); } From bfcce69a3e2d856470da4a644eb8984c5210e78e Mon Sep 17 00:00:00 2001 From: Joe Zou Date: Sun, 18 Aug 2019 14:44:55 +0800 Subject: [PATCH 3/3] Update HandlerInterceptorSpanDecorator.java --- .../web/interceptor/HandlerInterceptorSpanDecorator.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/opentracing-spring-web/src/main/java/io/opentracing/contrib/spring/web/interceptor/HandlerInterceptorSpanDecorator.java b/opentracing-spring-web/src/main/java/io/opentracing/contrib/spring/web/interceptor/HandlerInterceptorSpanDecorator.java index fbbf42c5..4b2ea3eb 100644 --- a/opentracing-spring-web/src/main/java/io/opentracing/contrib/spring/web/interceptor/HandlerInterceptorSpanDecorator.java +++ b/opentracing-spring-web/src/main/java/io/opentracing/contrib/spring/web/interceptor/HandlerInterceptorSpanDecorator.java @@ -133,8 +133,7 @@ public void onAfterConcurrentHandlingStarted(HttpServletRequest httpServletReque }; /** - * Decorator to record details about the handler as log events recorded on the span. - * Support Spring RequestMapping + * Use the Spring RequestMapping's value as the span's operation name. */ HandlerInterceptorSpanDecorator HANDLER_SPRING_WEB_METHOD_OPERATION_NAME = new HandlerInterceptorSpanDecorator() { @Override