diff --git a/skywalking-network/src/main/proto/Spans.proto b/skywalking-network/src/main/proto/Spans.proto index d000b1c646654ce18c323293e703902cf1812b16..06d948e23d51efb620f40a88945704fb51a03297 100644 --- a/skywalking-network/src/main/proto/Spans.proto +++ b/skywalking-network/src/main/proto/Spans.proto @@ -17,7 +17,7 @@ message RequestSpan { TraceId traceId = 1; string parentLevel = 2; int32 levelId = 3; - int64 startDate = 4; + int64 startTimestamp = 4; int32 routeKey = 5; map tags = 6; } @@ -31,7 +31,7 @@ message Span { string parentLevelId=2; int32 levelId = 3; string viewpoint = 4; - int64 startTime = 5; + int64 startTimestamp = 5; int64 cost = 6; int32 statusCode = 7; string exceptionStack = 8; diff --git a/skywalking-sniffer/skywalking-agent/pom.xml b/skywalking-sniffer/skywalking-agent/pom.xml index 170d8db8d9f45c40eca5136b22250d465f3a157d..c58d8ea27eccea88983f2873be7a657d76b79359 100644 --- a/skywalking-sniffer/skywalking-agent/pom.xml +++ b/skywalking-sniffer/skywalking-agent/pom.xml @@ -30,56 +30,62 @@ com.a.eye skywalking-jedis-2.x-plugin - 2.1-2017 + ${project.version} com.a.eye skywalking-jdbc-plugin - 2.1-2017 + ${project.version} com.a.eye skywalking-httpClient-4.x-plugin - 2.1-2017 + ${project.version} com.a.eye skywalking-dubbo-plugin - 2.1-2017 + ${project.version} com.a.eye tomcat-7.x-8.x-plugin - 2.1-2017 + ${project.version} com.a.eye motan-plugin - 2.1-2017 + ${project.version} com.a.eye skywalking-toolkit-log4j-1.x-activation - 2.1-2017 + ${project.version} com.a.eye skywalking-toolkit-log4j-2.x-activation - 2.1-2017 + ${project.version} com.a.eye skywalking-toolkit-logback-1.x-activation - 2.1-2017 + ${project.version} com.a.eye skywalking-toolkit-trace-context-activation - 2.1-2017 + ${project.version} + + + + com.a.eye + skywalking-toolkit-opentracing-activation + ${project.version} diff --git a/skywalking-sniffer/skywalking-api/pom.xml b/skywalking-sniffer/skywalking-api/pom.xml index 6d59dc74ca8c8cc958d32845eb8502a4879b6bb4..9b695813b64841948b9f2571935089952807e0bc 100644 --- a/skywalking-sniffer/skywalking-api/pom.xml +++ b/skywalking-sniffer/skywalking-api/pom.xml @@ -39,12 +39,12 @@ com.a.eye skywalking-health-report - ${project.parent.version} + ${project.version} com.a.eye skywalking-logging-api - ${project.parent.version} + ${project.version} com.lmax diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/BusinessKeyAppender.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/BusinessKeyAppender.java index 5858d6e08edbe4168fccc6364b75eba5627358e3..45760d8ac88c92f2359d054e075c76bbf2d65e62 100644 --- a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/BusinessKeyAppender.java +++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/BusinessKeyAppender.java @@ -12,8 +12,6 @@ public final class BusinessKeyAppender { /** * 在当前埋点上下文中设置业务级信息 - * - * @param businessKey */ public static void setBusinessKey2Trace(String businessKey) { @@ -27,4 +25,6 @@ public final class BusinessKeyAppender { } spanData.setBusinessKey(businessKey.substring(0, Config.BuriedPoint.BUSINESSKEY_MAX_LENGTH)); } + + } diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/Tracing.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/Tracing.java index 97e99ddf6490ee1ae6f524b26f4920f4f84aa60b..3465a7a17856532a9aebbc9a42929e4b29e624fb 100644 --- a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/Tracing.java +++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/Tracing.java @@ -1,13 +1,12 @@ package com.a.eye.skywalking.api; import com.a.eye.skywalking.context.CurrentThreadSpanStack; -import com.a.eye.skywalking.model.ContextData; +import com.a.eye.skywalking.model.RefContext; import com.a.eye.skywalking.model.Span; -import com.a.eye.skywalking.network.grpc.TraceId; import static com.a.eye.skywalking.util.TraceIdUtil.formatTraceId; -public class Tracing { +public final class Tracing { /** * Get the traceId of current trace context. * @@ -21,4 +20,35 @@ public class Tracing { return formatTraceId(spanData.getTraceId()); } + + + /** + * Get the current span of current trace. + * + * @return span. if it exists, or null + */ + public static Span getCurrentSpan() { + Span spanData = CurrentThreadSpanStack.peek(); + return spanData; + } + + /** + * the span will be tagged with the given key and value pair + * + * @param span + * @param tagKey key of tag + * @param tagValue value of tag + */ + public static void tag(Span span, String tagKey, String tagValue) { + span.tag(tagKey, tagValue); + } + + /** + * init the ref context + * + * @param refContext ref context + */ + public static void initRefContext(RefContext refContext){ + CurrentThreadSpanStack.initRefContext(refContext); + } } diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/context/CurrentThreadSpanStack.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/context/CurrentThreadSpanStack.java index 4e7edb4ab046abb5ddfaf86f59b371eab81725b2..d0a74119279d2c0c09b86283171cf91237d1cbc8 100644 --- a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/context/CurrentThreadSpanStack.java +++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/context/CurrentThreadSpanStack.java @@ -1,6 +1,7 @@ package com.a.eye.skywalking.context; +import com.a.eye.skywalking.model.RefContext; import com.a.eye.skywalking.model.Span; import java.util.ArrayList; @@ -42,7 +43,20 @@ public class CurrentThreadSpanStack { return nodes.get().pop(); } + public static void initRefContext(RefContext refContext) { + if (nodes.get() == null){ + nodes.set(new SpanNodeStack()); + } + nodes.get().initRefContext(refContext); + } + static class SpanNodeStack { + + /** + * This {@link RefContext} contain the trace context from another processor. + */ + private RefContext refContext = null; + /** * The depth of call stack should less than 20, in most cases. * The depth is calculated by span, not class or the depth of java stack. @@ -53,6 +67,8 @@ public class CurrentThreadSpanStack { Span span = spans.remove(getTopElementIdx()).getData(); if (!isEmpty()) { spans.get(getTopElementIdx()).incrementNextSubSpanLevelId(); + }else{ + refContext = null; } return span; } @@ -61,6 +77,12 @@ public class CurrentThreadSpanStack { if (!isEmpty()) { listPush(new SpanNode(span, spans.get(getTopElementIdx()).getNextSubSpanLevelId())); } else { + if (refContext != null) { + span.setTraceId(refContext.getTraceId()); + span.setParentLevel(refContext.getParentLevelId()); + span.setLevelId(0); + } + listPush(new SpanNode(span)); } @@ -85,6 +107,9 @@ public class CurrentThreadSpanStack { spans.add(spans.size(), spanNode); } + public void initRefContext(RefContext refContext) { + this.refContext = refContext; + } } static class SpanNode { diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/invoke/monitor/BaseInvokeMonitor.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/invoke/monitor/BaseInvokeMonitor.java index 8399e57f54f6526a4885d77e05fe5b849a8b36dc..68dbe074fff89f52a7f39d549da6c0a9a001f296 100644 --- a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/invoke/monitor/BaseInvokeMonitor.java +++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/invoke/monitor/BaseInvokeMonitor.java @@ -15,6 +15,7 @@ import com.a.eye.skywalking.network.grpc.RequestSpan; import com.a.eye.skywalking.util.BuriedPointMachineUtil; import java.util.HashSet; +import java.util.Map; import java.util.Set; /** @@ -61,7 +62,7 @@ public abstract class BaseInvokeMonitor { */ protected void sendRequestSpan(Span span, Identification id) { RequestSpan requestSpan = SpanTagBuilder.newBuilder(span).setBusinessKey(id.getBusinessKey()).setSpanTypeDesc(id.getSpanTypeDesc()).setCallType(id.getCallType()) - .setProcessNo(BuriedPointMachineUtil.getProcessNo()).setAddress(BuriedPointMachineUtil.getHostDesc()).buildRequestSpan(RequestSpan.newBuilder()); + .setProcessNo(BuriedPointMachineUtil.getProcessNo()).setAddress(BuriedPointMachineUtil.getHostDesc()).setSpanType(span.getSpanType()).buildRequestSpan(RequestSpan.newBuilder()); RequestSpanDisruptor.INSTANCE.ready2Send(requestSpan); } @@ -72,7 +73,7 @@ public abstract class BaseInvokeMonitor { * @param span */ protected void sendAckSpan(Span span) { - AckSpan ackSpan = SpanTagBuilder.newBuilder(span).setStatusCode(span.getStatusCode()).setExceptionStack(span.getExceptionStack()).buildAckSpan(AckSpan.newBuilder()); + AckSpan ackSpan = SpanTagBuilder.newBuilder(span).setStatusCode(span.getStatusCode()).setExceptionStack(span.getExceptionStack()).setSpanType(span.getSpanType()).buildAckSpan(AckSpan.newBuilder()); AckSpanDisruptor.INSTANCE.ready2Send(ackSpan); } diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/model/Identification.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/model/Identification.java index ebedf1de05d928c6c4dd9a390421d40f90de84ef..ac9c19a44a8168b8daa690aefef860cebedbea47 100644 --- a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/model/Identification.java +++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/model/Identification.java @@ -3,11 +3,17 @@ package com.a.eye.skywalking.model; import com.a.eye.skywalking.api.IBuriedPointType; import com.a.eye.skywalking.util.StringUtil; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + public class Identification { private String viewPoint; private String businessKey; private String spanTypeDesc; private String callType; + private long startTimestamp; + private Map tags = new HashMap(); public Identification() { //Non @@ -29,29 +35,39 @@ public class Identification { return businessKey; } + public long getStartTimestamp() { + return startTimestamp; + } + + public Map getTags() { + if (tags == null){ + return Collections.EMPTY_MAP; + } + return tags; + } public static IdentificationBuilder newBuilder() { return new IdentificationBuilder(); } public static class IdentificationBuilder { - private Identification sendData; + private Identification identification; IdentificationBuilder() { - sendData = new Identification(); + identification = new Identification(); } public Identification build() { - return sendData; + return identification; } public IdentificationBuilder viewPoint(String viewPoint) { - sendData.viewPoint = viewPoint; + identification.viewPoint = viewPoint; return this; } public IdentificationBuilder businessKey(String businessKey) { - sendData.businessKey = businessKey; + identification.businessKey = businessKey; return this; } @@ -59,11 +75,20 @@ public class Identification { if (StringUtil.isEmpty(spanType.getTypeName())) { throw new IllegalArgumentException("Span Type name cannot be null"); } - sendData.spanTypeDesc = spanType.getTypeName(); - sendData.callType = spanType.getCallType().toString(); + identification.spanTypeDesc = spanType.getTypeName(); + identification.callType = spanType.getCallType().toString(); return this; } + public IdentificationBuilder startTime(long startTime) { + identification.startTimestamp = startTime; + return this; + } + + public IdentificationBuilder tag(String tagKey, String tagValue) { + identification.tags.put(tagKey, tagValue); + return this; + } } diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/model/RefContext.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/model/RefContext.java new file mode 100644 index 0000000000000000000000000000000000000000..537a19a178ec16a317cd7c277075fd1801088ec7 --- /dev/null +++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/model/RefContext.java @@ -0,0 +1,25 @@ +package com.a.eye.skywalking.model; + +import com.a.eye.skywalking.network.grpc.TraceId; + +/** + * Created by xin on 2017/1/17. + */ +public class RefContext{ + private TraceId traceId; + private String parentLevelId; + + public RefContext(String contentDataStr) { + ContextData contextData = new ContextData(contentDataStr); + this.traceId = contextData.getTraceId(); + this.parentLevelId = contextData.getParentLevel(); + } + + public TraceId getTraceId() { + return traceId; + } + + public String getParentLevelId() { + return parentLevelId; + } +} diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/model/Span.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/model/Span.java index f1642486ffef39f2bfb896ab9c31b64e4664cd81..2feb2f99c41e1889fa74c000fcd9f79c86d16788 100644 --- a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/model/Span.java +++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/model/Span.java @@ -39,7 +39,7 @@ public class Span { /** * 节点调用开始时间 */ - protected long startDate = System.currentTimeMillis(); + protected long startTimestamp = System.currentTimeMillis(); /** * 节点调用的状态
@@ -87,7 +87,6 @@ public class Span { this.parentLevel = parentLevel; this.levelId = levelId; this.routeKey = routeKey; - this.startDate = System.currentTimeMillis(); this.setTag(Tag.USER_NAME, Config.SkyWalking.USERNAME); this.setTag(Tag.APPLICATION_CODE, Config.SkyWalking.APPLICATION_CODE); @@ -106,6 +105,10 @@ public class Span { this.parentLevel = parentLevel; } + public void setTraceId(TraceId traceId) { + this.traceId = traceId; + } + public int getLevelId() { return levelId; } @@ -166,12 +169,12 @@ public class Span { public RequestSpan.Builder buildRequestSpan(RequestSpan.Builder builder) { return builder.setTraceId(this.traceId).setParentLevel(this.parentLevel).setLevelId(this.levelId) - .setStartDate(this.startDate).setRouteKey(routeKey).putAllTags(tags); + .setStartTimestamp(this.startTimestamp).setRouteKey(routeKey).putAllTags(tags); } public AckSpan.Builder buildAckSpan(AckSpan.Builder builder) { return builder.setTraceId(this.traceId).setParentLevel(this.parentLevel).setLevelId(this.levelId) - .setCost(System.currentTimeMillis() - this.startDate).setRouteKey(routeKey).putAllTags(tags); + .setCost(System.currentTimeMillis() - this.startTimestamp).setRouteKey(routeKey).putAllTags(tags); } public int getRouteKey() { @@ -197,4 +200,12 @@ public class Span { public String getExceptionStack() { return exceptionStack; } + + public void tag(String key, String value) { + tags.put(key, value); + } + + public void setStartTimestamp(long startTimestamp) { + this.startTimestamp = startTimestamp; + } } diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/model/SpanTagBuilder.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/model/SpanTagBuilder.java index 0e16454ca0a1fd0a705fc2f9da49d0ccbaf949af..845893daed4a0cd2d950baee0f3a92248749e7de 100644 --- a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/model/SpanTagBuilder.java +++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/model/SpanTagBuilder.java @@ -20,8 +20,8 @@ public class SpanTagBuilder { } - public SpanTagBuilder setSpanType(int spanType) { - span.setTag(Tag.SPAN_TYPE, spanType + ""); + public SpanTagBuilder setSpanType(String spanType) { + span.setTag(Tag.SPAN_TYPE, spanType); return this; } diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/util/ContextGenerator.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/util/ContextGenerator.java index 8ef3c6aaea399c76200dad043447db992ed9290a..07b1d06a2e1bba9d6777ab05e1539a78e6af5bfe 100644 --- a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/util/ContextGenerator.java +++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/util/ContextGenerator.java @@ -5,6 +5,8 @@ import com.a.eye.skywalking.model.ContextData; import com.a.eye.skywalking.model.Identification; import com.a.eye.skywalking.model.Span; +import java.util.Map; + public final class ContextGenerator { /** * 利用本地ThreadLocal的信息创建Context,主要用于非跨JVM的操作 @@ -50,6 +52,12 @@ public final class ContextGenerator { span = new Span(parentSpan, id.getViewPoint()); } + if (id.getStartTimestamp() != 0) { + span.setStartTimestamp(id.getStartTimestamp()); + } + for (Map.Entry entry : id.getTags().entrySet()) { + span.tag(entry.getKey(), entry.getValue()); + } return span; } diff --git a/skywalking-sniffer/skywalking-sdk-plugin/dubbo-plugin/src/main/java/com/a/eye/skywalking/plugin/dubbo/DubboBuriedPointType.java b/skywalking-sniffer/skywalking-sdk-plugin/dubbo-plugin/src/main/java/com/a/eye/skywalking/plugin/dubbo/DubboBuriedPointType.java index e9f177207d6da3aa2a76f89fa43dd0f5d4ad9f2f..53264dd9ed9efc8c6e6088317758cf9628c9f2b8 100644 --- a/skywalking-sniffer/skywalking-sdk-plugin/dubbo-plugin/src/main/java/com/a/eye/skywalking/plugin/dubbo/DubboBuriedPointType.java +++ b/skywalking-sniffer/skywalking-sdk-plugin/dubbo-plugin/src/main/java/com/a/eye/skywalking/plugin/dubbo/DubboBuriedPointType.java @@ -2,17 +2,8 @@ package com.a.eye.skywalking.plugin.dubbo; import com.a.eye.skywalking.api.IBuriedPointType; -public class DubboBuriedPointType implements IBuriedPointType { - - private static DubboBuriedPointType dubboBuriedPointType; - - public static IBuriedPointType instance() { - if (dubboBuriedPointType == null) { - dubboBuriedPointType = new DubboBuriedPointType(); - } - - return dubboBuriedPointType; - } +public enum DubboBuriedPointType implements IBuriedPointType { + INSTANCE; @Override public String getTypeName() { @@ -24,8 +15,4 @@ public class DubboBuriedPointType implements IBuriedPointType { return CallType.SYNC; } - private DubboBuriedPointType() { - //Non - } - } diff --git a/skywalking-sniffer/skywalking-sdk-plugin/dubbo-plugin/src/main/java/com/a/eye/skywalking/plugin/dubbo/MonitorFilterInterceptor.java b/skywalking-sniffer/skywalking-sdk-plugin/dubbo-plugin/src/main/java/com/a/eye/skywalking/plugin/dubbo/MonitorFilterInterceptor.java index c88458879283b0b575916606ea7cd6101fe62585..6ef3b40fa7180e42523bf40dc230364048563da3 100644 --- a/skywalking-sniffer/skywalking-sdk-plugin/dubbo-plugin/src/main/java/com/a/eye/skywalking/plugin/dubbo/MonitorFilterInterceptor.java +++ b/skywalking-sniffer/skywalking-sdk-plugin/dubbo-plugin/src/main/java/com/a/eye/skywalking/plugin/dubbo/MonitorFilterInterceptor.java @@ -128,7 +128,7 @@ public class MonitorFilterInterceptor implements InstanceMethodsAroundIntercepto } viewPoint.append(")"); - return Identification.newBuilder().viewPoint(viewPoint.toString()).spanType(DubboBuriedPointType.instance()) + return Identification.newBuilder().viewPoint(viewPoint.toString()).spanType(DubboBuriedPointType.INSTANCE) .build(); } diff --git a/skywalking-sniffer/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/com/a/eye/skywalking/plugin/httpClient/v4/HttpClientExecuteInterceptor.java b/skywalking-sniffer/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/com/a/eye/skywalking/plugin/httpClient/v4/HttpClientExecuteInterceptor.java index 064310813c162bfeaafdd1dbe95d04a10e757158..221a65c083306711d414451dda87a18e1077ec53 100644 --- a/skywalking-sniffer/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/com/a/eye/skywalking/plugin/httpClient/v4/HttpClientExecuteInterceptor.java +++ b/skywalking-sniffer/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/com/a/eye/skywalking/plugin/httpClient/v4/HttpClientExecuteInterceptor.java @@ -41,7 +41,7 @@ public class HttpClientExecuteInterceptor implements InstanceMethodsAroundInterc .toString()) .spanType( WebBuriedPointType - .instance()) + .INSTANCE) .build()).toString()); } diff --git a/skywalking-sniffer/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/com/a/eye/skywalking/plugin/httpClient/v4/WebBuriedPointType.java b/skywalking-sniffer/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/com/a/eye/skywalking/plugin/httpClient/v4/WebBuriedPointType.java index 556ebcb4b1d1ab5c4104c31e71cbdb6ae1edc00d..05b4ac70edd7b6eb3509a41d4cbfe2a73c76df96 100644 --- a/skywalking-sniffer/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/com/a/eye/skywalking/plugin/httpClient/v4/WebBuriedPointType.java +++ b/skywalking-sniffer/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/com/a/eye/skywalking/plugin/httpClient/v4/WebBuriedPointType.java @@ -2,17 +2,8 @@ package com.a.eye.skywalking.plugin.httpClient.v4; import com.a.eye.skywalking.api.IBuriedPointType; -public class WebBuriedPointType implements IBuriedPointType { - - private static WebBuriedPointType webBuriedPointType; - - public static IBuriedPointType instance() { - if (webBuriedPointType == null) { - webBuriedPointType = new WebBuriedPointType(); - } - - return webBuriedPointType; - } +public enum WebBuriedPointType implements IBuriedPointType { + INSTANCE; @Override public String getTypeName() { @@ -24,7 +15,4 @@ public class WebBuriedPointType implements IBuriedPointType { return CallType.SYNC; } - private WebBuriedPointType() { - // Non - } } diff --git a/skywalking-sniffer/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/a/eye/skywalking/plugin/jdbc/CallableStatementTracing.java b/skywalking-sniffer/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/a/eye/skywalking/plugin/jdbc/CallableStatementTracing.java index 5f036bddce7e4e2bd48ef495339e274afbac1d71..0dc792bedeb77c7aac161010bf708f6b92dc33d1 100644 --- a/skywalking-sniffer/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/a/eye/skywalking/plugin/jdbc/CallableStatementTracing.java +++ b/skywalking-sniffer/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/a/eye/skywalking/plugin/jdbc/CallableStatementTracing.java @@ -25,7 +25,7 @@ public class CallableStatementTracing { "callableStatement." + method + (sql == null || sql.length() == 0 ? "" - : ":" + sql)).spanType(JDBCBuriedPointType.instance()).build()); + : ":" + sql)).spanType(JDBCBuriedPointType.INSTANCE).build()); return exec.exe(realStatement, sql); } catch (SQLException e) { rpcClientInvokeMonitor.occurException(e); diff --git a/skywalking-sniffer/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/a/eye/skywalking/plugin/jdbc/ConnectionTracing.java b/skywalking-sniffer/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/a/eye/skywalking/plugin/jdbc/ConnectionTracing.java index 40cc28bd5491b09b99d5c7686dbdb87fc8c6cf6c..613872bf04218e099d5b603e1b1be4d5dd8153d3 100755 --- a/skywalking-sniffer/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/a/eye/skywalking/plugin/jdbc/ConnectionTracing.java +++ b/skywalking-sniffer/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/a/eye/skywalking/plugin/jdbc/ConnectionTracing.java @@ -25,7 +25,7 @@ public class ConnectionTracing { "connection." + method + (sql == null || sql.length() == 0 ? "" - : ":" + sql)).spanType(JDBCBuriedPointType.instance()).build()); + : ":" + sql)).spanType(JDBCBuriedPointType.INSTANCE).build()); return exec.exe(realConnection, sql); } catch (SQLException e) { rpcClientInvokeMonitor.occurException(e); diff --git a/skywalking-sniffer/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/a/eye/skywalking/plugin/jdbc/PreparedStatementTracing.java b/skywalking-sniffer/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/a/eye/skywalking/plugin/jdbc/PreparedStatementTracing.java index 8b56eaa1dc708318cb70b38ccd17c93ed79fa84a..ec57bb8e52a277498dab2ee4d4c2a05624ff1e12 100644 --- a/skywalking-sniffer/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/a/eye/skywalking/plugin/jdbc/PreparedStatementTracing.java +++ b/skywalking-sniffer/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/a/eye/skywalking/plugin/jdbc/PreparedStatementTracing.java @@ -26,7 +26,7 @@ public class PreparedStatementTracing { "preaparedStatement." + method + (sql == null || sql.length() == 0 ? "" - : ":" + sql)).spanType(JDBCBuriedPointType.instance()).build()); + : ":" + sql)).spanType(JDBCBuriedPointType.INSTANCE).build()); return exec.exe(realStatement, sql); } catch (SQLException e) { rpcClientInvokeMonitor.occurException(e); diff --git a/skywalking-sniffer/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/a/eye/skywalking/plugin/jdbc/StatementTracing.java b/skywalking-sniffer/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/a/eye/skywalking/plugin/jdbc/StatementTracing.java index 32a7bdee515b3b01b39f93850a722c3d97c1eb81..25ed23df920074dc00e3ac60fd203a655b7998eb 100644 --- a/skywalking-sniffer/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/a/eye/skywalking/plugin/jdbc/StatementTracing.java +++ b/skywalking-sniffer/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/a/eye/skywalking/plugin/jdbc/StatementTracing.java @@ -25,7 +25,7 @@ public class StatementTracing { "statement." + method + (sql == null || sql.length() == 0 ? "" - : ":" + sql)).spanType(JDBCBuriedPointType.instance()).build()); + : ":" + sql)).spanType(JDBCBuriedPointType.INSTANCE).build()); return exec.exe(realStatement, sql); } catch (SQLException e) { rpcClientInvokeMonitor.occurException(e); diff --git a/skywalking-sniffer/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/a/eye/skywalking/plugin/jdbc/define/JDBCBuriedPointType.java b/skywalking-sniffer/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/a/eye/skywalking/plugin/jdbc/define/JDBCBuriedPointType.java index c06865c627a23248c4a207d00721a307057146e0..e398a55b3baaa15383d422e8bc6cd95678bab290 100644 --- a/skywalking-sniffer/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/a/eye/skywalking/plugin/jdbc/define/JDBCBuriedPointType.java +++ b/skywalking-sniffer/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/a/eye/skywalking/plugin/jdbc/define/JDBCBuriedPointType.java @@ -2,18 +2,9 @@ package com.a.eye.skywalking.plugin.jdbc.define; import com.a.eye.skywalking.api.IBuriedPointType; -public class JDBCBuriedPointType implements IBuriedPointType { - - private static JDBCBuriedPointType jdbcBuriedPointType; - - public static IBuriedPointType instance() { - if (jdbcBuriedPointType == null) { - jdbcBuriedPointType = new JDBCBuriedPointType(); - } - - return jdbcBuriedPointType; - } +public enum JDBCBuriedPointType implements IBuriedPointType { + INSTANCE; @Override public String getTypeName() { @@ -25,7 +16,4 @@ public class JDBCBuriedPointType implements IBuriedPointType { return CallType.LOCAL; } - private JDBCBuriedPointType() { - //Non - } } diff --git a/skywalking-sniffer/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/com/a/eye/skywalking/plugin/jedis/v2/JedisMethodInterceptor.java b/skywalking-sniffer/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/com/a/eye/skywalking/plugin/jedis/v2/JedisMethodInterceptor.java index 1d2858a95ab12355a3ac08d4bbd9b36ba4eb2bd1..c43ead0245c05fc490f307aa31b37e41a73b098d 100644 --- a/skywalking-sniffer/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/com/a/eye/skywalking/plugin/jedis/v2/JedisMethodInterceptor.java +++ b/skywalking-sniffer/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/com/a/eye/skywalking/plugin/jedis/v2/JedisMethodInterceptor.java @@ -24,7 +24,7 @@ public class JedisMethodInterceptor extends SimpleObjectFirstInvokeInterceptor { .viewPoint( context.get(REDIS_CONN_INFO_KEY, String.class) + " " + interceptorContext.methodName()) - .spanType(RedisBuriedPointType.instance()); + .spanType(RedisBuriedPointType.INSTANCE); if (interceptorContext.allArguments().length > 0 && interceptorContext.allArguments()[0] instanceof String) { builder.businessKey("key=" diff --git a/skywalking-sniffer/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/com/a/eye/skywalking/plugin/jedis/v2/RedisBuriedPointType.java b/skywalking-sniffer/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/com/a/eye/skywalking/plugin/jedis/v2/RedisBuriedPointType.java index 442e49859395e00dfaab8a07177070ea59902ed0..4718186f69b54b449c3896a7898e574d0156b2e4 100644 --- a/skywalking-sniffer/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/com/a/eye/skywalking/plugin/jedis/v2/RedisBuriedPointType.java +++ b/skywalking-sniffer/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/com/a/eye/skywalking/plugin/jedis/v2/RedisBuriedPointType.java @@ -2,17 +2,8 @@ package com.a.eye.skywalking.plugin.jedis.v2; import com.a.eye.skywalking.api.IBuriedPointType; -public class RedisBuriedPointType implements IBuriedPointType { - private static RedisBuriedPointType redisBuriedPointType; - - public static IBuriedPointType instance() { - if (redisBuriedPointType == null) { - redisBuriedPointType = new RedisBuriedPointType(); - } - - return redisBuriedPointType; - } - +public enum RedisBuriedPointType implements IBuriedPointType { + INSTANCE; @Override public String getTypeName() { @@ -24,5 +15,4 @@ public class RedisBuriedPointType implements IBuriedPointType { return CallType.SYNC; } - private RedisBuriedPointType(){} } diff --git a/skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/MotanBuriedPointType.java b/skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/MotanBuriedPointType.java index a4e987494fcb0f4d40f47d999e40d905390500e1..448a3e53d899cc8473df88667bac715088f7159b 100644 --- a/skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/MotanBuriedPointType.java +++ b/skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/MotanBuriedPointType.java @@ -2,21 +2,13 @@ package com.a.eye.skywalking.plugin.motan; import com.a.eye.skywalking.api.IBuriedPointType; -public class MotanBuriedPointType implements IBuriedPointType { +public enum MotanBuriedPointType implements IBuriedPointType { - private static MotanBuriedPointType motanBuriedPointType; - - public static IBuriedPointType instance() { - if (motanBuriedPointType == null) { - motanBuriedPointType = new MotanBuriedPointType(); - } - - return motanBuriedPointType; - } + INSTANCE; @Override public String getTypeName() { - return "M"; + return "MO"; } @Override @@ -24,8 +16,4 @@ public class MotanBuriedPointType implements IBuriedPointType { return CallType.SYNC; } - private MotanBuriedPointType() { - //Non - } - } diff --git a/skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/MotanClientInterceptor.java b/skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/MotanClientCallInterceptor.java similarity index 77% rename from skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/MotanClientInterceptor.java rename to skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/MotanClientCallInterceptor.java index 4e87d8e26ff8cc69d6fc65f5a204fc88442bf077..76590b8b3532790fd11fab18f432c3d0c6cecd00 100644 --- a/skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/MotanClientInterceptor.java +++ b/skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/MotanClientCallInterceptor.java @@ -15,19 +15,18 @@ import com.weibo.api.motan.rpc.URL; /** * Motan client interceptor */ -public class MotanClientInterceptor implements InstanceMethodsAroundInterceptor, InstanceConstructorInterceptor { - @Override - public void onConstruct(EnhancedClassInstanceContext context, ConstructorInvokeContext interceptorContext) { - context.set("serviceURI", interceptorContext.allArguments()[1]); - } +public class MotanClientCallInterceptor implements InstanceMethodsAroundInterceptor{ + + private static final String REQUEST_URL = "REQUEST_URL"; @Override public void beforeMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, MethodInterceptResult result) { - com.weibo.api.motan.rpc.Request request = (com.weibo.api.motan.rpc.Request) interceptorContext.allArguments()[0]; - if (request != null) { + URL url = (URL) context.get(REQUEST_URL); + Request request = (Request) interceptorContext.allArguments()[0]; + if (url != null) { ContextData contextData = new RPCClientInvokeMonitor() - .beforeInvoke(generateIdentify(request, (com.weibo.api.motan.rpc.URL) context.get("serviceURI"))); + .beforeInvoke(generateIdentify(request, url)); String contextDataStr = contextData.toString(); request.setAttachment("contextData", contextDataStr); } @@ -57,6 +56,6 @@ public class MotanClientInterceptor implements InstanceMethodsAroundInterceptor, public static Identification generateIdentify(Request request, URL serviceURI) { return Identification.newBuilder().viewPoint(generateViewPoint(serviceURI, request)) - .spanType(MotanBuriedPointType.instance()).build(); + .spanType(MotanBuriedPointType.INSTANCE).build(); } } diff --git a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/ExtractCrossProcessByteBufferContextInterceptor.java b/skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/MotanClientFetchCallURLInterceptor.java similarity index 71% rename from skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/ExtractCrossProcessByteBufferContextInterceptor.java rename to skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/MotanClientFetchCallURLInterceptor.java index 658af9a354c1190bc7c609207028a3facd503d35..104eb206cc399b49c8f8323f9fb0ee4464716ec2 100644 --- a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/ExtractCrossProcessByteBufferContextInterceptor.java +++ b/skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/MotanClientFetchCallURLInterceptor.java @@ -1,4 +1,4 @@ -package com.a.eye.skywalking.toolkit.activation.opentracing; +package com.a.eye.skywalking.plugin.motan; import com.a.eye.skywalking.plugin.interceptor.EnhancedClassInstanceContext; import com.a.eye.skywalking.plugin.interceptor.enhance.InstanceMethodInvokeContext; @@ -6,17 +6,20 @@ import com.a.eye.skywalking.plugin.interceptor.enhance.InstanceMethodsAroundInte import com.a.eye.skywalking.plugin.interceptor.enhance.MethodInterceptResult; /** - * Created by wusheng on 2017/1/3. + * Created by xin on 2017/1/23. */ -public class ExtractCrossProcessByteBufferContextInterceptor implements InstanceMethodsAroundInterceptor { +public class MotanClientFetchCallURLInterceptor implements InstanceMethodsAroundInterceptor { + + private static final String REQUEST_URL = "REQUEST_URL"; + @Override public void beforeMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, MethodInterceptResult result) { - + context.set(REQUEST_URL, interceptorContext.allArguments()[0]); } @Override public Object afterMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, Object ret) { - return null; + return ret; } @Override diff --git a/skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/MotanServerInterceptor.java b/skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/MotanServerInterceptor.java index ed8f67b16b01d64bc4b207598dfc713631b9f544..89db91c7442af2762800eb3112a694f3ee7d7376 100644 --- a/skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/MotanServerInterceptor.java +++ b/skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/MotanServerInterceptor.java @@ -52,6 +52,6 @@ public class MotanServerInterceptor implements InstanceConstructorInterceptor, I public static Identification generateIdentify(Request request, URL serviceURI) { return Identification.newBuilder().viewPoint(generateViewPoint(serviceURI, request)) - .spanType(MotanBuriedPointType.instance()).build(); + .spanType(MotanBuriedPointType.INSTANCE).build(); } } diff --git a/skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/define/MotanClientDefine.java b/skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/define/MotanClientDefine.java index d96f8cfe054e0be2cc4d8b6c967e695a77e060b8..df9272193ef4c132fb742380f7f9e30a421f8d88 100644 --- a/skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/define/MotanClientDefine.java +++ b/skywalking-sniffer/skywalking-sdk-plugin/motan-plugin/src/main/java/com/a/eye/skywalking/plugin/motan/define/MotanClientDefine.java @@ -3,36 +3,36 @@ package com.a.eye.skywalking.plugin.motan.define; import com.a.eye.skywalking.plugin.interceptor.ConstructorInterceptPoint; import com.a.eye.skywalking.plugin.interceptor.InstanceMethodsInterceptPoint; import com.a.eye.skywalking.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; + import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.matcher.ElementMatcher; -import static net.bytebuddy.matcher.ElementMatchers.any; import static net.bytebuddy.matcher.ElementMatchers.named; public class MotanClientDefine extends ClassInstanceMethodsEnhancePluginDefine { @Override protected String enhanceClassName() { - return "com.weibo.api.motan.rpc.AbstractReferer"; + return "com.weibo.api.motan.cluster.support.ClusterSpi"; } @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { - return new ConstructorInterceptPoint[] {new ConstructorInterceptPoint() { + return new ConstructorInterceptPoint[0]; + } + + @Override + protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() { + return new InstanceMethodsInterceptPoint[]{new InstanceMethodsInterceptPoint() { @Override - public ElementMatcher getConstructorMatcher() { - return any(); + public ElementMatcher getMethodsMatcher() { + return named("setUrl"); } @Override - public String getConstructorInterceptor() { - return "com.a.eye.skywalking.plugin.motan.MotanClientInterceptor"; + public String getMethodsInterceptor() { + return "com.a.eye.skywalking.plugin.motan.MotanClientFetchCallURLInterceptor"; } - }}; - } - - @Override - protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() { - return new InstanceMethodsInterceptPoint[] {new InstanceMethodsInterceptPoint() { + }, new InstanceMethodsInterceptPoint() { @Override public ElementMatcher getMethodsMatcher() { return named("call"); @@ -40,7 +40,7 @@ public class MotanClientDefine extends ClassInstanceMethodsEnhancePluginDefine { @Override public String getMethodsInterceptor() { - return "com.a.eye.skywalking.plugin.motan.MotanClientInterceptor"; + return "com.a.eye.skywalking.plugin.motan.MotanClientCallInterceptor"; } }}; } diff --git a/skywalking-sniffer/skywalking-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/com/a/eye/skywalking/plugin/tomcat78x/TomcatPluginInterceptor.java b/skywalking-sniffer/skywalking-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/com/a/eye/skywalking/plugin/tomcat78x/TomcatPluginInterceptor.java index a77db1aee8ec971633c8082adb93fe0ab02146ec..6a914e4a425a560668236a3c10254dbb0496b227 100644 --- a/skywalking-sniffer/skywalking-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/com/a/eye/skywalking/plugin/tomcat78x/TomcatPluginInterceptor.java +++ b/skywalking-sniffer/skywalking-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/com/a/eye/skywalking/plugin/tomcat78x/TomcatPluginInterceptor.java @@ -47,7 +47,7 @@ public class TomcatPluginInterceptor implements InstanceMethodsAroundInterceptor private Identification generateIdentification(HttpServletRequest request) { return Identification.newBuilder() .viewPoint(request.getRequestURL().toString()) - .spanType(WebBuriedPointType.instance()) + .spanType(WebBuriedPointType.INSTANCE) .build(); } diff --git a/skywalking-sniffer/skywalking-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/com/a/eye/skywalking/plugin/tomcat78x/WebBuriedPointType.java b/skywalking-sniffer/skywalking-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/com/a/eye/skywalking/plugin/tomcat78x/WebBuriedPointType.java index b71721aef59ae0725f031c151cd496b5265334bf..99f645805134ad430f32328898a6af2a52c203c2 100644 --- a/skywalking-sniffer/skywalking-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/com/a/eye/skywalking/plugin/tomcat78x/WebBuriedPointType.java +++ b/skywalking-sniffer/skywalking-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/com/a/eye/skywalking/plugin/tomcat78x/WebBuriedPointType.java @@ -2,17 +2,8 @@ package com.a.eye.skywalking.plugin.tomcat78x; import com.a.eye.skywalking.api.IBuriedPointType; -public class WebBuriedPointType implements IBuriedPointType { - - private static WebBuriedPointType webBuriedPointType; - - public static IBuriedPointType instance() { - if (webBuriedPointType == null) { - webBuriedPointType = new WebBuriedPointType(); - } - - return webBuriedPointType; - } +public enum WebBuriedPointType implements IBuriedPointType { + INSTANCE; @Override public String getTypeName() { @@ -24,7 +15,4 @@ public class WebBuriedPointType implements IBuriedPointType { return CallType.SYNC; } - private WebBuriedPointType() { - // Non - } } diff --git a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/pom.xml b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/pom.xml index 82e2ecab0a99c3eb71d8ec4e735d5967de6d51a2..b3c635c1f7e9b994516590c6c39f0c5630e5b3e8 100644 --- a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/pom.xml +++ b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/pom.xml @@ -11,5 +11,16 @@ skywalking-toolkit-opentracing-activation - + + + com.a.eye + skywalking-api + ${project.version} + + + com.a.eye + skywalking-toolkit-opentracing + ${project.version} + + diff --git a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/span/SkyWalkingSpanActivation.java b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/span/SkyWalkingSpanActivation.java new file mode 100644 index 0000000000000000000000000000000000000000..b93a5214fa0f28ba8d950169487af0edc93b594c --- /dev/null +++ b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/span/SkyWalkingSpanActivation.java @@ -0,0 +1,80 @@ +package com.a.eye.skywalking.toolkit.activation.opentracing.span; + +import com.a.eye.skywalking.plugin.interceptor.ConstructorInterceptPoint; +import com.a.eye.skywalking.plugin.interceptor.InstanceMethodsInterceptPoint; +import com.a.eye.skywalking.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; + +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; + +import java.util.Map; + +import static net.bytebuddy.matcher.ElementMatchers.named; +import static net.bytebuddy.matcher.ElementMatchers.noneOf; +import static net.bytebuddy.matcher.ElementMatchers.takesArguments; + +/** + * Created by xin on 2017/1/16. + */ +public class SkyWalkingSpanActivation extends ClassInstanceMethodsEnhancePluginDefine { + @Override + protected String enhanceClassName() { + return "com.a.eye.skywalking.toolkit.opentracing.SkyWalkingSpan"; + } + + @Override + protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { + return new ConstructorInterceptPoint[]{ + new ConstructorInterceptPoint() { + @Override + public ElementMatcher getConstructorMatcher() { + return takesArguments(String.class, long.class, Map.class); + } + + @Override + public String getConstructorInterceptor() { + return "com.a.eye.skywalking.toolkit.activation.opentracing.span.interceptor.SpanNewInstanceInterceptor"; + } + } + }; + } + + @Override + protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() { + return new InstanceMethodsInterceptPoint[]{ + new InstanceMethodsInterceptPoint() { + @Override + public ElementMatcher getMethodsMatcher() { + return named("setTag"); + } + + @Override + public String getMethodsInterceptor() { + return "com.a.eye.skywalking.toolkit.activation.opentracing.span.interceptor.SpanSetTagInterceptor"; + } + }, + new InstanceMethodsInterceptPoint() { + @Override + public ElementMatcher getMethodsMatcher() { + return named("setOperationName"); + } + + @Override + public String getMethodsInterceptor() { + return "com.a.eye.skywalking.toolkit.activation.opentracing.span.interceptor.SpanSetOperationNameInterceptor"; + } + }, + new InstanceMethodsInterceptPoint() { + @Override + public ElementMatcher getMethodsMatcher() { + return named("finish"); + } + + @Override + public String getMethodsInterceptor() { + return "com.a.eye.skywalking.toolkit.activation.opentracing.span.interceptor.SpanFinishInterceptor"; + } + } + }; + } +} diff --git a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/span/interceptor/SpanFinishInterceptor.java b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/span/interceptor/SpanFinishInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..a285b4da21afd21afc3184b5755fb3670704aa80 --- /dev/null +++ b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/span/interceptor/SpanFinishInterceptor.java @@ -0,0 +1,40 @@ +package com.a.eye.skywalking.toolkit.activation.opentracing.span.interceptor; + +import com.a.eye.skywalking.api.Tracing; +import com.a.eye.skywalking.invoke.monitor.LocalMethodInvokeMonitor; +import com.a.eye.skywalking.model.Span; +import com.a.eye.skywalking.plugin.interceptor.EnhancedClassInstanceContext; +import com.a.eye.skywalking.plugin.interceptor.enhance.InstanceMethodInvokeContext; +import com.a.eye.skywalking.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; +import com.a.eye.skywalking.plugin.interceptor.enhance.MethodInterceptResult; + +import java.util.Map; + +/** + * Created by xin on 2017/1/16. + */ +public class SpanFinishInterceptor implements InstanceMethodsAroundInterceptor { + @Override + public void beforeMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, MethodInterceptResult result) { + // do nothing + } + + @Override + public Object afterMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, Object ret) { + Span currentSpan = Tracing.getCurrentSpan(); + + Map tags = (Map) context.get("tags"); + if (tags != null) { + for (Map.Entry entry : tags.entrySet()) { + Tracing.tag(currentSpan, entry.getKey(), entry.getValue()); + } + } + + new LocalMethodInvokeMonitor().afterInvoke(); + return ret; + } + + @Override + public void handleMethodException(Throwable t, EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext) { + } +} diff --git a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/span/interceptor/SpanNewInstanceInterceptor.java b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/span/interceptor/SpanNewInstanceInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..26b3805e520c36e93bee6027a408ff3f9910f1c7 --- /dev/null +++ b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/span/interceptor/SpanNewInstanceInterceptor.java @@ -0,0 +1,18 @@ +package com.a.eye.skywalking.toolkit.activation.opentracing.span.interceptor; + +import com.a.eye.skywalking.plugin.interceptor.EnhancedClassInstanceContext; +import com.a.eye.skywalking.plugin.interceptor.enhance.ConstructorInvokeContext; +import com.a.eye.skywalking.plugin.interceptor.enhance.InstanceConstructorInterceptor; + +/** + * @author zhangxin + */ +public class SpanNewInstanceInterceptor implements InstanceConstructorInterceptor { + + private static final String OPERATION_NAME = "operationName"; + + @Override + public void onConstruct(EnhancedClassInstanceContext context, ConstructorInvokeContext interceptorContext) { + context.set(OPERATION_NAME, interceptorContext.allArguments()[0]); + } +} diff --git a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/ExtractCrossProcessTextMapContextInterceptor.java b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/span/interceptor/SpanSetOperationNameInterceptor.java similarity index 69% rename from skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/ExtractCrossProcessTextMapContextInterceptor.java rename to skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/span/interceptor/SpanSetOperationNameInterceptor.java index ad5fa3ff7483c1611b1923f8769f7dd409769fbd..e7f6dc7a4d0a25b3585a471cec82b4cb9a35074f 100644 --- a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/ExtractCrossProcessTextMapContextInterceptor.java +++ b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/span/interceptor/SpanSetOperationNameInterceptor.java @@ -1,4 +1,4 @@ -package com.a.eye.skywalking.toolkit.activation.opentracing; +package com.a.eye.skywalking.toolkit.activation.opentracing.span.interceptor; import com.a.eye.skywalking.plugin.interceptor.EnhancedClassInstanceContext; import com.a.eye.skywalking.plugin.interceptor.enhance.InstanceMethodInvokeContext; @@ -6,17 +6,20 @@ import com.a.eye.skywalking.plugin.interceptor.enhance.InstanceMethodsAroundInte import com.a.eye.skywalking.plugin.interceptor.enhance.MethodInterceptResult; /** - * Created by wusheng on 2017/1/3. + * Created by xin on 2017/1/16. */ -public class ExtractCrossProcessTextMapContextInterceptor implements InstanceMethodsAroundInterceptor { +public class SpanSetOperationNameInterceptor implements InstanceMethodsAroundInterceptor { + + private static final String OPERATION_NAME = "operationName"; + @Override public void beforeMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, MethodInterceptResult result) { - + context.set(OPERATION_NAME, interceptorContext.allArguments()[0]); } @Override public Object afterMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, Object ret) { - return null; + return ret; } @Override diff --git a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/span/interceptor/SpanSetTagInterceptor.java b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/span/interceptor/SpanSetTagInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..978d2e43b723031b19d2e7c6e5c43454cdc74892 --- /dev/null +++ b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/span/interceptor/SpanSetTagInterceptor.java @@ -0,0 +1,39 @@ +package com.a.eye.skywalking.toolkit.activation.opentracing.span.interceptor; + +import com.a.eye.skywalking.plugin.interceptor.EnhancedClassInstanceContext; +import com.a.eye.skywalking.plugin.interceptor.enhance.InstanceMethodInvokeContext; +import com.a.eye.skywalking.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; +import com.a.eye.skywalking.plugin.interceptor.enhance.MethodInterceptResult; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by xin on 2017/1/16. + */ +public class SpanSetTagInterceptor implements InstanceMethodsAroundInterceptor { + + private static final String TAGS = "tags"; + + @Override + public void beforeMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, MethodInterceptResult result) { + Map contextTags = (Map) context.get(TAGS); + if (!context.isContain(TAGS)){ + contextTags = new HashMap(); + context.set(TAGS, contextTags); + } + + contextTags.put((String) interceptorContext.allArguments()[0], String.valueOf(interceptorContext + .allArguments()[1])); + } + + @Override + public Object afterMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, Object ret) { + return ret; + } + + @Override + public void handleMethodException(Throwable t, EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext) { + + } +} diff --git a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/spanbuilder/OpenTracingLocalBuriedPointType.java b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/spanbuilder/OpenTracingLocalBuriedPointType.java new file mode 100644 index 0000000000000000000000000000000000000000..340a46865a672c2d761072ebaadabd0fae74f4f6 --- /dev/null +++ b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/spanbuilder/OpenTracingLocalBuriedPointType.java @@ -0,0 +1,20 @@ +package com.a.eye.skywalking.toolkit.activation.opentracing.spanbuilder; + +import com.a.eye.skywalking.api.IBuriedPointType; + +/** + * @author zhangxin + */ +public enum OpenTracingLocalBuriedPointType implements IBuriedPointType { + INSTANCE; + + @Override + public String getTypeName() { + return "OT"; + } + + @Override + public CallType getCallType() { + return CallType.LOCAL; + } +} diff --git a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/spanbuilder/SkyWalkingSpanBuilderActivation.java b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/spanbuilder/SkyWalkingSpanBuilderActivation.java new file mode 100644 index 0000000000000000000000000000000000000000..c575a20c742534c5b112d3fd20d598abc9d7f2bf --- /dev/null +++ b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/spanbuilder/SkyWalkingSpanBuilderActivation.java @@ -0,0 +1,77 @@ +package com.a.eye.skywalking.toolkit.activation.opentracing.spanbuilder; + +import com.a.eye.skywalking.plugin.interceptor.ConstructorInterceptPoint; +import com.a.eye.skywalking.plugin.interceptor.InstanceMethodsInterceptPoint; +import com.a.eye.skywalking.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; + +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; + +import static net.bytebuddy.matcher.ElementMatchers.named; +import static net.bytebuddy.matcher.ElementMatchers.takesArguments; + +/** + * Created by xin on 2017/1/16. + */ +public class SkyWalkingSpanBuilderActivation extends ClassInstanceMethodsEnhancePluginDefine { + @Override + protected String enhanceClassName() { + return "com.a.eye.skywalking.toolkit.opentracing.SkyWalkingSpanBuilder"; + } + + @Override + protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { + return new ConstructorInterceptPoint[]{ + new ConstructorInterceptPoint() { + @Override + public ElementMatcher getConstructorMatcher() { + return takesArguments(String.class); + } + + @Override + public String getConstructorInterceptor() { + return "com.a.eye.skywalking.toolkit.activation.opentracing.spanbuilder.interceptor.SpanBuilderNewInstanceInterceptor"; + } + } + }; + } + + @Override + protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() { + return new InstanceMethodsInterceptPoint[]{ + new InstanceMethodsInterceptPoint() { + @Override + public ElementMatcher getMethodsMatcher() { + return named("withTag"); + } + + @Override + public String getMethodsInterceptor() { + return "com.a.eye.skywalking.toolkit.activation.opentracing.spanbuilder.interceptor.SpanBuilderWithTagInterceptor"; + } + }, + new InstanceMethodsInterceptPoint() { + @Override + public ElementMatcher getMethodsMatcher() { + return named("withStartTimestamp"); + } + + @Override + public String getMethodsInterceptor() { + return "com.a.eye.skywalking.toolkit.activation.opentracing.spanbuilder.interceptor.SpanBuilderWithStartTimeInterceptor"; + } + }, + new InstanceMethodsInterceptPoint() { + @Override + public ElementMatcher getMethodsMatcher() { + return named("start"); + } + + @Override + public String getMethodsInterceptor() { + return "com.a.eye.skywalking.toolkit.activation.opentracing.spanbuilder.interceptor.SpanBuilderStartInterceptor"; + } + } + }; + } +} diff --git a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/spanbuilder/interceptor/SpanBuilderNewInstanceInterceptor.java b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/spanbuilder/interceptor/SpanBuilderNewInstanceInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..d11c70a74ede50535a0a82750ae7c3d22e9ed37e --- /dev/null +++ b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/spanbuilder/interceptor/SpanBuilderNewInstanceInterceptor.java @@ -0,0 +1,15 @@ +package com.a.eye.skywalking.toolkit.activation.opentracing.spanbuilder.interceptor; + +import com.a.eye.skywalking.plugin.interceptor.EnhancedClassInstanceContext; +import com.a.eye.skywalking.plugin.interceptor.enhance.ConstructorInvokeContext; +import com.a.eye.skywalking.plugin.interceptor.enhance.InstanceConstructorInterceptor; + +public class SpanBuilderNewInstanceInterceptor implements InstanceConstructorInterceptor { + + public static final String OPERATION_NAME = "operationName"; + + @Override + public void onConstruct(EnhancedClassInstanceContext context, ConstructorInvokeContext interceptorContext) { + context.set(OPERATION_NAME, interceptorContext.allArguments()[0]); + } +} diff --git a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/spanbuilder/interceptor/SpanBuilderStartInterceptor.java b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/spanbuilder/interceptor/SpanBuilderStartInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..93794ac3f0cea8bd8e9626fa9b005d43fb737b99 --- /dev/null +++ b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/spanbuilder/interceptor/SpanBuilderStartInterceptor.java @@ -0,0 +1,62 @@ +package com.a.eye.skywalking.toolkit.activation.opentracing.spanbuilder.interceptor; + +import com.a.eye.skywalking.invoke.monitor.LocalMethodInvokeMonitor; +import com.a.eye.skywalking.model.Identification; +import com.a.eye.skywalking.plugin.interceptor.EnhancedClassInstanceContext; +import com.a.eye.skywalking.plugin.interceptor.enhance.InstanceMethodInvokeContext; +import com.a.eye.skywalking.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; +import com.a.eye.skywalking.plugin.interceptor.enhance.MethodInterceptResult; +import com.a.eye.skywalking.toolkit.activation.opentracing.spanbuilder.OpenTracingLocalBuriedPointType; + +import java.util.Map; + +/** + * @author zhangxin + */ +public class SpanBuilderStartInterceptor implements InstanceMethodsAroundInterceptor { + + public static final String START_TIME = "startTimestamp"; + public static final String OPERATION_NAME = "operationName"; + public static final String TAGS = "tags"; + + @Override + public void beforeMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, MethodInterceptResult result) { + + Long startTime = fetchStartTime(context); + String operationName = (String) context.get(OPERATION_NAME); + Identification.IdentificationBuilder builder = Identification.newBuilder().viewPoint(operationName) + .spanType(OpenTracingLocalBuriedPointType.INSTANCE); + + if (startTime != null){ + builder.startTime(startTime); + } + + Map tags = (Map) context.get(TAGS); + if (tags != null) { + for (Map.Entry tag : tags.entrySet()) { + builder.tag(tag.getKey(), tag.getValue()); + } + } + + new LocalMethodInvokeMonitor().beforeInvoke(builder.build()); + } + + private Long fetchStartTime(EnhancedClassInstanceContext context) { + Object startTime = context.get(START_TIME); + if (startTime != null){ + return (Long) startTime; + } + + return null; + } + + @Override + public Object afterMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, Object ret) { + return ret; + } + + @Override + public void handleMethodException(Throwable t, EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext) { + + } +} diff --git a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/FormatCrossProcessContextInterceptor.java b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/spanbuilder/interceptor/SpanBuilderWithStartTimeInterceptor.java similarity index 69% rename from skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/FormatCrossProcessContextInterceptor.java rename to skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/spanbuilder/interceptor/SpanBuilderWithStartTimeInterceptor.java index c419f195a2ee4003a491fa234d71fa87079326d2..a932c25ba01fe98b6c2ba137f33cba31bccd61d9 100644 --- a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/FormatCrossProcessContextInterceptor.java +++ b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/spanbuilder/interceptor/SpanBuilderWithStartTimeInterceptor.java @@ -1,4 +1,4 @@ -package com.a.eye.skywalking.toolkit.activation.opentracing; +package com.a.eye.skywalking.toolkit.activation.opentracing.spanbuilder.interceptor; import com.a.eye.skywalking.plugin.interceptor.EnhancedClassInstanceContext; import com.a.eye.skywalking.plugin.interceptor.enhance.InstanceMethodInvokeContext; @@ -6,17 +6,20 @@ import com.a.eye.skywalking.plugin.interceptor.enhance.InstanceMethodsAroundInte import com.a.eye.skywalking.plugin.interceptor.enhance.MethodInterceptResult; /** - * Created by wusheng on 2017/1/3. + * Created by xin on 2017/1/16. */ -public class FormatCrossProcessContextInterceptor implements InstanceMethodsAroundInterceptor { +public class SpanBuilderWithStartTimeInterceptor implements InstanceMethodsAroundInterceptor { + + public static final String START_TIME = "startTimestamp"; + @Override public void beforeMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, MethodInterceptResult result) { - + context.set(START_TIME, interceptorContext.allArguments()[0]); } @Override public Object afterMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, Object ret) { - return null; + return ret; } @Override diff --git a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/spanbuilder/interceptor/SpanBuilderWithTagInterceptor.java b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/spanbuilder/interceptor/SpanBuilderWithTagInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..3a44e7d2f6cdaee6231c3d6bbbbe51c4b0a3de1d --- /dev/null +++ b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/spanbuilder/interceptor/SpanBuilderWithTagInterceptor.java @@ -0,0 +1,39 @@ +package com.a.eye.skywalking.toolkit.activation.opentracing.spanbuilder.interceptor; + +import com.a.eye.skywalking.plugin.interceptor.EnhancedClassInstanceContext; +import com.a.eye.skywalking.plugin.interceptor.enhance.InstanceMethodInvokeContext; +import com.a.eye.skywalking.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; +import com.a.eye.skywalking.plugin.interceptor.enhance.MethodInterceptResult; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by xin on 2017/1/16. + */ +public class SpanBuilderWithTagInterceptor implements InstanceMethodsAroundInterceptor { + + public static final String TAGS = "tags"; + + @Override + public void beforeMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, MethodInterceptResult result) { + Map contextTags = (Map) context.get(TAGS); + if (!context.isContain(TAGS)){ + contextTags = new HashMap(); + context.set(TAGS, contextTags); + } + + contextTags.put((String) interceptorContext.allArguments()[0], String.valueOf(interceptorContext + .allArguments()[1])); + } + + @Override + public Object afterMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, Object ret) { + return ret; + } + + @Override + public void handleMethodException(Throwable t, EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext) { + // Do nothing + } +} diff --git a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/SkyWalkingTracerActivation.java b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/tracer/SkyWalkingTracerActivation.java similarity index 88% rename from skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/SkyWalkingTracerActivation.java rename to skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/tracer/SkyWalkingTracerActivation.java index 61fabf9e5ef80f06bb287784f0c7e04d9c2bc611..1e026ea04c359d640f0e5c252542e7e44e15b270 100644 --- a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/SkyWalkingTracerActivation.java +++ b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/tracer/SkyWalkingTracerActivation.java @@ -1,4 +1,4 @@ -package com.a.eye.skywalking.toolkit.activation.opentracing; +package com.a.eye.skywalking.toolkit.activation.opentracing.tracer; import com.a.eye.skywalking.plugin.interceptor.ConstructorInterceptPoint; import com.a.eye.skywalking.plugin.interceptor.InstanceMethodsInterceptPoint; @@ -36,7 +36,7 @@ public class SkyWalkingTracerActivation extends ClassInstanceMethodsEnhancePlugi @Override public String getMethodsInterceptor() { - return "com.a.eye.skywalking.toolkit.activation.opentracing.FormatCrossProcessContextInterceptor"; + return "com.a.eye.skywalking.toolkit.activation.opentracing.tracer.interceptor.TracerFormatCrossProcessContextInterceptor"; } }, new InstanceMethodsInterceptPoint() { @Override @@ -46,7 +46,7 @@ public class SkyWalkingTracerActivation extends ClassInstanceMethodsEnhancePlugi @Override public String getMethodsInterceptor() { - return "com.a.eye.skywalking.toolkit.activation.opentracing.ExtractCrossProcessTextMapContextInterceptor"; + return "com.a.eye.skywalking.toolkit.activation.opentracing.tracer.interceptor.TracerExtractCrossProcessTextMapContextInterceptor"; } }, new InstanceMethodsInterceptPoint() { @Override @@ -56,7 +56,7 @@ public class SkyWalkingTracerActivation extends ClassInstanceMethodsEnhancePlugi @Override public String getMethodsInterceptor() { - return "com.a.eye.skywalking.toolkit.activation.opentracing.ExtractCrossProcessByteBufferContextInterceptor"; + return "com.a.eye.skywalking.toolkit.activation.opentracing.tracer.interceptor.TracerExtractCrossProcessByteBufferContextInterceptor"; } }}; } diff --git a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/tracer/interceptor/TracerExtractCrossProcessByteBufferContextInterceptor.java b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/tracer/interceptor/TracerExtractCrossProcessByteBufferContextInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..e6ea5aa441f1e88d2a9ea1959df77f2dbd5ca21d --- /dev/null +++ b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/tracer/interceptor/TracerExtractCrossProcessByteBufferContextInterceptor.java @@ -0,0 +1,35 @@ +package com.a.eye.skywalking.toolkit.activation.opentracing.tracer.interceptor; + +import com.a.eye.skywalking.api.Tracing; +import com.a.eye.skywalking.model.RefContext; +import com.a.eye.skywalking.plugin.interceptor.EnhancedClassInstanceContext; +import com.a.eye.skywalking.plugin.interceptor.enhance.InstanceMethodInvokeContext; +import com.a.eye.skywalking.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; +import com.a.eye.skywalking.plugin.interceptor.enhance.MethodInterceptResult; + +import java.nio.ByteBuffer; +import java.nio.charset.Charset; + +/** + * + * @author zhangxin + */ +public class TracerExtractCrossProcessByteBufferContextInterceptor implements InstanceMethodsAroundInterceptor { + @Override + public void beforeMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, MethodInterceptResult result) { + + } + + @Override + public Object afterMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, Object ret) { + ByteBuffer byteBuffer = (ByteBuffer) interceptorContext.allArguments()[0]; + String contextDataStr = new String(byteBuffer.array(), Charset.forName("UTF-8")); + Tracing.initRefContext(new RefContext(contextDataStr)); + return ret; + } + + @Override + public void handleMethodException(Throwable t, EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext) { + + } +} diff --git a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/tracer/interceptor/TracerExtractCrossProcessTextMapContextInterceptor.java b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/tracer/interceptor/TracerExtractCrossProcessTextMapContextInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..5ada55d394067d6878d177a9b00e2a9af7d2d308 --- /dev/null +++ b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/tracer/interceptor/TracerExtractCrossProcessTextMapContextInterceptor.java @@ -0,0 +1,50 @@ +package com.a.eye.skywalking.toolkit.activation.opentracing.tracer.interceptor; + +import com.a.eye.skywalking.api.Tracing; +import com.a.eye.skywalking.model.RefContext; +import com.a.eye.skywalking.plugin.interceptor.EnhancedClassInstanceContext; +import com.a.eye.skywalking.plugin.interceptor.enhance.InstanceMethodInvokeContext; +import com.a.eye.skywalking.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; +import com.a.eye.skywalking.plugin.interceptor.enhance.MethodInterceptResult; + +import java.util.Iterator; +import java.util.Map; + +import io.opentracing.propagation.TextMap; + +/** + * + * @author zhangxin + */ +public class TracerExtractCrossProcessTextMapContextInterceptor implements InstanceMethodsAroundInterceptor { + + + public static final String SKY_WALKING_TRACING_NAME = "SkyWalking-TRACING-NAME"; + + @Override + public void beforeMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, MethodInterceptResult result) { + // Do nothing + } + + @Override + public Object afterMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, Object ret) { + TextMap textMap = (TextMap) interceptorContext.allArguments()[0]; + Iterator> iterator = textMap.iterator(); + while (iterator.hasNext()){ + Map.Entry entry = iterator.next(); + if (SKY_WALKING_TRACING_NAME.equals(entry.getKey())){ + try { + Tracing.initRefContext(new RefContext(entry.getValue())); + }catch (Throwable e){ + // do something + } + } + } + return ret; + } + + @Override + public void handleMethodException(Throwable t, EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext) { + + } +} diff --git a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/tracer/interceptor/TracerFormatCrossProcessContextInterceptor.java b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/tracer/interceptor/TracerFormatCrossProcessContextInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..50b88b0d75fcc98d53f2cf8e271cb858b2a692bd --- /dev/null +++ b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/java/com/a/eye/skywalking/toolkit/activation/opentracing/tracer/interceptor/TracerFormatCrossProcessContextInterceptor.java @@ -0,0 +1,42 @@ +package com.a.eye.skywalking.toolkit.activation.opentracing.tracer.interceptor; + +import com.a.eye.skywalking.api.Tracing; +import com.a.eye.skywalking.model.ContextData; +import com.a.eye.skywalking.model.Span; +import com.a.eye.skywalking.plugin.interceptor.EnhancedClassInstanceContext; +import com.a.eye.skywalking.plugin.interceptor.enhance.InstanceMethodInvokeContext; +import com.a.eye.skywalking.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; +import com.a.eye.skywalking.plugin.interceptor.enhance.MethodInterceptResult; +import com.a.eye.skywalking.toolkit.opentracing.SkyWalkingTracer; + +/** + * @author zhangxin + */ +public class TracerFormatCrossProcessContextInterceptor implements InstanceMethodsAroundInterceptor { + @Override + public void beforeMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, MethodInterceptResult result) { + + } + + @Override + public Object afterMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, Object ret) { + Span span = Tracing.getCurrentSpan(); + if (span != null) { + return new ContextData(span.getTraceId(), generateSubParentLevelId(span), span.getRouteKey()).toString(); + } + return ret; + } + + @Override + public void handleMethodException(Throwable t, EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext) { + + } + + private String generateSubParentLevelId(Span spanData) { + if (spanData.getParentLevel() == null || spanData.getParentLevel().length() == 0) { + return spanData.getLevelId() + ""; + } + + return spanData.getParentLevel() + "." + spanData.getLevelId(); + } +} diff --git a/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/resources/skywalking-plugin.def b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/resources/skywalking-plugin.def new file mode 100644 index 0000000000000000000000000000000000000000..bad4288c74632061266c120daa960a25a6f1a9b2 --- /dev/null +++ b/skywalking-sniffer/skywalking-toolkit-activation/skywalking-toolkit-opentracing-activation/src/main/resources/skywalking-plugin.def @@ -0,0 +1,3 @@ +com.a.eye.skywalking.toolkit.activation.opentracing.span.SkyWalkingSpanActivation +com.a.eye.skywalking.toolkit.activation.opentracing.spanbuilder.SkyWalkingSpanBuilderActivation +com.a.eye.skywalking.toolkit.activation.opentracing.tracer.SkyWalkingTracerActivation \ No newline at end of file diff --git a/skywalking-storage-center/skywalking-routing/pom.xml b/skywalking-storage-center/skywalking-routing/pom.xml index 9f78ea08c232c42fce00d9104627b9a56cda4343..d752504a66c4d3a415a8a41218734b9c4cfa26c0 100644 --- a/skywalking-storage-center/skywalking-routing/pom.xml +++ b/skywalking-storage-center/skywalking-routing/pom.xml @@ -28,7 +28,7 @@ com.a.eye skywalking-util - ${project.parent.version} + ${project.version} diff --git a/skywalking-storage-center/skywalking-routing/src/main/java/com/a/eye/skywalking/routing/http/module/RequestSpanModule.java b/skywalking-storage-center/skywalking-routing/src/main/java/com/a/eye/skywalking/routing/http/module/RequestSpanModule.java index 19adfe4ec59d1689270cd2d9fe3f486c82eaca88..28e866b3a56000803ab8b29462ae2c35a14a9a3a 100644 --- a/skywalking-storage-center/skywalking-routing/src/main/java/com/a/eye/skywalking/routing/http/module/RequestSpanModule.java +++ b/skywalking-storage-center/skywalking-routing/src/main/java/com/a/eye/skywalking/routing/http/module/RequestSpanModule.java @@ -26,7 +26,7 @@ public class RequestSpanModule { return null; } return RequestSpan.newBuilder().putAllTags(tags).setLevelId(levelId).setParentLevel(parentLevelId) - .setRouteKey(routeKey).setStartDate(startTime).setTraceId(TraceIdUtil.toTraceId(traceId)).build(); + .setRouteKey(routeKey).setStartTimestamp(startTime).setTraceId(TraceIdUtil.toTraceId(traceId)).build(); } diff --git a/skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/data/spandata/RequestSpanData.java b/skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/data/spandata/RequestSpanData.java index 3e4b421b584c040089d14c5724ba480042735a44..cc779e65e82efc9f6fbe400ecc04b85fb101fc93 100644 --- a/skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/data/spandata/RequestSpanData.java +++ b/skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/data/spandata/RequestSpanData.java @@ -67,7 +67,7 @@ public class RequestSpanData extends AbstractSpanData { } public long getStartTime() { - return requestSpan.getStartDate(); + return requestSpan.getStartTimestamp(); } public String getBusinessKey() { diff --git a/skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/data/spandata/SpanDataHelper.java b/skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/data/spandata/SpanDataHelper.java index 7792f881f4ba933949dc452f6b91e4ac0b5c4b06..1685a268a184667273663250839e0180d6dee90b 100644 --- a/skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/data/spandata/SpanDataHelper.java +++ b/skywalking-storage-center/skywalking-storage/src/main/java/com/a/eye/skywalking/storage/data/spandata/SpanDataHelper.java @@ -51,7 +51,7 @@ public class SpanDataHelper { } builder = builder.setLevelId(requestSpanData.getLevelId()).setParentLevelId(requestSpanData.getParentLevelId()).setProcessNo(requestSpanData.getProcessNo()) - .setSpanType(requestSpanData.getType()).setSpanTypeDesc(requestSpanData.getSpanTypeDesc()).setStartTime(requestSpanData.getStartTime()) + .setSpanType(requestSpanData.getType()).setSpanTypeDesc(requestSpanData.getSpanTypeDesc()).setStartTimestamp(requestSpanData.getStartTime()) .setStatusCode(ackSpanData.getStatusCode()) .setViewpoint(requestSpanData.getViewPoint()) .setTraceId(TraceId.newBuilder().addAllSegments(Arrays.asList(requestSpanData.getTraceIdSegments()))); diff --git a/skywalking-storage-center/skywalking-storage/src/test/java/StorageThread.java b/skywalking-storage-center/skywalking-storage/src/test/java/StorageThread.java index 6778b0376babbb03df4e1e8615e9a65fd2ef79d2..2ba26f28710484f42028c66f74f8aa3da7a00d43 100644 --- a/skywalking-storage-center/skywalking-storage/src/test/java/StorageThread.java +++ b/skywalking-storage-center/skywalking-storage/src/test/java/StorageThread.java @@ -40,7 +40,7 @@ public class StorageThread extends Thread { .putTags(Tag.ADDRESS.toString(), NetUtils.getLocalAddress().toString()) .putTags(Tag.APPLICATION_CODE.toString(), "1") .putTags(Tag.CALL_TYPE.toString(), "1").setLevelId(0) - .putTags(Tag.PROCESS_NO.toString(), "19287").setStartDate(System.currentTimeMillis()) + .putTags(Tag.PROCESS_NO.toString(), "19287").setStartTimestamp(System.currentTimeMillis()) .setTraceId(TraceId.newBuilder().addSegments(201611).addSegments(value).addSegments(8504828).addSegments(2277).addSegments(53).addSegments(3).build()) .putTags(Tag.USER_NAME.toString(), "1").putTags(Tag.VIEW_POINT.toString(), "http://localhost:8080/wwww/test/helloWorld").setRouteKey(i).build(); diff --git a/skywalking-webui/pom.xml b/skywalking-webui/pom.xml index d8f7f99b555c41a2a6c2c0e26713cc8ea3022ab0..27421015c1fbcb9ba5c0ed81c1bad40b797a7579 100644 --- a/skywalking-webui/pom.xml +++ b/skywalking-webui/pom.xml @@ -20,22 +20,22 @@ com.a.eye skywalking-network - 2.1-2017 + ${project.version} com.a.eye skywalking-logging-api - ${project.parent.version} + ${project.version} com.a.eye skywalking-logging-impl-log4j2 - ${project.parent.version} + ${project.version} com.a.eye skywalking-registry - ${project.parent.version} + ${project.version} diff --git a/skywalking-webui/src/main/java/com/a/eye/skywalking/web/dto/FullSpan.java b/skywalking-webui/src/main/java/com/a/eye/skywalking/web/dto/FullSpan.java index 89a06e8e40b6897f1a5c5ff407e0efbf9a56dc95..54e06580b849e1feee9e38177f4672f638070afe 100644 --- a/skywalking-webui/src/main/java/com/a/eye/skywalking/web/dto/FullSpan.java +++ b/skywalking-webui/src/main/java/com/a/eye/skywalking/web/dto/FullSpan.java @@ -42,7 +42,7 @@ public class FullSpan { this.businessKey = span.getBusinessKey(); this.spanTypeDesc = span.getSpanTypeDesc(); this.username = span.getUsername(); - this.startDate = span.getStartTime(); + this.startDate = span.getStartTimestamp(); this.viewPointId = span.getViewpoint(); this.spanType = span.getSpanType() + ""; this.address = span.getAddress(); diff --git a/skywalking-webui/src/main/java/com/a/eye/skywalking/web/util/Constants.java b/skywalking-webui/src/main/java/com/a/eye/skywalking/web/util/Constants.java index bb67f9de328d22c9418d1f04e312be97b90b4517..5a0b9bc2298b449d5bb2c83ab284f9dce79ff870 100644 --- a/skywalking-webui/src/main/java/com/a/eye/skywalking/web/util/Constants.java +++ b/skywalking-webui/src/main/java/com/a/eye/skywalking/web/util/Constants.java @@ -27,6 +27,8 @@ public class Constants { put("D", "DUBBO"); put("L", "LOCAL"); put("U", "UNKNOWN"); + put("MO", "Motan"); + put("OT", "OpenTracing"); } };