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 1/4] 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 Map getFragmentContext(String fragment) { 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 void putFragmentContext(String fragment, Map context) { 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 static class ClientPluginOrder { * {@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; } } From b09e8b33b44b03a91952c19eac32d01fc945a2c0 Mon Sep 17 00:00:00 2001 From: andrewshan Date: Sun, 16 Jun 2024 22:36:36 +0800 Subject: [PATCH 2/4] feat: add tsfContext adaptive --- spring-cloud-tencent-commons/pom.xml | 5 + .../common/metadata/MetadataContext.java | 2 +- .../tsf/core/context/TsfContext.java | 77 +++++++++ .../springframework/tsf/core/entity/Tag.java | 148 ++++++++++++++++++ 4 files changed, 231 insertions(+), 1 deletion(-) create mode 100644 spring-cloud-tencent-commons/src/main/java/org/springframework/tsf/core/context/TsfContext.java create mode 100644 spring-cloud-tencent-commons/src/main/java/org/springframework/tsf/core/entity/Tag.java diff --git a/spring-cloud-tencent-commons/pom.xml b/spring-cloud-tencent-commons/pom.xml index a667b9831..59daa7efe 100644 --- a/spring-cloud-tencent-commons/pom.xml +++ b/spring-cloud-tencent-commons/pom.xml @@ -78,6 +78,11 @@ true + + com.google.code.gson + gson + + org.springframework.cloud spring-cloud-starter-openfeign 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 f398d3147..e43a60f86 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 @@ -137,7 +137,7 @@ public void accept(String s, MetadataValue metadataValue) { return values; } - private void putMetadataAsMap(MetadataType metadataType, TransitiveType transitiveType, boolean downstream, Map values) { + public void putMetadataAsMap(MetadataType metadataType, TransitiveType transitiveType, boolean downstream, Map values) { MetadataContainer metadataContainer = getMetadataContainer(metadataType, downstream); for (Map.Entry entry : values.entrySet()) { metadataContainer.putMetadataStringValue(entry.getKey(), entry.getValue(), transitiveType); diff --git a/spring-cloud-tencent-commons/src/main/java/org/springframework/tsf/core/context/TsfContext.java b/spring-cloud-tencent-commons/src/main/java/org/springframework/tsf/core/context/TsfContext.java new file mode 100644 index 000000000..6fa988e19 --- /dev/null +++ b/spring-cloud-tencent-commons/src/main/java/org/springframework/tsf/core/context/TsfContext.java @@ -0,0 +1,77 @@ +/* + * 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 org.springframework.tsf.core.context; + +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.Map; + +import com.tencent.cloud.common.metadata.MetadataContext; +import com.tencent.cloud.common.metadata.MetadataContextHolder; +import com.tencent.polaris.metadata.core.MetadataType; +import com.tencent.polaris.metadata.core.TransitiveType; + +import org.springframework.tsf.core.entity.Tag; + +public class TsfContext { + + private static class Limit { + static final int MAX_KEY_LENGTH = 32; + static final int MAX_VALUE_LENGTH = 128; + } + + public static void putTags(Map tagMap, Tag.ControlFlag... flags) { + if (tagMap == null) { + return; + } + MetadataContext tsfCoreContext = MetadataContextHolder.get(); + TransitiveType transitive = TransitiveType.NONE; + if (null != flags) { + for (Tag.ControlFlag flag : flags) { + if (flag == Tag.ControlFlag.TRANSITIVE) { + transitive = TransitiveType.PASS_THROUGH; + break; + } + } + } + for (Map.Entry entry : tagMap.entrySet()) { + validateTag(entry.getKey(), entry.getValue()); + } + tsfCoreContext.putMetadataAsMap(MetadataType.CUSTOM, transitive, false, tagMap); + } + + public static void putTag(String key, String value, Tag.ControlFlag... flags) { + putTags(Collections.singletonMap(key, value), flags); + } + + private static void validateTag(String key, String value) { + int keyLength, valueLength; + keyLength = key.getBytes(StandardCharsets.UTF_8).length; + valueLength = value.getBytes(StandardCharsets.UTF_8).length; + + if (keyLength > Limit.MAX_KEY_LENGTH) { + throw new RuntimeException(String.format("Key \"%s\" length (after UTF-8 encoding) exceeding limit (%d)", key, + Limit.MAX_KEY_LENGTH)); + } + if (valueLength > Limit.MAX_VALUE_LENGTH) { + throw new RuntimeException(String.format("Value \"%s\" length (after UTF-8 encoding) exceeding limit (%d)", value, + Limit.MAX_VALUE_LENGTH)); + } + } +} diff --git a/spring-cloud-tencent-commons/src/main/java/org/springframework/tsf/core/entity/Tag.java b/spring-cloud-tencent-commons/src/main/java/org/springframework/tsf/core/entity/Tag.java new file mode 100644 index 000000000..c714ca7f1 --- /dev/null +++ b/spring-cloud-tencent-commons/src/main/java/org/springframework/tsf/core/entity/Tag.java @@ -0,0 +1,148 @@ +/* + * 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 org.springframework.tsf.core.entity; + +import java.io.Serializable; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class Tag implements Serializable { + // 每次对这个结构的 JSON 序列化结果有改动时,必须修改 VERSION 并写兼容性代码 + public static final int VERSION = 1; + + public enum ControlFlag { + /** + * 表示标签要在调用中传递下去,默认不启用 + */ + @SerializedName("0") + TRANSITIVE, + + /** + * 表示标签不被使用在服务鉴权,默认是被使用的 + */ + @SerializedName("1") + NOT_IN_AUTH, + + /** + * 表示标签不被使用在服务路由,默认是被使用的 + */ + @SerializedName("2") + NOT_IN_ROUTE, + + /** + * 表示标签不被使用在调用链,默认是被使用的 + */ + @SerializedName("3") + NOT_IN_SLEUTH, + + /** + * 表示标签不被使用在调用链,默认是被使用的 + */ + @SerializedName("4") + NOT_IN_LANE, + + /** + * 表示标签被使用在单元化场景,默认是不被使用的 + */ + @SerializedName("5") + IN_UNIT + } + + public enum Scene { + /** + * 不限场景 + */ + NO_SPECIFIC, + AUTH, ROUTE, SLEUTH, LANE, UNIT + } + + @SerializedName("k") + @Expose + private String key; + + @SerializedName("v") + @Expose + private String value; + + @SerializedName("f") + @Expose + private Set flags = new HashSet<>(); + + public Tag(String key, String value, ControlFlag... flags) { + this.key = key; + this.value = value; + this.flags = new HashSet<>(Arrays.asList(flags)); + } + + public Tag() { + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public Set getFlags() { + return flags; + } + + public void setFlags(Set flags) { + this.flags = flags; + } + + @Override + public boolean equals(Object object) { + if (object instanceof Tag) { + Tag tag = (Tag) object; + return (key == null ? tag.key == null : key.equals(tag.key)) + && (flags == null ? tag.flags == null : flags.equals(tag.flags)); + } + return false; + } + + @Override + public int hashCode() { + return (key == null ? 0 : key.hashCode()) + (flags == null ? 0 : flags.hashCode()); + } + + + @Override + public String toString() { + return "Tag{" + + "key='" + key + '\'' + + ", value='" + value + '\'' + + ", flags=" + flags + + '}'; + } +} From c183fd292c85534d27f901cf6824327e61196816 Mon Sep 17 00:00:00 2001 From: andrew shan <45474304+andrewshan@users.noreply.github.com> Date: Tue, 18 Jun 2024 17:55:51 +0800 Subject: [PATCH 3/4] feat: support trace report feature --- spring-cloud-starter-tencent-all/pom.xml | 5 + .../cloud/common/constant/OrderConstant.java | 5 + .../tsf/core/context/TsfContext.java | 23 +- .../springframework/tsf/core/entity/Tag.java | 232 +++++++++--------- spring-cloud-tencent-dependencies/pom.xml | 8 +- .../caller/QuickstartCallerController.java | 5 + .../controller/ConsumerController.java | 20 ++ ...=> TraceClientMetadataEnhancedPlugin.java} | 20 +- .../TraceServerMetadataEnhancedPlugin.java | 84 +++++++ .../trace/config/TraceConfigModifier.java | 41 ++++ .../TraceConfigModifierAutoConfiguration.java | 37 +++ .../TracePropertiesAutoConfiguration.java | 50 ++++ ...ePropertiesBootstrapAutoConfiguration.java | 30 +++ .../trace/tsf/TsfSpanAttributesProvider.java | 52 ++++ .../TsfTracePropertiesAutoConfiguration.java | 39 +++ .../main/resources/META-INF/spring.factories | 2 + ...ot.autoconfigure.AutoConfiguration.imports | 3 + spring-cloud-tencent-polaris-context/pom.xml | 78 ++++++ .../plugin/PluginOrderConstant.java | 12 +- 19 files changed, 607 insertions(+), 139 deletions(-) rename spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/{TraceMetadataEnhancedPlugin.java => TraceClientMetadataEnhancedPlugin.java} (78%) create mode 100644 spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/TraceServerMetadataEnhancedPlugin.java create mode 100644 spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceConfigModifier.java create mode 100644 spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceConfigModifierAutoConfiguration.java create mode 100644 spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TracePropertiesAutoConfiguration.java create mode 100644 spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TracePropertiesBootstrapAutoConfiguration.java create mode 100644 spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/tsf/TsfSpanAttributesProvider.java create mode 100644 spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/tsf/TsfTracePropertiesAutoConfiguration.java create mode 100644 spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/resources/META-INF/spring.factories create mode 100644 spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports diff --git a/spring-cloud-starter-tencent-all/pom.xml b/spring-cloud-starter-tencent-all/pom.xml index 79bba53e0..ac8032bea 100644 --- a/spring-cloud-starter-tencent-all/pom.xml +++ b/spring-cloud-starter-tencent-all/pom.xml @@ -49,6 +49,11 @@ com.tencent.cloud spring-cloud-starter-tencent-polaris-contract + + + com.tencent.cloud + spring-cloud-tencent-trace-plugin + diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/constant/OrderConstant.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/constant/OrderConstant.java index 8c75f5256..b490632fd 100644 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/constant/OrderConstant.java +++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/constant/OrderConstant.java @@ -181,5 +181,10 @@ public static final class Modifier { * Order of service contract configuration modifier. */ public static Integer SERVICE_CONTRACT_ORDER = Integer.MAX_VALUE - 9; + + /** + * Order of trace configuration modifier. + */ + public static Integer TRACE_ORDER = 2; } } diff --git a/spring-cloud-tencent-commons/src/main/java/org/springframework/tsf/core/context/TsfContext.java b/spring-cloud-tencent-commons/src/main/java/org/springframework/tsf/core/context/TsfContext.java index 6fa988e19..0e7c98a8f 100644 --- a/spring-cloud-tencent-commons/src/main/java/org/springframework/tsf/core/context/TsfContext.java +++ b/spring-cloud-tencent-commons/src/main/java/org/springframework/tsf/core/context/TsfContext.java @@ -29,11 +29,13 @@ import org.springframework.tsf.core.entity.Tag; -public class TsfContext { +public final class TsfContext { + + static final int MAX_KEY_LENGTH = 32; + static final int MAX_VALUE_LENGTH = 128; + + private TsfContext() { - private static class Limit { - static final int MAX_KEY_LENGTH = 32; - static final int MAX_VALUE_LENGTH = 128; } public static void putTags(Map tagMap, Tag.ControlFlag... flags) { @@ -61,17 +63,16 @@ public static void putTag(String key, String value, Tag.ControlFlag... flags) { } private static void validateTag(String key, String value) { - int keyLength, valueLength; - keyLength = key.getBytes(StandardCharsets.UTF_8).length; - valueLength = value.getBytes(StandardCharsets.UTF_8).length; + int keyLength = key.getBytes(StandardCharsets.UTF_8).length; + int valueLength = value.getBytes(StandardCharsets.UTF_8).length; - if (keyLength > Limit.MAX_KEY_LENGTH) { + if (keyLength > MAX_KEY_LENGTH) { throw new RuntimeException(String.format("Key \"%s\" length (after UTF-8 encoding) exceeding limit (%d)", key, - Limit.MAX_KEY_LENGTH)); + MAX_KEY_LENGTH)); } - if (valueLength > Limit.MAX_VALUE_LENGTH) { + if (valueLength > MAX_VALUE_LENGTH) { throw new RuntimeException(String.format("Value \"%s\" length (after UTF-8 encoding) exceeding limit (%d)", value, - Limit.MAX_VALUE_LENGTH)); + MAX_VALUE_LENGTH)); } } } diff --git a/spring-cloud-tencent-commons/src/main/java/org/springframework/tsf/core/entity/Tag.java b/spring-cloud-tencent-commons/src/main/java/org/springframework/tsf/core/entity/Tag.java index c714ca7f1..16d409a0c 100644 --- a/spring-cloud-tencent-commons/src/main/java/org/springframework/tsf/core/entity/Tag.java +++ b/spring-cloud-tencent-commons/src/main/java/org/springframework/tsf/core/entity/Tag.java @@ -27,122 +27,118 @@ import com.google.gson.annotations.SerializedName; public class Tag implements Serializable { - // 每次对这个结构的 JSON 序列化结果有改动时,必须修改 VERSION 并写兼容性代码 - public static final int VERSION = 1; - - public enum ControlFlag { - /** - * 表示标签要在调用中传递下去,默认不启用 - */ - @SerializedName("0") - TRANSITIVE, - - /** - * 表示标签不被使用在服务鉴权,默认是被使用的 - */ - @SerializedName("1") - NOT_IN_AUTH, - - /** - * 表示标签不被使用在服务路由,默认是被使用的 - */ - @SerializedName("2") - NOT_IN_ROUTE, - - /** - * 表示标签不被使用在调用链,默认是被使用的 - */ - @SerializedName("3") - NOT_IN_SLEUTH, - - /** - * 表示标签不被使用在调用链,默认是被使用的 - */ - @SerializedName("4") - NOT_IN_LANE, - - /** - * 表示标签被使用在单元化场景,默认是不被使用的 - */ - @SerializedName("5") - IN_UNIT - } - - public enum Scene { - /** - * 不限场景 - */ - NO_SPECIFIC, - AUTH, ROUTE, SLEUTH, LANE, UNIT - } - - @SerializedName("k") - @Expose - private String key; - - @SerializedName("v") - @Expose - private String value; - - @SerializedName("f") - @Expose - private Set flags = new HashSet<>(); - - public Tag(String key, String value, ControlFlag... flags) { - this.key = key; - this.value = value; - this.flags = new HashSet<>(Arrays.asList(flags)); - } - - public Tag() { - } - - public String getKey() { - return key; - } - - public void setKey(String key) { - this.key = key; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - public Set getFlags() { - return flags; - } - - public void setFlags(Set flags) { - this.flags = flags; - } - - @Override - public boolean equals(Object object) { - if (object instanceof Tag) { - Tag tag = (Tag) object; - return (key == null ? tag.key == null : key.equals(tag.key)) - && (flags == null ? tag.flags == null : flags.equals(tag.flags)); - } - return false; - } - - @Override - public int hashCode() { - return (key == null ? 0 : key.hashCode()) + (flags == null ? 0 : flags.hashCode()); - } - - - @Override - public String toString() { - return "Tag{" + - "key='" + key + '\'' + - ", value='" + value + '\'' + - ", flags=" + flags + - '}'; - } + + /** + * update version whenever change the content in tag. + */ + public static final int VERSION = 1; + + public enum ControlFlag { + + /** + * tag transitive by all services. + */ + @SerializedName("0") + TRANSITIVE, + + /** + * tag not used in auth. + */ + @SerializedName("1") + NOT_IN_AUTH, + + /** + * tag not used in route. + */ + @SerializedName("2") + NOT_IN_ROUTE, + + /** + * tag not used in trace. + */ + @SerializedName("3") + NOT_IN_SLEUTH, + + /** + * tag not used in lane. + */ + @SerializedName("4") + NOT_IN_LANE, + + /** + * tag not used in unit. + */ + @SerializedName("5") + IN_UNIT + } + + @SerializedName("k") + @Expose + private String key; + + @SerializedName("v") + @Expose + private String value; + + @SerializedName("f") + @Expose + private Set flags = new HashSet<>(); + + public Tag(String key, String value, ControlFlag... flags) { + this.key = key; + this.value = value; + this.flags = new HashSet<>(Arrays.asList(flags)); + } + + public Tag() { + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public Set getFlags() { + return flags; + } + + public void setFlags(Set flags) { + this.flags = flags; + } + + @Override + public boolean equals(Object object) { + if (object instanceof Tag) { + Tag tag = (Tag) object; + return (key == null ? tag.key == null : key.equals(tag.key)) + && (flags == null ? tag.flags == null : flags.equals(tag.flags)); + } + return false; + } + + @Override + public int hashCode() { + return (key == null ? 0 : key.hashCode()) + (flags == null ? 0 : flags.hashCode()); + } + + + @Override + public String toString() { + return "Tag{" + + "key='" + key + '\'' + + ", value='" + value + '\'' + + ", flags=" + flags + + '}'; + } } diff --git a/spring-cloud-tencent-dependencies/pom.xml b/spring-cloud-tencent-dependencies/pom.xml index 17ff3caf0..479f7b600 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.16.0-SNAPSHOT + 1.15.7-SNAPSHOT 32.0.1-jre @@ -199,6 +199,12 @@ ${revision} + + com.tencent.cloud + spring-cloud-tencent-trace-plugin + ${revision} + + com.google.guava diff --git a/spring-cloud-tencent-examples/quickstart-example/quickstart-caller-service/src/main/java/com/tencent/cloud/quickstart/caller/QuickstartCallerController.java b/spring-cloud-tencent-examples/quickstart-example/quickstart-caller-service/src/main/java/com/tencent/cloud/quickstart/caller/QuickstartCallerController.java index ec939dd17..d5f55a97d 100644 --- a/spring-cloud-tencent-examples/quickstart-example/quickstart-caller-service/src/main/java/com/tencent/cloud/quickstart/caller/QuickstartCallerController.java +++ b/spring-cloud-tencent-examples/quickstart-example/quickstart-caller-service/src/main/java/com/tencent/cloud/quickstart/caller/QuickstartCallerController.java @@ -17,9 +17,12 @@ package com.tencent.cloud.quickstart.caller; +import java.util.Collections; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicInteger; +import com.tencent.cloud.common.metadata.MetadataContext; +import com.tencent.cloud.common.metadata.MetadataContextHolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.publisher.Mono; @@ -63,6 +66,8 @@ public class QuickstartCallerController { */ @GetMapping("/feign") public String feign(@RequestParam int value1, @RequestParam int value2) { + MetadataContext metadataContext = MetadataContextHolder.get(); + metadataContext.setTransitiveMetadata(Collections.singletonMap("feign-trace", String.format("%d+%d", value1, value2))); return quickstartCalleeService.sum(value1, value2); } diff --git a/spring-cloud-tencent-examples/tsf-example/consumer-demo/src/main/java/com/tencent/cloud/tsf/demo/consumer/controller/ConsumerController.java b/spring-cloud-tencent-examples/tsf-example/consumer-demo/src/main/java/com/tencent/cloud/tsf/demo/consumer/controller/ConsumerController.java index 63f4f97f0..cb98fa80f 100644 --- a/spring-cloud-tencent-examples/tsf-example/consumer-demo/src/main/java/com/tencent/cloud/tsf/demo/consumer/controller/ConsumerController.java +++ b/spring-cloud-tencent-examples/tsf-example/consumer-demo/src/main/java/com/tencent/cloud/tsf/demo/consumer/controller/ConsumerController.java @@ -17,10 +17,15 @@ package com.tencent.cloud.tsf.demo.consumer.controller; +import java.util.HashMap; +import java.util.Map; + import com.tencent.cloud.tsf.demo.consumer.proxy.ProviderDemoService; import com.tencent.cloud.tsf.demo.consumer.proxy.ProviderService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.tsf.core.context.TsfContext; +import org.springframework.tsf.core.entity.Tag; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @@ -38,16 +43,31 @@ public class ConsumerController { @RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET) public String restProvider(@PathVariable String str) { + TsfContext.putTag("operation", "rest"); + Map mTags = new HashMap<>(); + mTags.put("rest-trace-key1", "value1"); + mTags.put("rest-trace-key2", "value2"); + TsfContext.putTags(mTags, Tag.ControlFlag.TRANSITIVE); return restTemplate.getForObject("http://provider-demo/echo/" + str, String.class); } @RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET) public String feignProvider(@PathVariable String str) { + TsfContext.putTag("operation", "feign"); + Map mTags = new HashMap<>(); + mTags.put("feign-trace-key1", "value1"); + mTags.put("feign-trace-key2", "value2"); + TsfContext.putTags(mTags, Tag.ControlFlag.TRANSITIVE); return providerDemoService.echo(str); } @RequestMapping(value = "/echo-feign-url/{str}", method = RequestMethod.GET) public String feignUrlProvider(@PathVariable String str) { + TsfContext.putTag("operation", "feignUrl"); + Map mTags = new HashMap<>(); + mTags.put("feignUrl-trace-key1", "value1"); + mTags.put("feignUrl-trace-key2", "value2"); + TsfContext.putTags(mTags, Tag.ControlFlag.TRANSITIVE); return providerService.echo(str); } } 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/TraceClientMetadataEnhancedPlugin.java similarity index 78% rename from spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/TraceMetadataEnhancedPlugin.java rename to spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/TraceClientMetadataEnhancedPlugin.java index 04442e846..dc61810a4 100644 --- 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/TraceClientMetadataEnhancedPlugin.java @@ -18,7 +18,6 @@ package com.tencent.cloud.plugin.trace; -import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -33,17 +32,14 @@ import com.tencent.polaris.assembly.api.AssemblyAPI; import com.tencent.polaris.assembly.api.pojo.TraceAttributes; -public class TraceMetadataEnhancedPlugin implements EnhancedPlugin { +public class TraceClientMetadataEnhancedPlugin implements EnhancedPlugin { private final PolarisSDKContextManager polarisSDKContextManager; - private SpanAttributesProvider spanAttributesProvider; + private final SpanAttributesProvider spanAttributesProvider; - public TraceMetadataEnhancedPlugin(PolarisSDKContextManager polarisSDKContextManager) { + public TraceClientMetadataEnhancedPlugin(PolarisSDKContextManager polarisSDKContextManager, SpanAttributesProvider spanAttributesProvider) { this.polarisSDKContextManager = polarisSDKContextManager; - } - - public void setSpanAttributesProvider(SpanAttributesProvider spanAttributesProvider) { this.spanAttributesProvider = spanAttributesProvider; } @@ -65,7 +61,15 @@ public void run(EnhancedPluginContext context) throws Throwable { MetadataContext metadataContext = MetadataContextHolder.get(); Map transitiveCustomAttributes = metadataContext.getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE); if (CollectionUtils.isNotEmpty(transitiveCustomAttributes)) { - attributes.putAll(transitiveCustomAttributes); + for (Map.Entry entry : transitiveCustomAttributes.entrySet()) { + attributes.put("custom." + entry.getKey(), entry.getValue()); + } + } + Map disposableCustomAttributes = metadataContext.getFragmentContext(MetadataContext.FRAGMENT_DISPOSABLE); + if (CollectionUtils.isNotEmpty(disposableCustomAttributes)) { + for (Map.Entry entry : disposableCustomAttributes.entrySet()) { + attributes.put("custom." + entry.getKey(), entry.getValue()); + } } TraceAttributes traceAttributes = new TraceAttributes(); traceAttributes.setAttributes(attributes); diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/TraceServerMetadataEnhancedPlugin.java b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/TraceServerMetadataEnhancedPlugin.java new file mode 100644 index 000000000..6525ec8e4 --- /dev/null +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/TraceServerMetadataEnhancedPlugin.java @@ -0,0 +1,84 @@ +/* + * 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.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 TraceServerMetadataEnhancedPlugin implements EnhancedPlugin { + + private final PolarisSDKContextManager polarisSDKContextManager; + + private final SpanAttributesProvider spanAttributesProvider; + + public TraceServerMetadataEnhancedPlugin(PolarisSDKContextManager polarisSDKContextManager, SpanAttributesProvider spanAttributesProvider) { + this.polarisSDKContextManager = polarisSDKContextManager; + this.spanAttributesProvider = spanAttributesProvider; + } + + @Override + public EnhancedPluginType getType() { + return EnhancedPluginType.Server.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)) { + for (Map.Entry entry : transitiveCustomAttributes.entrySet()) { + attributes.put("custom." + entry.getKey(), entry.getValue()); + } + } + Map disposableCustomAttributes = metadataContext.getFragmentContext(MetadataContext.FRAGMENT_DISPOSABLE); + if (CollectionUtils.isNotEmpty(disposableCustomAttributes)) { + for (Map.Entry entry : disposableCustomAttributes.entrySet()) { + attributes.put("custom." + entry.getKey(), entry.getValue()); + } + } + TraceAttributes traceAttributes = new TraceAttributes(); + traceAttributes.setAttributes(attributes); + traceAttributes.setAttributeLocation(TraceAttributes.AttributeLocation.SPAN); + assemblyAPI.updateTraceAttributes(traceAttributes); + } + + @Override + public int getOrder() { + return PluginOrderConstant.ServerPluginOrder.PROVIDER_TRACE_METADATA_PLUGIN_ORDER; + } +} diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceConfigModifier.java b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceConfigModifier.java new file mode 100644 index 000000000..72370839a --- /dev/null +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceConfigModifier.java @@ -0,0 +1,41 @@ +/* + * 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.config; + +import com.tencent.cloud.common.constant.OrderConstant; +import com.tencent.cloud.polaris.context.PolarisConfigModifier; +import com.tencent.polaris.factory.config.ConfigurationImpl; + +/** + * Spring Cloud Tencent config Override polaris trace config. + * + * @author andrew 2024-06-18 + */ +public class TraceConfigModifier implements PolarisConfigModifier { + + @Override + public void modify(ConfigurationImpl configuration) { + configuration.getGlobal().getTraceReporter().setEnable(true); + } + + @Override + public int getOrder() { + return OrderConstant.Modifier.TRACE_ORDER; + } +} diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceConfigModifierAutoConfiguration.java b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceConfigModifierAutoConfiguration.java new file mode 100644 index 000000000..c9e354048 --- /dev/null +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceConfigModifierAutoConfiguration.java @@ -0,0 +1,37 @@ +/* + * 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.config; + +import com.tencent.cloud.polaris.context.ConditionalOnPolarisEnabled; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration(proxyBeanMethods = false) +@ConditionalOnPolarisEnabled +@ConditionalOnProperty(value = "spring.cloud.polaris.trace.enabled", matchIfMissing = true) +public class TraceConfigModifierAutoConfiguration { + + @Bean + public TraceConfigModifier traceConfigModifier() { + return new TraceConfigModifier(); + } + +} diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TracePropertiesAutoConfiguration.java b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TracePropertiesAutoConfiguration.java new file mode 100644 index 000000000..ab133f73f --- /dev/null +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TracePropertiesAutoConfiguration.java @@ -0,0 +1,50 @@ +/* + * 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.config; + +import com.tencent.cloud.plugin.trace.SpanAttributesProvider; +import com.tencent.cloud.plugin.trace.TraceClientMetadataEnhancedPlugin; +import com.tencent.cloud.plugin.trace.TraceServerMetadataEnhancedPlugin; +import com.tencent.cloud.polaris.context.ConditionalOnPolarisEnabled; +import com.tencent.cloud.polaris.context.PolarisSDKContextManager; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + + +@Configuration(proxyBeanMethods = false) +@ConditionalOnPolarisEnabled +@ConditionalOnProperty(value = "spring.cloud.polaris.trace.enabled", matchIfMissing = true) +public class TracePropertiesAutoConfiguration { + + @Bean + public TraceClientMetadataEnhancedPlugin traceClientMetadataEnhancedPlugin( + PolarisSDKContextManager polarisSDKContextManager, @Autowired(required = false) SpanAttributesProvider spanAttributesProvider) { + return new TraceClientMetadataEnhancedPlugin(polarisSDKContextManager, spanAttributesProvider); + } + + @Bean + public TraceServerMetadataEnhancedPlugin traceServerMetadataEnhancedPlugin( + PolarisSDKContextManager polarisSDKContextManager, @Autowired(required = false) SpanAttributesProvider spanAttributesProvider) { + return new TraceServerMetadataEnhancedPlugin(polarisSDKContextManager, spanAttributesProvider); + } + +} diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TracePropertiesBootstrapAutoConfiguration.java b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TracePropertiesBootstrapAutoConfiguration.java new file mode 100644 index 000000000..64339c1c0 --- /dev/null +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TracePropertiesBootstrapAutoConfiguration.java @@ -0,0 +1,30 @@ +/* + * 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.config; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +@Configuration(proxyBeanMethods = false) +@ConditionalOnProperty("spring.cloud.polaris.enabled") +@Import(TraceConfigModifierAutoConfiguration.class) +public class TracePropertiesBootstrapAutoConfiguration { + +} diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/tsf/TsfSpanAttributesProvider.java b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/tsf/TsfSpanAttributesProvider.java new file mode 100644 index 000000000..d4bc6882d --- /dev/null +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/tsf/TsfSpanAttributesProvider.java @@ -0,0 +1,52 @@ +/* + * 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.tsf; + +import java.util.HashMap; +import java.util.Map; + +import com.tencent.cloud.common.tsf.TsfConstant; +import com.tencent.cloud.plugin.trace.SpanAttributesProvider; +import com.tencent.cloud.rpc.enhancement.plugin.EnhancedPluginContext; +import com.tencent.polaris.api.utils.CollectionUtils; +import com.tencent.polaris.api.utils.StringUtils; + +import org.springframework.cloud.client.ServiceInstance; + +public class TsfSpanAttributesProvider implements SpanAttributesProvider { + + @Override + public Map getConsumerSpanAttributes(EnhancedPluginContext context) { + Map attributes = new HashMap<>(); + if (null != context.getRequest().getUrl()) { + attributes.put("remoteInterface", context.getRequest().getUrl().getPath()); + } + ServiceInstance targetServiceInstance = context.getTargetServiceInstance(); + if (null != targetServiceInstance && CollectionUtils.isNotEmpty(targetServiceInstance.getMetadata())) { + String nsId = targetServiceInstance.getMetadata().get(TsfConstant.TSF_NAMESPACE_ID); + attributes.put("remote.namespace-id", StringUtils.defaultString(nsId)); + String groupId = targetServiceInstance.getMetadata().get(TsfConstant.TSF_GROUP_ID); + attributes.put("remote.group-id", StringUtils.defaultString(groupId)); + String applicationId = targetServiceInstance.getMetadata().get(TsfConstant.TSF_APPLICATION_ID); + attributes.put("remote.application-id", StringUtils.defaultString(applicationId)); + } + return attributes; + } + +} diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/tsf/TsfTracePropertiesAutoConfiguration.java b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/tsf/TsfTracePropertiesAutoConfiguration.java new file mode 100644 index 000000000..c88e0c5fd --- /dev/null +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/tsf/TsfTracePropertiesAutoConfiguration.java @@ -0,0 +1,39 @@ +/* + * 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.tsf; + +import com.tencent.cloud.polaris.context.tsf.ConditionalOnTsfEnabled; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration(proxyBeanMethods = false) +@ConditionalOnTsfEnabled +@ConditionalOnProperty(value = "spring.cloud.polaris.trace.enabled", matchIfMissing = true) +public class TsfTracePropertiesAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + public TsfSpanAttributesProvider tsfClientSpanAttributesProvider() { + return new TsfSpanAttributesProvider(); + } + +} diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/resources/META-INF/spring.factories b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/resources/META-INF/spring.factories new file mode 100644 index 000000000..468e133ff --- /dev/null +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.cloud.bootstrap.BootstrapConfiguration=\ + com.tencent.cloud.plugin.trace.config.TracePropertiesBootstrapAutoConfiguration \ No newline at end of file diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 000000000..ddc068fa8 --- /dev/null +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,3 @@ +com.tencent.cloud.plugin.trace.config.TraceConfigModifierAutoConfiguration +com.tencent.cloud.plugin.trace.config.TracePropertiesAutoConfiguration +com.tencent.cloud.plugin.trace.tsf.TsfTracePropertiesAutoConfiguration \ No newline at end of file diff --git a/spring-cloud-tencent-polaris-context/pom.xml b/spring-cloud-tencent-polaris-context/pom.xml index 7c940815f..e9f6c8921 100644 --- a/spring-cloud-tencent-polaris-context/pom.xml +++ b/spring-cloud-tencent-polaris-context/pom.xml @@ -49,6 +49,84 @@ + + com.tencent.polaris + polaris-circuitbreaker-factory + + + com.tencent.polaris + router-rule + + + com.tencent.polaris + router-nearby + + + com.tencent.polaris + router-metadata + + + com.tencent.polaris + circuitbreaker-errrate + + + com.tencent.polaris + circuitbreaker-errcount + + + com.tencent.polaris + circuitbreaker-composite + + + com.tencent.polaris + stat-prometheus + + + com.tencent.polaris + healthchecker-http + + + com.tencent.polaris + healthchecker-tcp + + + com.tencent.polaris + healthchecker-udp + + + + + + com.tencent.polaris + polaris-ratelimit-factory + + + com.tencent.polaris + router-rule + + + com.tencent.polaris + router-nearby + + + com.tencent.polaris + router-metadata + + + com.tencent.polaris + ratelimiter-reject + + + com.tencent.polaris + ratelimiter-unirate + + + com.tencent.polaris + stat-prometheus + + + + com.tencent.polaris polaris-client 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 3959fbdfa..ad6ed3cee 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 @@ -61,8 +61,18 @@ public static class ClientPluginOrder { /** * order for - * {@link com.tencent.cloud.plugin.trace.TraceMetadataEnhancedPlugin} + * {@link com.tencent.cloud.plugin.trace.TraceMetadataEnhancedPlugin}. */ public static final int CONSUMER_TRACE_METADATA_PLUGIN_ORDER = CONSUMER_TRANSFER_METADATA_PLUGIN_ORDER - 1; } + + public static class ServerPluginOrder { + + /** + * order for + * {@link com.tencent.cloud.plugin.trace.TraceServerMetadataEnhancedPlugin}. + */ + public static final int PROVIDER_TRACE_METADATA_PLUGIN_ORDER = Ordered.HIGHEST_PRECEDENCE + 1; + } + } From fc0192f0dbde692e62c980201fa27ff0e68ed990 Mon Sep 17 00:00:00 2001 From: andrewshan Date: Tue, 18 Jun 2024 23:46:13 +0800 Subject: [PATCH 4/4] fix: fix naming issues --- CHANGELOG.md | 1 + spring-cloud-starter-tencent-all/pom.xml | 2 +- spring-cloud-tencent-dependencies/pom.xml | 2 +- spring-cloud-tencent-plugin-starters/pom.xml | 2 +- .../pom.xml | 2 +- .../com/tencent/cloud/plugin/trace/SpanAttributesProvider.java | 0 .../cloud/plugin/trace/TraceClientMetadataEnhancedPlugin.java | 0 .../cloud/plugin/trace/TraceServerMetadataEnhancedPlugin.java | 0 .../tencent/cloud/plugin/trace/config/TraceConfigModifier.java | 0 .../trace/config/TraceConfigModifierAutoConfiguration.java | 0 .../config/TraceConfigModifierBootstrapAutoConfiguration.java} | 2 +- .../trace/config/TraceEnhancedPluginAutoConfiguration.java} | 2 +- .../cloud/plugin/trace/tsf/TsfSpanAttributesProvider.java | 0 .../plugin/trace/tsf/TsfTracePropertiesAutoConfiguration.java | 0 .../src/main/resources/META-INF/spring.factories | 2 ++ ...springframework.boot.autoconfigure.AutoConfiguration.imports | 2 +- .../src/main/resources/META-INF/spring.factories | 2 -- 17 files changed, 10 insertions(+), 9 deletions(-) rename spring-cloud-tencent-plugin-starters/{spring-cloud-tencent-trace-plugin => spring-cloud-starter-tencent-trace-plugin}/pom.xml (92%) rename spring-cloud-tencent-plugin-starters/{spring-cloud-tencent-trace-plugin => spring-cloud-starter-tencent-trace-plugin}/src/main/java/com/tencent/cloud/plugin/trace/SpanAttributesProvider.java (100%) rename spring-cloud-tencent-plugin-starters/{spring-cloud-tencent-trace-plugin => spring-cloud-starter-tencent-trace-plugin}/src/main/java/com/tencent/cloud/plugin/trace/TraceClientMetadataEnhancedPlugin.java (100%) rename spring-cloud-tencent-plugin-starters/{spring-cloud-tencent-trace-plugin => spring-cloud-starter-tencent-trace-plugin}/src/main/java/com/tencent/cloud/plugin/trace/TraceServerMetadataEnhancedPlugin.java (100%) rename spring-cloud-tencent-plugin-starters/{spring-cloud-tencent-trace-plugin => spring-cloud-starter-tencent-trace-plugin}/src/main/java/com/tencent/cloud/plugin/trace/config/TraceConfigModifier.java (100%) rename spring-cloud-tencent-plugin-starters/{spring-cloud-tencent-trace-plugin => spring-cloud-starter-tencent-trace-plugin}/src/main/java/com/tencent/cloud/plugin/trace/config/TraceConfigModifierAutoConfiguration.java (100%) rename spring-cloud-tencent-plugin-starters/{spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TracePropertiesBootstrapAutoConfiguration.java => spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceConfigModifierBootstrapAutoConfiguration.java} (94%) rename spring-cloud-tencent-plugin-starters/{spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TracePropertiesAutoConfiguration.java => spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceEnhancedPluginAutoConfiguration.java} (97%) rename spring-cloud-tencent-plugin-starters/{spring-cloud-tencent-trace-plugin => spring-cloud-starter-tencent-trace-plugin}/src/main/java/com/tencent/cloud/plugin/trace/tsf/TsfSpanAttributesProvider.java (100%) rename spring-cloud-tencent-plugin-starters/{spring-cloud-tencent-trace-plugin => spring-cloud-starter-tencent-trace-plugin}/src/main/java/com/tencent/cloud/plugin/trace/tsf/TsfTracePropertiesAutoConfiguration.java (100%) create mode 100644 spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/resources/META-INF/spring.factories rename spring-cloud-tencent-plugin-starters/{spring-cloud-tencent-trace-plugin => spring-cloud-starter-tencent-trace-plugin}/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports (65%) delete mode 100644 spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/resources/META-INF/spring.factories diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ecd1322d..33efb6cc0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,3 +19,4 @@ - [fix:fix the ratelimit bug for 2022](https://github.com/Tencent/spring-cloud-tencent/pull/1314) - [feat:add Tencent Cloud TSF support.](https://github.com/Tencent/spring-cloud-tencent/pull/1317) - [feat:support consul config.](https://github.com/Tencent/spring-cloud-tencent/pull/1319) +- [feat:add trace report support.](https://github.com/Tencent/spring-cloud-tencent/pull/1322) \ No newline at end of file diff --git a/spring-cloud-starter-tencent-all/pom.xml b/spring-cloud-starter-tencent-all/pom.xml index ac8032bea..767a25866 100644 --- a/spring-cloud-starter-tencent-all/pom.xml +++ b/spring-cloud-starter-tencent-all/pom.xml @@ -52,7 +52,7 @@ com.tencent.cloud - spring-cloud-tencent-trace-plugin + spring-cloud-starter-tencent-trace-plugin diff --git a/spring-cloud-tencent-dependencies/pom.xml b/spring-cloud-tencent-dependencies/pom.xml index 479f7b600..56958c90d 100644 --- a/spring-cloud-tencent-dependencies/pom.xml +++ b/spring-cloud-tencent-dependencies/pom.xml @@ -201,7 +201,7 @@ com.tencent.cloud - spring-cloud-tencent-trace-plugin + spring-cloud-starter-tencent-trace-plugin ${revision} diff --git a/spring-cloud-tencent-plugin-starters/pom.xml b/spring-cloud-tencent-plugin-starters/pom.xml index 92c26fce9..702dfeca4 100644 --- a/spring-cloud-tencent-plugin-starters/pom.xml +++ b/spring-cloud-tencent-plugin-starters/pom.xml @@ -20,7 +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 + spring-cloud-starter-tencent-trace-plugin diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/pom.xml b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/pom.xml similarity index 92% rename from spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/pom.xml rename to spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/pom.xml index 5a400090d..99fe4f187 100644 --- a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/pom.xml +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/pom.xml @@ -7,7 +7,7 @@ ../pom.xml 4.0.0 - spring-cloud-tencent-trace-plugin + spring-cloud-starter-tencent-trace-plugin Spring Cloud Tencent Trace Plugin 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-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/SpanAttributesProvider.java similarity index 100% rename from spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/SpanAttributesProvider.java rename to spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/SpanAttributesProvider.java diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/TraceClientMetadataEnhancedPlugin.java b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/TraceClientMetadataEnhancedPlugin.java similarity index 100% rename from spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/TraceClientMetadataEnhancedPlugin.java rename to spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/TraceClientMetadataEnhancedPlugin.java diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/TraceServerMetadataEnhancedPlugin.java b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/TraceServerMetadataEnhancedPlugin.java similarity index 100% rename from spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/TraceServerMetadataEnhancedPlugin.java rename to spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/TraceServerMetadataEnhancedPlugin.java diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceConfigModifier.java b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceConfigModifier.java similarity index 100% rename from spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceConfigModifier.java rename to spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceConfigModifier.java diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceConfigModifierAutoConfiguration.java b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceConfigModifierAutoConfiguration.java similarity index 100% rename from spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceConfigModifierAutoConfiguration.java rename to spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceConfigModifierAutoConfiguration.java diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TracePropertiesBootstrapAutoConfiguration.java b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceConfigModifierBootstrapAutoConfiguration.java similarity index 94% rename from spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TracePropertiesBootstrapAutoConfiguration.java rename to spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceConfigModifierBootstrapAutoConfiguration.java index 64339c1c0..4f0a87bc7 100644 --- a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TracePropertiesBootstrapAutoConfiguration.java +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceConfigModifierBootstrapAutoConfiguration.java @@ -25,6 +25,6 @@ @Configuration(proxyBeanMethods = false) @ConditionalOnProperty("spring.cloud.polaris.enabled") @Import(TraceConfigModifierAutoConfiguration.class) -public class TracePropertiesBootstrapAutoConfiguration { +public class TraceConfigModifierBootstrapAutoConfiguration { } diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TracePropertiesAutoConfiguration.java b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceEnhancedPluginAutoConfiguration.java similarity index 97% rename from spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TracePropertiesAutoConfiguration.java rename to spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceEnhancedPluginAutoConfiguration.java index ab133f73f..932cd1421 100644 --- a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TracePropertiesAutoConfiguration.java +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/config/TraceEnhancedPluginAutoConfiguration.java @@ -33,7 +33,7 @@ @Configuration(proxyBeanMethods = false) @ConditionalOnPolarisEnabled @ConditionalOnProperty(value = "spring.cloud.polaris.trace.enabled", matchIfMissing = true) -public class TracePropertiesAutoConfiguration { +public class TraceEnhancedPluginAutoConfiguration { @Bean public TraceClientMetadataEnhancedPlugin traceClientMetadataEnhancedPlugin( diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/tsf/TsfSpanAttributesProvider.java b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/tsf/TsfSpanAttributesProvider.java similarity index 100% rename from spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/tsf/TsfSpanAttributesProvider.java rename to spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/tsf/TsfSpanAttributesProvider.java diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/tsf/TsfTracePropertiesAutoConfiguration.java b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/tsf/TsfTracePropertiesAutoConfiguration.java similarity index 100% rename from spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/tsf/TsfTracePropertiesAutoConfiguration.java rename to spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/tsf/TsfTracePropertiesAutoConfiguration.java diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/resources/META-INF/spring.factories b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/resources/META-INF/spring.factories new file mode 100644 index 000000000..b2633bd1a --- /dev/null +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.cloud.bootstrap.BootstrapConfiguration=\ + com.tencent.cloud.plugin.trace.config.TraceConfigModifierBootstrapAutoConfiguration \ No newline at end of file diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports similarity index 65% rename from spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports rename to spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index ddc068fa8..b787a3580 100644 --- a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1,3 +1,3 @@ com.tencent.cloud.plugin.trace.config.TraceConfigModifierAutoConfiguration -com.tencent.cloud.plugin.trace.config.TracePropertiesAutoConfiguration +com.tencent.cloud.plugin.trace.config.TraceEnhancedPluginAutoConfiguration com.tencent.cloud.plugin.trace.tsf.TsfTracePropertiesAutoConfiguration \ No newline at end of file diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/resources/META-INF/spring.factories b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/resources/META-INF/spring.factories deleted file mode 100644 index 468e133ff..000000000 --- a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-trace-plugin/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,2 +0,0 @@ -org.springframework.cloud.bootstrap.BootstrapConfiguration=\ - com.tencent.cloud.plugin.trace.config.TracePropertiesBootstrapAutoConfiguration \ No newline at end of file