This is an automated email from the ASF dual-hosted git repository.

liubao pushed a commit to branch 2.8.x
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/2.8.x by this push:
     new 8e174afb3 [#3966] Add a switch to control the tracing-zipkin to adapt 
to the path of non CSE frameworks (#4026)
8e174afb3 is described below

commit 8e174afb3b52d11a7ec3f38c579501230e041619
Author: yanghao <[email protected]>
AuthorDate: Mon Nov 13 16:56:43 2023 +0800

    [#3966] Add a switch to control the tracing-zipkin to adapt to the path of 
non CSE frameworks (#4026)
---
 .../tracing/zipkin/HttpClientRequestWrapper.java   | 11 ++++++++++
 .../tracing/zipkin/HttpServeRequestWrapper.java    | 13 ++++++++++++
 .../tracing/zipkin/TracingConfiguration.java       | 24 ++++++++++++++++++++++
 3 files changed, 48 insertions(+)

diff --git 
a/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/HttpClientRequestWrapper.java
 
b/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/HttpClientRequestWrapper.java
index a81969076..738a84d20 100644
--- 
a/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/HttpClientRequestWrapper.java
+++ 
b/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/HttpClientRequestWrapper.java
@@ -19,9 +19,13 @@ package org.apache.servicecomb.tracing.zipkin;
 
 import brave.http.HttpClientRequest;
 
+import com.netflix.config.DynamicPropertyFactory;
 import org.apache.servicecomb.core.Invocation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 class HttpClientRequestWrapper extends HttpClientRequest {
+  private static final Logger LOG = 
LoggerFactory.getLogger(HttpClientRequestWrapper.class);
 
   private Invocation invocation;
 
@@ -50,6 +54,13 @@ class HttpClientRequestWrapper extends HttpClientRequest {
 
   @Override
   public String path() {
+    if 
(DynamicPropertyFactory.getInstance().getBooleanProperty(TracingConfiguration.TRACING_WORK_WITH_THIRDPARTY,
 false).get()) {
+      try {
+        return TracingConfiguration.createRequestPath(invocation);
+      } catch (Exception e) {
+        LOG.warn("generate rest path failed: {}", e.getMessage());
+      }
+    }
     return invocation.getOperationMeta().getOperationPath();
   }
 
diff --git 
a/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/HttpServeRequestWrapper.java
 
b/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/HttpServeRequestWrapper.java
index 5503cc485..f4d6fe9eb 100644
--- 
a/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/HttpServeRequestWrapper.java
+++ 
b/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/HttpServeRequestWrapper.java
@@ -19,9 +19,15 @@ package org.apache.servicecomb.tracing.zipkin;
 
 import brave.http.HttpServerRequest;
 
+import com.netflix.config.DynamicPropertyFactory;
+
 import org.apache.servicecomb.core.Invocation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 class HttpServeRequestWrapper extends HttpServerRequest {
+  private static final Logger LOG = 
LoggerFactory.getLogger(HttpServeRequestWrapper.class);
+
   private Invocation invocation;
 
   HttpServeRequestWrapper() {
@@ -43,6 +49,13 @@ class HttpServeRequestWrapper extends HttpServerRequest {
 
   @Override
   public String path() {
+    if 
(DynamicPropertyFactory.getInstance().getBooleanProperty(TracingConfiguration.TRACING_WORK_WITH_THIRDPARTY,
 false).get()) {
+      try {
+        return TracingConfiguration.createRequestPath(invocation);
+      } catch (Exception e) {
+        LOG.warn("generate rest path failed: {}", e.getMessage());
+      }
+    }
     return invocation.getOperationMeta().getOperationPath();
   }
 
diff --git 
a/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/TracingConfiguration.java
 
b/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/TracingConfiguration.java
index 3665dd871..4d63ed2c1 100644
--- 
a/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/TracingConfiguration.java
+++ 
b/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/TracingConfiguration.java
@@ -26,8 +26,14 @@ import static 
org.apache.servicecomb.foundation.common.base.ServiceCombConstants
 
 import java.text.MessageFormat;
 
+import org.apache.commons.lang3.StringUtils;
+import org.apache.servicecomb.common.rest.RestConst;
+import org.apache.servicecomb.common.rest.definition.RestOperationMeta;
 import org.apache.servicecomb.config.BootStrapProperties;
 import org.apache.servicecomb.config.DynamicProperties;
+import org.apache.servicecomb.core.Invocation;
+import org.apache.servicecomb.foundation.common.net.URIEndpointObject;
+import org.apache.servicecomb.registry.definition.DefinitionConst;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
@@ -48,6 +54,8 @@ import zipkin2.reporter.okhttp3.OkHttpSender;
 class TracingConfiguration {
   private String apiVersion = CONFIG_TRACING_COLLECTOR_API_V2;
 
+  public static final String TRACING_WORK_WITH_THIRDPARTY = 
"servicecomb.tracing.workWithThirdParty";
+
   @Bean
   Sender sender(DynamicProperties dynamicProperties) {
     apiVersion = 
dynamicProperties.getStringProperty(CONFIG_TRACING_COLLECTOR_API_VERSION,
@@ -97,4 +105,20 @@ class TracingConfiguration {
   HttpTracing httpTracing(Tracing tracing) {
     return HttpTracing.create(tracing);
   }
+
+  public static String createRequestPath(Invocation invocation) throws 
Exception {
+    URIEndpointObject address = (URIEndpointObject) 
invocation.getEndpoint().getAddress();
+    String urlPrefix = address.getFirst(DefinitionConst.URL_PREFIX);
+    RestOperationMeta swaggerRestOperation = 
invocation.getOperationMeta().getExtData(RestConst.SWAGGER_REST_OPERATION);
+    String path = (String) 
invocation.getHandlerContext().get(RestConst.REST_CLIENT_REQUEST_PATH);
+    if (path == null) {
+      path = 
swaggerRestOperation.getPathBuilder().createRequestPath(invocation.getSwaggerArguments());
+    }
+
+    if (StringUtils.isEmpty(urlPrefix) || path.startsWith(urlPrefix)) {
+      return path;
+    }
+
+    return urlPrefix + path;
+  }
 }

Reply via email to