Skip to content

Commit

Permalink
Cheery pick code from 3.x (#306)
Browse files Browse the repository at this point in the history
  • Loading branch information
glmapper authored and caojie09 committed Nov 28, 2019
1 parent db4dff8 commit 833e189
Show file tree
Hide file tree
Showing 22 changed files with 121 additions and 61 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
3 changes: 1 addition & 2 deletions sofa-tracer-plugins/sofa-tracer-flexible-plugin/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>

</dependencies>

</project>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -34,27 +36,32 @@ public class FlexibleDigestEncoder extends FlexibleDigestJsonEncoder {
protected void appendComponentSlot(XStringBuilder xsb, JsonStringBuilder jsb, SofaTracerSpan span) {
Map<String, String> strTags = span.getTagsWithStr();
Map<String, Number> numTags = span.getTagsWithNumber();
Map<String, Number> boolTags = span.getTagsWithNumber();
Map<String, Boolean> boolTags = span.getTagsWithBool();

xsb.append(strTags.get(CommonSpanTags.METHOD));

Set<String> strKeys = strTags.keySet();
Map<String,String> flexibleTags = new HashMap<>();
strKeys.forEach(key->{
if (!isFlexible(key)){
xsb.append(strTags.get(key));
flexibleTags.put(key,strTags.get(key));
}
});

Set<String> 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<String> 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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public class FlexibleDigestJsonEncoder extends AbstractDigestSpanEncoder {
protected void appendComponentSlot(XStringBuilder xsb, JsonStringBuilder jsb, SofaTracerSpan span) {
Map<String, String> strTags = span.getTagsWithStr();
Map<String, Number> numTags = span.getTagsWithNumber();
Map<String, Number> boolTags = span.getTagsWithNumber();
Map<String, Boolean> boolTags = span.getTagsWithBool();
//POST/GET
jsb.append(CommonSpanTags.METHOD, strTags.get(CommonSpanTags.METHOD));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -233,4 +226,4 @@ private SofaTracerSpan errorSpan(Map<String, String> bizBaggage, Map<String, Str
return new SofaTracerSpan(this, System.currentTimeMillis(), null, StringUtils.EMPTY_STRING,
spanContext, null);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ public static RestTemplate buildRestTemplate() {
return restTemplate;
}

@Deprecated
public static AsyncRestTemplate buildAsyncRestTemplate() {
AsyncRestTemplate asyncRestTemplate = new AsyncRestTemplate();
List<AsyncClientHttpRequestInterceptor> interceptors = new ArrayList<AsyncClientHttpRequestInterceptor>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -249,7 +249,7 @@ public static SofaTracerSpanContext deserializeFromString(String deserializedVal
Map<String, String> baggage = new HashMap<String, String>();

Map<String, String> spanContext = new HashMap<String, String>();
StringUtils.stringToMap(deserializedValue, spanContext);
StringUtils.stringToMap(deserializeValue, spanContext);

for (Map.Entry<String, String> entry : spanContext.entrySet()) {
String key = entry.getKey();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<String, String> entry : carrier) {
Expand All @@ -49,8 +48,7 @@ public SofaTracerSpanContext extract(TextMap carrier) {
}
}
if (sofaTracerSpanContext == null) {
//Root node starts
return SofaTracerSpanContext.rootStart();
return null;
}
return sofaTracerSpanContext;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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";

}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -48,13 +54,13 @@ public class SofaTracerSpan implements Span {

private final List<SofaTracerSpanReferenceRelationship> spanReferences;
/** tags for String */
private final Map<String, String> tagsWithStr = new LinkedHashMap<String, String>();
private final Map<String, String> tagsWithStr = new LinkedHashMap<>();
/** tags for Boolean */
private final Map<String, Boolean> tagsWithBool = new LinkedHashMap<String, Boolean>();
private final Map<String, Boolean> tagsWithBool = new LinkedHashMap<>();
/** tags for Number */
private final Map<String, Number> tagsWithNumber = new LinkedHashMap<String, Number>();
private final Map<String, Number> tagsWithNumber = new LinkedHashMap<>();

private final List<LogData> logs = new LinkedList<LogData>();
private final List<LogData> logs = new LinkedList<>();

private String operationName = StringUtils.EMPTY_STRING;

Expand All @@ -77,7 +83,7 @@ public class SofaTracerSpan implements Span {

public SofaTracerSpan cloneInstance() {
SofaTracerSpanContext spanContext = this.sofaTracerSpanContext.cloneInstance();
Map<String, Object> tags = new HashMap<String, Object>();
Map<String, Object> tags = new HashMap<>();
tags.putAll(this.tagsWithBool);
tags.putAll(this.tagsWithStr);
tags.putAll(this.tagsWithNumber);
Expand Down Expand Up @@ -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<SofaTracerSpanReferenceRelationship>(
spanReferences) : null;
this.spanReferences = spanReferences != null ? new ArrayList<>(spanReferences) : null;
this.operationName = operationName;
this.sofaTracerSpanContext = sofaTracerSpanContext;
this.setTags(tags);
Expand Down Expand Up @@ -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<String, String> fields = new HashMap<String, String>();
Map<String, String> fields = new HashMap<>();
fields.put(LogData.EVENT_TYPE_KEY, eventValue);
return this.log(currentTime, fields);
}
Expand Down Expand Up @@ -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<String, Object> fields = new HashMap<String, Object>();
Map<String, Object> fields = new HashMap<>();
fields.put(eventName, payload);
return this.log(currentTime, fields);
}
Expand Down Expand Up @@ -294,7 +299,7 @@ public void reportError(String errorType, Map<String, String> context, Throwable
String errorSourceApp, String... errorSources) {
Tags.ERROR.set(this, true);
//all tags set
Map<String, Object> tags = new HashMap<String, Object>();
Map<String, Object> tags = new HashMap<>();
tags.putAll(this.getTagsWithStr());
tags.putAll(this.getTagsWithBool());
tags.putAll(this.getTagsWithNumber());
Expand Down Expand Up @@ -330,7 +335,7 @@ public void reportError(String errorType, Map<String, String> context, Throwable
* @param profileMessage profileMessage
*/
public void profile(String profileApp, String protocolType, String profileMessage) {
Map<String, Object> tags = new HashMap<String, Object>();
Map<String, Object> tags = new HashMap<>();
tags.putAll(this.getTagsWithStr());
tags.putAll(this.getTagsWithBool());
tags.putAll(this.getTagsWithNumber());
Expand Down Expand Up @@ -361,7 +366,7 @@ public SofaTracerSpan getThisAsParentWhenExceedLayer() {
if (StringUtils.countMatches(rpcId, '.') + 1 > SofaTracerConstant.MAX_LAYER) {
SofaTracerSpanContext parentSpanContext = SofaTracerSpanContext.rootStart();
// discard tags
Map<String, String> baggage = new HashMap<String, String>();
Map<String, String> baggage = new HashMap<>();
baggage.putAll(this.sofaTracerSpanContext.getBizBaggage());
parentSpanContext.addBizBaggage(baggage);
parent = new SofaTracerSpan(this.sofaTracer, System.currentTimeMillis(),
Expand Down
Loading

0 comments on commit 833e189

Please sign in to comment.