From 833e1892ad988d94a6b9b86105fbd04eb75b5c44 Mon Sep 17 00:00:00 2001 From: GuoLei Song <35319286+glmapper@users.noreply.github.com> Date: Thu, 28 Nov 2019 15:50:51 +0800 Subject: [PATCH] Cheery pick code from 3.x (#306) --- .../plugins/dubbo/DubboSofaTracerFilter.java | 10 ++++- .../sofa-tracer-flexible-plugin/pom.xml | 3 +- .../flexible/FlexibleDigestEncoder.java | 17 +++++--- .../flexible/FlexibleDigestJsonEncoder.java | 2 +- .../plugin/flexible/FlexibleTracer.java | 9 +---- .../HttpClientStatJsonReporter.java | 3 +- .../httpclient/HttpClientStatReporter.java | 7 ++-- .../okhttp/OkHttpStatJsonReporter.java | 3 +- .../plugins/okhttp/OkHttpStatReporter.java | 7 ++-- .../rest/RestTemplateStatJsonReporter.java | 3 +- .../rest/RestTemplateStatReporter.java | 9 ++--- .../rest/SofaTracerRestTemplateBuilder.java | 1 + .../core/constants/SofaTracerConstant.java | 4 +- .../context/span/SofaTracerSpanContext.java | 8 ++-- .../core/registry/AbstractTextFormatter.java | 6 +-- .../AbstractSofaTracerStatisticReporter.java | 7 ++++ .../tracer/core/span/CommonSpanTags.java | 1 + .../tracer/core/span/SofaTracerSpan.java | 31 ++++++++------- .../common/tracer/core/tags/SpanTags.java | 39 +++++++++++++++++++ .../core/tracer/AbstractClientTracer.java | 5 +++ .../common/CommonTracerManagerTest.java | 1 - .../core/tracer/AbstractServerTracerTest.java | 6 ++- 22 files changed, 121 insertions(+), 61 deletions(-) diff --git a/sofa-tracer-plugins/sofa-tracer-dubbo-2.6.x-plugin/src/main/java/com/alipay/sofa/tracer/plugins/dubbo/DubboSofaTracerFilter.java b/sofa-tracer-plugins/sofa-tracer-dubbo-2.6.x-plugin/src/main/java/com/alipay/sofa/tracer/plugins/dubbo/DubboSofaTracerFilter.java index 1f7055fd..cbd847c6 100644 --- a/sofa-tracer-plugins/sofa-tracer-dubbo-2.6.x-plugin/src/main/java/com/alipay/sofa/tracer/plugins/dubbo/DubboSofaTracerFilter.java +++ b/sofa-tracer-plugins/sofa-tracer-dubbo-2.6.x-plugin/src/main/java/com/alipay/sofa/tracer/plugins/dubbo/DubboSofaTracerFilter.java @@ -238,10 +238,16 @@ private static void handleError(Throwable error, SofaTracerSpan span) { } else { errorCode = SofaTracerConstant.RESULT_CODE_ERROR; } - span.setTag(Tags.ERROR.getKey(), error.getMessage()); if (span == null) { - DubboConsumerSofaTracer.getDubboConsumerSofaTracerSingleton().clientReceive(errorCode); + SofaTracerSpan currentSpan = SofaTraceContextHolder.getSofaTraceContext() + .getCurrentSpan(); + if (currentSpan != null) { + currentSpan.setTag(Tags.ERROR.getKey(), error.getMessage()); + DubboConsumerSofaTracer.getDubboConsumerSofaTracerSingleton().clientReceive( + errorCode); + } } else { + span.setTag(Tags.ERROR.getKey(), error.getMessage()); DubboConsumerSofaTracer.getDubboConsumerSofaTracerSingleton().clientReceiveTagFinish( span, errorCode); } diff --git a/sofa-tracer-plugins/sofa-tracer-flexible-plugin/pom.xml b/sofa-tracer-plugins/sofa-tracer-flexible-plugin/pom.xml index 215f7db4..f860213c 100644 --- a/sofa-tracer-plugins/sofa-tracer-flexible-plugin/pom.xml +++ b/sofa-tracer-plugins/sofa-tracer-flexible-plugin/pom.xml @@ -22,7 +22,6 @@ org.slf4j slf4j-api - - + \ No newline at end of file diff --git a/sofa-tracer-plugins/sofa-tracer-flexible-plugin/src/main/java/com/alipay/sofa/tracer/plugin/flexible/FlexibleDigestEncoder.java b/sofa-tracer-plugins/sofa-tracer-flexible-plugin/src/main/java/com/alipay/sofa/tracer/plugin/flexible/FlexibleDigestEncoder.java index 3275e395..be8bf95d 100644 --- a/sofa-tracer-plugins/sofa-tracer-flexible-plugin/src/main/java/com/alipay/sofa/tracer/plugin/flexible/FlexibleDigestEncoder.java +++ b/sofa-tracer-plugins/sofa-tracer-flexible-plugin/src/main/java/com/alipay/sofa/tracer/plugin/flexible/FlexibleDigestEncoder.java @@ -20,7 +20,9 @@ import com.alipay.common.tracer.core.appender.builder.XStringBuilder; import com.alipay.common.tracer.core.span.CommonSpanTags; import com.alipay.common.tracer.core.span.SofaTracerSpan; +import com.alipay.common.tracer.core.utils.StringUtils; +import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -34,27 +36,32 @@ public class FlexibleDigestEncoder extends FlexibleDigestJsonEncoder { protected void appendComponentSlot(XStringBuilder xsb, JsonStringBuilder jsb, SofaTracerSpan span) { Map strTags = span.getTagsWithStr(); Map numTags = span.getTagsWithNumber(); - Map boolTags = span.getTagsWithNumber(); + Map boolTags = span.getTagsWithBool(); xsb.append(strTags.get(CommonSpanTags.METHOD)); - Set strKeys = strTags.keySet(); + Map flexibleTags = new HashMap<>(); strKeys.forEach(key->{ if (!isFlexible(key)){ - xsb.append(strTags.get(key)); + flexibleTags.put(key,strTags.get(key)); } }); + Set numKeys = numTags.keySet(); numKeys.forEach(key->{ if (!isFlexible(key)){ - xsb.append(String.valueOf(numTags.get(key))); + flexibleTags.put(key,String.valueOf(numTags.get(key))); } }); + Set boolKeys = boolTags.keySet(); boolKeys.forEach(key->{ if (!isFlexible(key)){ - xsb.append(String.valueOf(boolTags.get(key))); + flexibleTags.put(key,String.valueOf(boolTags.get(key))); } }); + + String flexibleTagsData = StringUtils.mapToString(flexibleTags); + xsb.append(flexibleTagsData); } } diff --git a/sofa-tracer-plugins/sofa-tracer-flexible-plugin/src/main/java/com/alipay/sofa/tracer/plugin/flexible/FlexibleDigestJsonEncoder.java b/sofa-tracer-plugins/sofa-tracer-flexible-plugin/src/main/java/com/alipay/sofa/tracer/plugin/flexible/FlexibleDigestJsonEncoder.java index c8e7ee0f..108c1eb6 100644 --- a/sofa-tracer-plugins/sofa-tracer-flexible-plugin/src/main/java/com/alipay/sofa/tracer/plugin/flexible/FlexibleDigestJsonEncoder.java +++ b/sofa-tracer-plugins/sofa-tracer-flexible-plugin/src/main/java/com/alipay/sofa/tracer/plugin/flexible/FlexibleDigestJsonEncoder.java @@ -38,7 +38,7 @@ public class FlexibleDigestJsonEncoder extends AbstractDigestSpanEncoder { protected void appendComponentSlot(XStringBuilder xsb, JsonStringBuilder jsb, SofaTracerSpan span) { Map strTags = span.getTagsWithStr(); Map numTags = span.getTagsWithNumber(); - Map boolTags = span.getTagsWithNumber(); + Map boolTags = span.getTagsWithBool(); //POST/GET jsb.append(CommonSpanTags.METHOD, strTags.get(CommonSpanTags.METHOD)); diff --git a/sofa-tracer-plugins/sofa-tracer-flexible-plugin/src/main/java/com/alipay/sofa/tracer/plugin/flexible/FlexibleTracer.java b/sofa-tracer-plugins/sofa-tracer-flexible-plugin/src/main/java/com/alipay/sofa/tracer/plugin/flexible/FlexibleTracer.java index 019053d4..4be0b1f2 100644 --- a/sofa-tracer-plugins/sofa-tracer-flexible-plugin/src/main/java/com/alipay/sofa/tracer/plugin/flexible/FlexibleTracer.java +++ b/sofa-tracer-plugins/sofa-tracer-flexible-plugin/src/main/java/com/alipay/sofa/tracer/plugin/flexible/FlexibleTracer.java @@ -190,17 +190,10 @@ public SofaTracerSpan beforeInvoke(String operationName) { return methodSpan; } - /** - * normal finish - */ public void afterInvoke() { afterInvoke(StringUtils.EMPTY_STRING); } - /** - * error finish - * @param error - */ public void afterInvoke(String error) { SofaTraceContext sofaTraceContext = SofaTraceContextHolder.getSofaTraceContext(); SofaTracerSpan clientSpan = sofaTraceContext.pop(); @@ -233,4 +226,4 @@ private SofaTracerSpan errorSpan(Map bizBaggage, Map 0 && this - .isHttpOrMvcSuccess(resultCode)); + boolean success = isWebHttpClientSuccess(resultCode); statKey.setResult(success ? SofaTracerConstant.STAT_FLAG_SUCCESS : SofaTracerConstant.STAT_FLAG_FAILS); //end diff --git a/sofa-tracer-plugins/sofa-tracer-httpclient-plugin/src/main/java/com/alipay/sofa/tracer/plugins/httpclient/HttpClientStatReporter.java b/sofa-tracer-plugins/sofa-tracer-httpclient-plugin/src/main/java/com/alipay/sofa/tracer/plugins/httpclient/HttpClientStatReporter.java index bda2b936..50c8518d 100644 --- a/sofa-tracer-plugins/sofa-tracer-httpclient-plugin/src/main/java/com/alipay/sofa/tracer/plugins/httpclient/HttpClientStatReporter.java +++ b/sofa-tracer-plugins/sofa-tracer-httpclient-plugin/src/main/java/com/alipay/sofa/tracer/plugins/httpclient/HttpClientStatReporter.java @@ -46,10 +46,11 @@ public void doReportStat(SofaTracerSpan sofaTracerSpan) { String methodName = tagsWithStr.get(CommonSpanTags.METHOD); statKey.setKey(buildString(new String[] { localApp, requestUrl, methodName })); + //success String resultCode = tagsWithStr.get(CommonSpanTags.RESULT_CODE); - statKey - .setResult(SofaTracerConstant.RESULT_CODE_SUCCESS.equals(resultCode) ? SofaTracerConstant.STAT_FLAG_SUCCESS - : SofaTracerConstant.STAT_FLAG_FAILS); + boolean success = isWebHttpClientSuccess(resultCode); + statKey.setResult(success ? SofaTracerConstant.STAT_FLAG_SUCCESS + : SofaTracerConstant.STAT_FLAG_FAILS); statKey.setEnd(buildString(new String[] { TracerUtils.getLoadTestMark(sofaTracerSpan) })); //pressure mark diff --git a/sofa-tracer-plugins/sofa-tracer-okhttp-plugin/src/main/java/com/alipay/sofa/tracer/plugins/okhttp/OkHttpStatJsonReporter.java b/sofa-tracer-plugins/sofa-tracer-okhttp-plugin/src/main/java/com/alipay/sofa/tracer/plugins/okhttp/OkHttpStatJsonReporter.java index cebf1688..cd5f7871 100644 --- a/sofa-tracer-plugins/sofa-tracer-okhttp-plugin/src/main/java/com/alipay/sofa/tracer/plugins/okhttp/OkHttpStatJsonReporter.java +++ b/sofa-tracer-plugins/sofa-tracer-okhttp-plugin/src/main/java/com/alipay/sofa/tracer/plugins/okhttp/OkHttpStatJsonReporter.java @@ -47,8 +47,7 @@ public void doReportStat(SofaTracerSpan sofaTracerSpan) { statKey.setLoadTest(TracerUtils.isLoadTest(sofaTracerSpan)); //success String resultCode = tagsWithStr.get(CommonSpanTags.RESULT_CODE); - boolean success = (resultCode != null && resultCode.length() > 0 && this - .isHttpOrMvcSuccess(resultCode)); + boolean success = isWebHttpClientSuccess(resultCode); statKey.setResult(success ? SofaTracerConstant.STAT_FLAG_SUCCESS : SofaTracerConstant.STAT_FLAG_FAILS); //end diff --git a/sofa-tracer-plugins/sofa-tracer-okhttp-plugin/src/main/java/com/alipay/sofa/tracer/plugins/okhttp/OkHttpStatReporter.java b/sofa-tracer-plugins/sofa-tracer-okhttp-plugin/src/main/java/com/alipay/sofa/tracer/plugins/okhttp/OkHttpStatReporter.java index 068408e5..b8bd1a19 100644 --- a/sofa-tracer-plugins/sofa-tracer-okhttp-plugin/src/main/java/com/alipay/sofa/tracer/plugins/okhttp/OkHttpStatReporter.java +++ b/sofa-tracer-plugins/sofa-tracer-okhttp-plugin/src/main/java/com/alipay/sofa/tracer/plugins/okhttp/OkHttpStatReporter.java @@ -45,10 +45,11 @@ public void doReportStat(SofaTracerSpan sofaTracerSpan) { String methodName = tagsWithStr.get(CommonSpanTags.METHOD); statKey.setKey(buildString(new String[] { localApp, requestUrl, methodName })); + //success String resultCode = tagsWithStr.get(CommonSpanTags.RESULT_CODE); - statKey - .setResult(SofaTracerConstant.RESULT_CODE_SUCCESS.equals(resultCode) ? SofaTracerConstant.STAT_FLAG_SUCCESS - : SofaTracerConstant.STAT_FLAG_FAILS); + boolean success = isWebHttpClientSuccess(resultCode); + statKey.setResult(success ? SofaTracerConstant.STAT_FLAG_SUCCESS + : SofaTracerConstant.STAT_FLAG_FAILS); statKey.setEnd(buildString(new String[] { TracerUtils.getLoadTestMark(sofaTracerSpan) })); //pressure mark diff --git a/sofa-tracer-plugins/sofa-tracer-resttmplate-plugin/src/main/java/com/sofa/alipay/tracer/plugins/rest/RestTemplateStatJsonReporter.java b/sofa-tracer-plugins/sofa-tracer-resttmplate-plugin/src/main/java/com/sofa/alipay/tracer/plugins/rest/RestTemplateStatJsonReporter.java index 1ed8a979..c4aa977d 100644 --- a/sofa-tracer-plugins/sofa-tracer-resttmplate-plugin/src/main/java/com/sofa/alipay/tracer/plugins/rest/RestTemplateStatJsonReporter.java +++ b/sofa-tracer-plugins/sofa-tracer-resttmplate-plugin/src/main/java/com/sofa/alipay/tracer/plugins/rest/RestTemplateStatJsonReporter.java @@ -46,8 +46,7 @@ public void doReportStat(SofaTracerSpan sofaTracerSpan) { statKey.addKey(CommonSpanTags.METHOD, tagsWithStr.get(CommonSpanTags.METHOD)); //success String resultCode = tagsWithStr.get(CommonSpanTags.RESULT_CODE); - boolean success = (resultCode != null && resultCode.length() > 0 && this - .isHttpOrMvcSuccess(resultCode)); + boolean success = isWebHttpClientSuccess(resultCode); statKey.setResult(success ? SofaTracerConstant.STAT_FLAG_SUCCESS : SofaTracerConstant.STAT_FLAG_FAILS); //pressure mark diff --git a/sofa-tracer-plugins/sofa-tracer-resttmplate-plugin/src/main/java/com/sofa/alipay/tracer/plugins/rest/RestTemplateStatReporter.java b/sofa-tracer-plugins/sofa-tracer-resttmplate-plugin/src/main/java/com/sofa/alipay/tracer/plugins/rest/RestTemplateStatReporter.java index 020b1f3f..af0d0eb2 100644 --- a/sofa-tracer-plugins/sofa-tracer-resttmplate-plugin/src/main/java/com/sofa/alipay/tracer/plugins/rest/RestTemplateStatReporter.java +++ b/sofa-tracer-plugins/sofa-tracer-resttmplate-plugin/src/main/java/com/sofa/alipay/tracer/plugins/rest/RestTemplateStatReporter.java @@ -45,12 +45,11 @@ public void doReportStat(SofaTracerSpan sofaTracerSpan) { //method name String methodName = tagsWithStr.get(CommonSpanTags.METHOD); statKey.setKey(buildString(new String[] { localApp, requestUrl, methodName })); - + //success String resultCode = tagsWithStr.get(CommonSpanTags.RESULT_CODE); - statKey - .setResult(SofaTracerConstant.RESULT_CODE_SUCCESS.equals(resultCode) ? SofaTracerConstant.STAT_FLAG_SUCCESS - : SofaTracerConstant.STAT_FLAG_FAILS); - + boolean success = isWebHttpClientSuccess(resultCode); + statKey.setResult(success ? SofaTracerConstant.STAT_FLAG_SUCCESS + : SofaTracerConstant.STAT_FLAG_FAILS); statKey.setEnd(buildString(new String[] { TracerUtils.getLoadTestMark(sofaTracerSpan) })); //pressure mark statKey.setLoadTest(TracerUtils.isLoadTest(sofaTracerSpan)); diff --git a/sofa-tracer-plugins/sofa-tracer-resttmplate-plugin/src/main/java/com/sofa/alipay/tracer/plugins/rest/SofaTracerRestTemplateBuilder.java b/sofa-tracer-plugins/sofa-tracer-resttmplate-plugin/src/main/java/com/sofa/alipay/tracer/plugins/rest/SofaTracerRestTemplateBuilder.java index 4dbbdd92..b553d581 100644 --- a/sofa-tracer-plugins/sofa-tracer-resttmplate-plugin/src/main/java/com/sofa/alipay/tracer/plugins/rest/SofaTracerRestTemplateBuilder.java +++ b/sofa-tracer-plugins/sofa-tracer-resttmplate-plugin/src/main/java/com/sofa/alipay/tracer/plugins/rest/SofaTracerRestTemplateBuilder.java @@ -46,6 +46,7 @@ public static RestTemplate buildRestTemplate() { return restTemplate; } + @Deprecated public static AsyncRestTemplate buildAsyncRestTemplate() { AsyncRestTemplate asyncRestTemplate = new AsyncRestTemplate(); List interceptors = new ArrayList(); diff --git a/tracer-core/src/main/java/com/alipay/common/tracer/core/constants/SofaTracerConstant.java b/tracer-core/src/main/java/com/alipay/common/tracer/core/constants/SofaTracerConstant.java index 819b733c..5ac755b0 100644 --- a/tracer-core/src/main/java/com/alipay/common/tracer/core/constants/SofaTracerConstant.java +++ b/tracer-core/src/main/java/com/alipay/common/tracer/core/constants/SofaTracerConstant.java @@ -115,9 +115,9 @@ public class SofaTracerConstant { /** * stat result state for success */ - public static final String STAT_FLAG_SUCCESS = "true"; + public static final String STAT_FLAG_SUCCESS = DIGEST_FLAG_SUCCESS; /** * stat result state for failure */ - public static final String STAT_FLAG_FAILS = "false"; + public static final String STAT_FLAG_FAILS = DIGEST_FLAG_FAILS; } diff --git a/tracer-core/src/main/java/com/alipay/common/tracer/core/context/span/SofaTracerSpanContext.java b/tracer-core/src/main/java/com/alipay/common/tracer/core/context/span/SofaTracerSpanContext.java index ad510c44..eead2258 100644 --- a/tracer-core/src/main/java/com/alipay/common/tracer/core/context/span/SofaTracerSpanContext.java +++ b/tracer-core/src/main/java/com/alipay/common/tracer/core/context/span/SofaTracerSpanContext.java @@ -230,11 +230,11 @@ public String serializeSpanContext() { /** * * Deserialize and restore a SofaTracerSpanContext, reciprocal with {@link SofaTracerSpanContext#serializeSpanContext()} - * @param deserializedValue deserialize string, format: tcid:0,spid:1 + * @param deserializeValue deserialize string, format: tcid:0,spid:1 * @return SofaTracerSpanContext */ - public static SofaTracerSpanContext deserializeFromString(String deserializedValue) { - if (StringUtils.isBlank(deserializedValue)) { + public static SofaTracerSpanContext deserializeFromString(String deserializeValue) { + if (StringUtils.isBlank(deserializeValue)) { return SofaTracerSpanContext.rootStart(); } //default value for SofaTracerSpanContext @@ -249,7 +249,7 @@ public static SofaTracerSpanContext deserializeFromString(String deserializedVal Map baggage = new HashMap(); Map spanContext = new HashMap(); - StringUtils.stringToMap(deserializedValue, spanContext); + StringUtils.stringToMap(deserializeValue, spanContext); for (Map.Entry entry : spanContext.entrySet()) { String key = entry.getKey(); diff --git a/tracer-core/src/main/java/com/alipay/common/tracer/core/registry/AbstractTextFormatter.java b/tracer-core/src/main/java/com/alipay/common/tracer/core/registry/AbstractTextFormatter.java index 350c4eca..ecc7dcbc 100644 --- a/tracer-core/src/main/java/com/alipay/common/tracer/core/registry/AbstractTextFormatter.java +++ b/tracer-core/src/main/java/com/alipay/common/tracer/core/registry/AbstractTextFormatter.java @@ -33,8 +33,7 @@ public abstract class AbstractTextFormatter implements RegistryExtractorInjector @Override public SofaTracerSpanContext extract(TextMap carrier) { if (carrier == null) { - //Root node starts - return SofaTracerSpanContext.rootStart(); + return null; } SofaTracerSpanContext sofaTracerSpanContext = null; for (Map.Entry entry : carrier) { @@ -49,8 +48,7 @@ public SofaTracerSpanContext extract(TextMap carrier) { } } if (sofaTracerSpanContext == null) { - //Root node starts - return SofaTracerSpanContext.rootStart(); + return null; } return sofaTracerSpanContext; } diff --git a/tracer-core/src/main/java/com/alipay/common/tracer/core/reporter/stat/AbstractSofaTracerStatisticReporter.java b/tracer-core/src/main/java/com/alipay/common/tracer/core/reporter/stat/AbstractSofaTracerStatisticReporter.java index 1c9058db..300cc978 100644 --- a/tracer-core/src/main/java/com/alipay/common/tracer/core/reporter/stat/AbstractSofaTracerStatisticReporter.java +++ b/tracer-core/src/main/java/com/alipay/common/tracer/core/reporter/stat/AbstractSofaTracerStatisticReporter.java @@ -23,6 +23,7 @@ import com.alipay.common.tracer.core.appender.self.SelfLog; import com.alipay.common.tracer.core.appender.self.Timestamp; import com.alipay.common.tracer.core.configuration.SofaTracerConfiguration; +import com.alipay.common.tracer.core.constants.SofaTracerConstant; import com.alipay.common.tracer.core.reporter.stat.manager.SofaTracerStatisticReporterCycleTimesManager; import com.alipay.common.tracer.core.reporter.stat.manager.SofaTracerStatisticReporterManager; import com.alipay.common.tracer.core.reporter.stat.model.StatKey; @@ -360,4 +361,10 @@ protected boolean isHttpOrMvcSuccess(String resultCode) { return resultCode.charAt(0) == '1' || resultCode.charAt(0) == '2' || "302".equals(resultCode.trim()) || ("301".equals(resultCode.trim())); } + + protected boolean isWebHttpClientSuccess(String resultCode) { + return StringUtils.isNotBlank(resultCode) + && (isHttpOrMvcSuccess(resultCode) || SofaTracerConstant.RESULT_CODE_SUCCESS + .equals(resultCode)); + } } diff --git a/tracer-core/src/main/java/com/alipay/common/tracer/core/span/CommonSpanTags.java b/tracer-core/src/main/java/com/alipay/common/tracer/core/span/CommonSpanTags.java index c35a9657..8137b1a2 100644 --- a/tracer-core/src/main/java/com/alipay/common/tracer/core/span/CommonSpanTags.java +++ b/tracer-core/src/main/java/com/alipay/common/tracer/core/span/CommonSpanTags.java @@ -176,4 +176,5 @@ public class CommonSpanTags { * LOAD_TEST is the span's stat log key for load.test */ public static final String LOAD_TEST = "load.test"; + } \ No newline at end of file diff --git a/tracer-core/src/main/java/com/alipay/common/tracer/core/span/SofaTracerSpan.java b/tracer-core/src/main/java/com/alipay/common/tracer/core/span/SofaTracerSpan.java index 01cfa7e6..9e27a457 100644 --- a/tracer-core/src/main/java/com/alipay/common/tracer/core/span/SofaTracerSpan.java +++ b/tracer-core/src/main/java/com/alipay/common/tracer/core/span/SofaTracerSpan.java @@ -32,7 +32,13 @@ import java.io.PrintWriter; import java.io.StringWriter; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; /** * SofaTracerSpan @@ -48,13 +54,13 @@ public class SofaTracerSpan implements Span { private final List spanReferences; /** tags for String */ - private final Map tagsWithStr = new LinkedHashMap(); + private final Map tagsWithStr = new LinkedHashMap<>(); /** tags for Boolean */ - private final Map tagsWithBool = new LinkedHashMap(); + private final Map tagsWithBool = new LinkedHashMap<>(); /** tags for Number */ - private final Map tagsWithNumber = new LinkedHashMap(); + private final Map tagsWithNumber = new LinkedHashMap<>(); - private final List logs = new LinkedList(); + private final List logs = new LinkedList<>(); private String operationName = StringUtils.EMPTY_STRING; @@ -77,7 +83,7 @@ public class SofaTracerSpan implements Span { public SofaTracerSpan cloneInstance() { SofaTracerSpanContext spanContext = this.sofaTracerSpanContext.cloneInstance(); - Map tags = new HashMap(); + Map tags = new HashMap<>(); tags.putAll(this.tagsWithBool); tags.putAll(this.tagsWithStr); tags.putAll(this.tagsWithNumber); @@ -134,8 +140,7 @@ public SofaTracerSpan(SofaTracer sofaTracer, long startTime, AssertUtils.notNull(sofaTracerSpanContext); this.sofaTracer = sofaTracer; this.startTime = startTime; - this.spanReferences = spanReferences != null ? new ArrayList( - spanReferences) : null; + this.spanReferences = spanReferences != null ? new ArrayList<>(spanReferences) : null; this.operationName = operationName; this.sofaTracerSpanContext = sofaTracerSpanContext; this.setTags(tags); @@ -211,7 +216,7 @@ public Span log(String eventValue) { @Override public Span log(long currentTime, String eventValue) { AssertUtils.isTrue(currentTime >= startTime, "Current time must greater than start time"); - Map fields = new HashMap(); + Map fields = new HashMap<>(); fields.put(LogData.EVENT_TYPE_KEY, eventValue); return this.log(currentTime, fields); } @@ -246,7 +251,7 @@ public Span log(String eventName, /* @Nullable */Object payload) { public Span log(long currentTime, String eventName, /* @Nullable */Object payload) { //key:value AssertUtils.isTrue(currentTime >= startTime, "current time must greater than start time"); - Map fields = new HashMap(); + Map fields = new HashMap<>(); fields.put(eventName, payload); return this.log(currentTime, fields); } @@ -294,7 +299,7 @@ public void reportError(String errorType, Map context, Throwable String errorSourceApp, String... errorSources) { Tags.ERROR.set(this, true); //all tags set - Map tags = new HashMap(); + Map tags = new HashMap<>(); tags.putAll(this.getTagsWithStr()); tags.putAll(this.getTagsWithBool()); tags.putAll(this.getTagsWithNumber()); @@ -330,7 +335,7 @@ public void reportError(String errorType, Map context, Throwable * @param profileMessage profileMessage */ public void profile(String profileApp, String protocolType, String profileMessage) { - Map tags = new HashMap(); + Map tags = new HashMap<>(); tags.putAll(this.getTagsWithStr()); tags.putAll(this.getTagsWithBool()); tags.putAll(this.getTagsWithNumber()); @@ -361,7 +366,7 @@ public SofaTracerSpan getThisAsParentWhenExceedLayer() { if (StringUtils.countMatches(rpcId, '.') + 1 > SofaTracerConstant.MAX_LAYER) { SofaTracerSpanContext parentSpanContext = SofaTracerSpanContext.rootStart(); // discard tags - Map baggage = new HashMap(); + Map baggage = new HashMap<>(); baggage.putAll(this.sofaTracerSpanContext.getBizBaggage()); parentSpanContext.addBizBaggage(baggage); parent = new SofaTracerSpan(this.sofaTracer, System.currentTimeMillis(), diff --git a/tracer-core/src/main/java/com/alipay/common/tracer/core/tags/SpanTags.java b/tracer-core/src/main/java/com/alipay/common/tracer/core/tags/SpanTags.java index 14fd5a9c..9131080b 100644 --- a/tracer-core/src/main/java/com/alipay/common/tracer/core/tags/SpanTags.java +++ b/tracer-core/src/main/java/com/alipay/common/tracer/core/tags/SpanTags.java @@ -16,6 +16,10 @@ */ package com.alipay.common.tracer.core.tags; +import com.alipay.common.tracer.core.appender.self.SelfLog; +import com.alipay.common.tracer.core.constants.ComponentNameConstants; +import com.alipay.common.tracer.core.holder.SofaTraceContextHolder; +import com.alipay.common.tracer.core.span.SofaTracerSpan; import io.opentracing.tag.StringTag; /** @@ -30,4 +34,39 @@ public class SpanTags { * current span tags */ public static final StringTag CURR_APP_TAG = new StringTag("curr.app"); + + public static void putTags(String key, String val) { + SofaTracerSpan currentSpan = SofaTraceContextHolder.getSofaTraceContext().getCurrentSpan(); + if (checkTags(currentSpan)) { + currentSpan.setTag(key, val); + } + } + + public static void putTags(String key, Number val) { + SofaTracerSpan currentSpan = SofaTraceContextHolder.getSofaTraceContext().getCurrentSpan(); + if (checkTags(currentSpan)) { + currentSpan.setTag(key, val); + } + } + + public static void putTags(String key, Boolean val) { + SofaTracerSpan currentSpan = SofaTraceContextHolder.getSofaTraceContext().getCurrentSpan(); + if (checkTags(currentSpan)) { + currentSpan.setTag(key, val); + } + } + + private static boolean checkTags(SofaTracerSpan currentSpan) { + if (currentSpan == null) { + SelfLog.error("Current stage has no span exist in SofaTracerContext."); + return false; + } + String componentType = currentSpan.getSofaTracer().getTracerType(); + if (!componentType.equalsIgnoreCase(ComponentNameConstants.FLEXIBLE)) { + SelfLog.error("Cannot set tag to component. current component is [" + componentType + + "]"); + return false; + } + return true; + } } diff --git a/tracer-core/src/main/java/com/alipay/common/tracer/core/tracer/AbstractClientTracer.java b/tracer-core/src/main/java/com/alipay/common/tracer/core/tracer/AbstractClientTracer.java index d5c7cdc8..6669fa55 100644 --- a/tracer-core/src/main/java/com/alipay/common/tracer/core/tracer/AbstractClientTracer.java +++ b/tracer-core/src/main/java/com/alipay/common/tracer/core/tracer/AbstractClientTracer.java @@ -33,22 +33,27 @@ public AbstractClientTracer(String tracerType) { super(tracerType, true, false); } + @Override protected String getServerDigestReporterLogName() { return null; } + @Override protected String getServerDigestReporterRollingKey() { return null; } + @Override protected String getServerDigestReporterLogNameKey() { return null; } + @Override protected SpanEncoder getServerDigestEncoder() { return null; } + @Override protected AbstractSofaTracerStatisticReporter generateServerStatReporter() { return null; } diff --git a/tracer-core/src/test/java/com/alipay/common/tracer/core/reporter/common/CommonTracerManagerTest.java b/tracer-core/src/test/java/com/alipay/common/tracer/core/reporter/common/CommonTracerManagerTest.java index 8e210b80..3edb4575 100644 --- a/tracer-core/src/test/java/com/alipay/common/tracer/core/reporter/common/CommonTracerManagerTest.java +++ b/tracer-core/src/test/java/com/alipay/common/tracer/core/reporter/common/CommonTracerManagerTest.java @@ -27,7 +27,6 @@ import org.junit.Test; import java.io.File; -import java.io.IOException; import java.util.List; import static org.junit.Assert.assertTrue; diff --git a/tracer-core/src/test/java/com/alipay/common/tracer/core/tracer/AbstractServerTracerTest.java b/tracer-core/src/test/java/com/alipay/common/tracer/core/tracer/AbstractServerTracerTest.java index aa5dee73..4123bff8 100644 --- a/tracer-core/src/test/java/com/alipay/common/tracer/core/tracer/AbstractServerTracerTest.java +++ b/tracer-core/src/test/java/com/alipay/common/tracer/core/tracer/AbstractServerTracerTest.java @@ -18,6 +18,7 @@ import com.alipay.common.tracer.core.appender.encoder.SpanEncoder; import com.alipay.common.tracer.core.context.span.SofaTracerSpanContext; +import com.alipay.common.tracer.core.holder.SofaTraceContextHolder; import com.alipay.common.tracer.core.reporter.stat.AbstractSofaTracerStatisticReporter; import com.alipay.common.tracer.core.span.SofaTracerSpan; import org.junit.Assert; @@ -82,10 +83,11 @@ public void testServerReceive_null() { */ @Test public void testServerReceive_sofaTracerSpanContext() { + SofaTraceContextHolder.getSofaTraceContext().clear(); // sofaTracerSpanContext's sampler is false SofaTracerSpanContext sofaTracerSpanContext = new SofaTracerSpanContext("123", "0"); - SofaTracerSpan sofaTracerSpan1 = serverTracer.serverReceive(sofaTracerSpanContext); - Assert.assertTrue(!sofaTracerSpan1.getSofaTracerSpanContext().isSampled()); + SofaTracerSpan sofaTracerSpan = serverTracer.serverReceive(sofaTracerSpanContext); + Assert.assertTrue(!sofaTracerSpan.getSofaTracerSpanContext().isSampled()); } @Test