From 5799cbbd44ab5945a44d93b93e3629fcf4f48580 Mon Sep 17 00:00:00 2001
From: andrew shan <45474304+andrewshan@users.noreply.github.com>
Date: Wed, 12 Jun 2024 14:32:39 +0800
Subject: [PATCH] feat: add trace report support
---
.../common/metadata/MetadataContext.java | 4 +-
spring-cloud-tencent-dependencies/pom.xml | 2 +-
.../lossless-nacos-callee-service/pom.xml | 2 +-
spring-cloud-tencent-plugin-starters/pom.xml | 1 +
.../pom.xml | 2 +-
.../spring-cloud-tencent-trace-plugin/pom.xml | 24 ++++++
.../plugin/trace/SpanAttributesProvider.java | 28 +++++++
.../trace/TraceMetadataEnhancedPlugin.java | 81 +++++++++++++++++++
.../plugin/PluginOrderConstant.java | 6 ++
9 files changed, 145 insertions(+), 5 deletions(-)
create mode 100644 spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/pom.xml
create mode 100644 spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/SpanAttributesProvider.java
create mode 100644 spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/TraceMetadataEnhancedPlugin.java
diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/MetadataContext.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/MetadataContext.java
index 11b667c1a..f398d3147 100644
--- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/MetadataContext.java
+++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/MetadataContext.java
@@ -258,7 +258,7 @@ public class MetadataContext extends com.tencent.polaris.metadata.core.manager.M
case FRAGMENT_RAW_TRANSHEADERS:
return getMapMetadataAsMap(MetadataType.CUSTOM, FRAGMENT_RAW_TRANSHEADERS, TransitiveType.NONE, false);
case FRAGMENT_RAW_TRANSHEADERS_KV:
- return getMapMetadataAsMap(MetadataType.CUSTOM, FRAGMENT_RAW_TRANSHEADERS_KV, TransitiveType.PASS_THROUGH, false);
+ return getMapMetadataAsMap(MetadataType.CUSTOM, FRAGMENT_RAW_TRANSHEADERS_KV, TransitiveType.NONE, false);
default:
return getMapMetadataAsMap(MetadataType.CUSTOM, fragment, TransitiveType.NONE, false);
}
@@ -293,7 +293,7 @@ public class MetadataContext extends com.tencent.polaris.metadata.core.manager.M
putMapMetadataAsMap(MetadataType.CUSTOM, FRAGMENT_RAW_TRANSHEADERS, TransitiveType.NONE, false, context);
break;
case FRAGMENT_RAW_TRANSHEADERS_KV:
- putMapMetadataAsMap(MetadataType.CUSTOM, FRAGMENT_RAW_TRANSHEADERS_KV, TransitiveType.PASS_THROUGH, false, context);
+ putMapMetadataAsMap(MetadataType.CUSTOM, FRAGMENT_RAW_TRANSHEADERS_KV, TransitiveType.NONE, false, context);
break;
default:
putMapMetadataAsMap(MetadataType.CUSTOM, fragment, TransitiveType.NONE, false, context);
diff --git a/spring-cloud-tencent-dependencies/pom.xml b/spring-cloud-tencent-dependencies/pom.xml
index be06d2970..17ff3caf0 100644
--- a/spring-cloud-tencent-dependencies/pom.xml
+++ b/spring-cloud-tencent-dependencies/pom.xml
@@ -74,7 +74,7 @@
1.14.0-2022.0.5-SNAPSHOT
- 1.15.7-SNAPSHOT
+ 1.16.0-SNAPSHOT
32.0.1-jre
diff --git a/spring-cloud-tencent-examples/lossless-example/lossless-nacos-callee-service/pom.xml b/spring-cloud-tencent-examples/lossless-example/lossless-nacos-callee-service/pom.xml
index 2be4b3bc1..52c29f727 100644
--- a/spring-cloud-tencent-examples/lossless-example/lossless-nacos-callee-service/pom.xml
+++ b/spring-cloud-tencent-examples/lossless-example/lossless-nacos-callee-service/pom.xml
@@ -15,7 +15,7 @@
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
- 2023.0.0.0-RC1
+ 2022.0.0.0
diff --git a/spring-cloud-tencent-plugin-starters/pom.xml b/spring-cloud-tencent-plugin-starters/pom.xml
index 5debf6360..92c26fce9 100644
--- a/spring-cloud-tencent-plugin-starters/pom.xml
+++ b/spring-cloud-tencent-plugin-starters/pom.xml
@@ -20,6 +20,7 @@
spring-cloud-starter-tencent-discovery-adapter-plugin
spring-cloud-tencent-lossless-plugin
spring-cloud-starter-tencent-threadlocal-plugin
+ spring-cloud-tencent-trace-plugin
diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-discovery-adapter-plugin/pom.xml b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-discovery-adapter-plugin/pom.xml
index 0053a3ee6..650dc5bd2 100644
--- a/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-discovery-adapter-plugin/pom.xml
+++ b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-discovery-adapter-plugin/pom.xml
@@ -29,7 +29,7 @@
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
- 2023.0.0.0-RC1
+ 2022.0.0.0
true
diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/pom.xml b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/pom.xml
new file mode 100644
index 000000000..5a400090d
--- /dev/null
+++ b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/pom.xml
@@ -0,0 +1,24 @@
+
+
+ spring-cloud-tencent-plugin-starters
+ com.tencent.cloud
+ ${revision}
+ ../pom.xml
+
+ 4.0.0
+ spring-cloud-tencent-trace-plugin
+ Spring Cloud Tencent Trace Plugin
+
+
+
+
+ com.tencent.cloud
+ spring-cloud-tencent-rpc-enhancement
+
+
+ com.tencent.polaris
+ trace-otel
+
+
+
diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/SpanAttributesProvider.java b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/SpanAttributesProvider.java
new file mode 100644
index 000000000..ed7b2d459
--- /dev/null
+++ b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/SpanAttributesProvider.java
@@ -0,0 +1,28 @@
+/*
+ * Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
+ *
+ * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
+ *
+ * Licensed under the BSD 3-Clause License (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://opensource.org/licenses/BSD-3-Clause
+ *
+ * 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 com.tencent.cloud.plugin.trace;
+
+import java.util.Map;
+
+import com.tencent.cloud.rpc.enhancement.plugin.EnhancedPluginContext;
+
+public interface SpanAttributesProvider {
+
+ Map getConsumerSpanAttributes(EnhancedPluginContext context);
+}
diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/TraceMetadataEnhancedPlugin.java b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/TraceMetadataEnhancedPlugin.java
new file mode 100644
index 000000000..04442e846
--- /dev/null
+++ b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/TraceMetadataEnhancedPlugin.java
@@ -0,0 +1,81 @@
+/*
+ * Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
+ *
+ * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
+ *
+ * Licensed under the BSD 3-Clause License (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://opensource.org/licenses/BSD-3-Clause
+ *
+ * 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 com.tencent.cloud.plugin.trace;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import com.tencent.cloud.common.metadata.MetadataContext;
+import com.tencent.cloud.common.metadata.MetadataContextHolder;
+import com.tencent.cloud.polaris.context.PolarisSDKContextManager;
+import com.tencent.cloud.rpc.enhancement.plugin.EnhancedPlugin;
+import com.tencent.cloud.rpc.enhancement.plugin.EnhancedPluginContext;
+import com.tencent.cloud.rpc.enhancement.plugin.EnhancedPluginType;
+import com.tencent.cloud.rpc.enhancement.plugin.PluginOrderConstant;
+import com.tencent.polaris.api.utils.CollectionUtils;
+import com.tencent.polaris.assembly.api.AssemblyAPI;
+import com.tencent.polaris.assembly.api.pojo.TraceAttributes;
+
+public class TraceMetadataEnhancedPlugin implements EnhancedPlugin {
+
+ private final PolarisSDKContextManager polarisSDKContextManager;
+
+ private SpanAttributesProvider spanAttributesProvider;
+
+ public TraceMetadataEnhancedPlugin(PolarisSDKContextManager polarisSDKContextManager) {
+ this.polarisSDKContextManager = polarisSDKContextManager;
+ }
+
+ public void setSpanAttributesProvider(SpanAttributesProvider spanAttributesProvider) {
+ this.spanAttributesProvider = spanAttributesProvider;
+ }
+
+ @Override
+ public EnhancedPluginType getType() {
+ return EnhancedPluginType.Client.PRE;
+ }
+
+ @Override
+ public void run(EnhancedPluginContext context) throws Throwable {
+ AssemblyAPI assemblyAPI = polarisSDKContextManager.getAssemblyAPI();
+ Map attributes = new HashMap<>();
+ if (null != spanAttributesProvider) {
+ Map additionalAttributes = spanAttributesProvider.getConsumerSpanAttributes(context);
+ if (CollectionUtils.isNotEmpty(additionalAttributes)) {
+ attributes.putAll(additionalAttributes);
+ }
+ }
+ MetadataContext metadataContext = MetadataContextHolder.get();
+ Map transitiveCustomAttributes = metadataContext.getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE);
+ if (CollectionUtils.isNotEmpty(transitiveCustomAttributes)) {
+ attributes.putAll(transitiveCustomAttributes);
+ }
+ TraceAttributes traceAttributes = new TraceAttributes();
+ traceAttributes.setAttributes(attributes);
+ traceAttributes.setAttributeLocation(TraceAttributes.AttributeLocation.SPAN);
+ assemblyAPI.updateTraceAttributes(traceAttributes);
+ }
+
+ @Override
+ public int getOrder() {
+ return PluginOrderConstant.ClientPluginOrder.CONSUMER_TRACE_METADATA_PLUGIN_ORDER;
+ }
+
+}
diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/plugin/PluginOrderConstant.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/plugin/PluginOrderConstant.java
index eff88f13a..3959fbdfa 100644
--- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/plugin/PluginOrderConstant.java
+++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/plugin/PluginOrderConstant.java
@@ -58,5 +58,11 @@ public class PluginOrderConstant {
* {@link com.tencent.cloud.metadata.core.EncodeTransferMedataRestTemplateEnhancedPlugin}.
*/
public static final int CONSUMER_TRANSFER_METADATA_PLUGIN_ORDER = Ordered.HIGHEST_PRECEDENCE + 10;
+
+ /**
+ * order for
+ * {@link com.tencent.cloud.plugin.trace.TraceMetadataEnhancedPlugin}
+ */
+ public static final int CONSUMER_TRACE_METADATA_PLUGIN_ORDER = CONSUMER_TRANSFER_METADATA_PLUGIN_ORDER - 1;
}
}