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;
+ }
}