From e09051770fcfc0284a17e78728ab2a85f1dbb949 Mon Sep 17 00:00:00 2001 From: wusheng Date: Tue, 20 Dec 2016 11:41:56 +0800 Subject: [PATCH 1/8] =?UTF-8?q?add=20=E2=80=98distributionManagement?= =?UTF-8?q?=E2=80=99=20to=20deploy=20application=20toolkit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../skywalking-toolkit-log4j-1.x/pom.xml | 7 +++++++ .../skywalking-toolkit-log4j-2.x/pom.xml | 10 +++++++++- .../skywalking-toolkit-logback-1.x/pom.xml | 9 +++++++++ .../skywalking-toolkit-trace-context/pom.xml | 9 ++++++++- 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/skywalking-application-toolkit/skywalking-toolkit-log4j-1.x/pom.xml b/skywalking-application-toolkit/skywalking-toolkit-log4j-1.x/pom.xml index 465b125a1c..aa9ff10ef3 100644 --- a/skywalking-application-toolkit/skywalking-toolkit-log4j-1.x/pom.xml +++ b/skywalking-application-toolkit/skywalking-toolkit-log4j-1.x/pom.xml @@ -20,4 +20,11 @@ + + + bintray-wu-sheng-sky-walking-repository + wu-sheng-sky-walking-repository + https://api.bintray.com/maven/wu-sheng/skywalking/com.a.eye.skywalking-toolkit-log4j-1.x/;publish=1 + + diff --git a/skywalking-application-toolkit/skywalking-toolkit-log4j-2.x/pom.xml b/skywalking-application-toolkit/skywalking-toolkit-log4j-2.x/pom.xml index d7d16ea957..111e507a5b 100644 --- a/skywalking-application-toolkit/skywalking-toolkit-log4j-2.x/pom.xml +++ b/skywalking-application-toolkit/skywalking-toolkit-log4j-2.x/pom.xml @@ -16,7 +16,15 @@ org.apache.logging.log4j log4j-core 2.7 - compile + provided + + + + bintray-wu-sheng-sky-walking-repository + wu-sheng-sky-walking-repository + https://api.bintray.com/maven/wu-sheng/skywalking/com.a.eye.skywalking-toolkit-log4j-2.x/;publish=1 + + diff --git a/skywalking-application-toolkit/skywalking-toolkit-logback-1.x/pom.xml b/skywalking-application-toolkit/skywalking-toolkit-logback-1.x/pom.xml index 3674226ba9..283a3ea62a 100644 --- a/skywalking-application-toolkit/skywalking-toolkit-logback-1.x/pom.xml +++ b/skywalking-application-toolkit/skywalking-toolkit-logback-1.x/pom.xml @@ -16,6 +16,15 @@ ch.qos.logback logback-classic 1.1.7 + provided + + + + bintray-wu-sheng-sky-walking-repository + wu-sheng-sky-walking-repository + https://api.bintray.com/maven/wu-sheng/skywalking/com.a.eye.skywalking-toolkit-logback-1.x/;publish=1 + + diff --git a/skywalking-application-toolkit/skywalking-toolkit-trace-context/pom.xml b/skywalking-application-toolkit/skywalking-toolkit-trace-context/pom.xml index 4c67f947d5..7cb964f9a0 100644 --- a/skywalking-application-toolkit/skywalking-toolkit-trace-context/pom.xml +++ b/skywalking-application-toolkit/skywalking-toolkit-trace-context/pom.xml @@ -11,6 +11,13 @@ skywalking-toolkit-trace-context jar - skywalking-toolkit-trace-context http://maven.apache.org + + + + bintray-wu-sheng-sky-walking-repository + wu-sheng-sky-walking-repository + https://api.bintray.com/maven/wu-sheng/skywalking/com.a.eye.skywalking-toolkit-trace-context/;publish=1 + + From 682d7938f5e5b6e2ef5d3e7a7035e34e395f2968 Mon Sep 17 00:00:00 2001 From: wusheng Date: Tue, 20 Dec 2016 15:28:23 +0800 Subject: [PATCH 2/8] add plugins to release sources --- pom.xml | 25 +++++++++++-------- .../skywalking-toolkit-log4j-1.x/pom.xml | 21 ++++++++++++++++ .../skywalking-toolkit-log4j-2.x/pom.xml | 21 ++++++++++++++++ .../skywalking-toolkit-logback-1.x/pom.xml | 21 ++++++++++++++++ .../skywalking-toolkit-trace-context/pom.xml | 20 +++++++++++++++ .../dependency-reduced-pom.xml | 2 +- 6 files changed, 99 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index 20273d5c08..1424bdebb0 100644 --- a/pom.xml +++ b/pom.xml @@ -80,17 +80,22 @@ true + + + org.apache.maven.plugins + maven-source-plugin + + + + attach-sources + + jar + + + + 2.4 + - - - - false - - DataCarrier - bintray - https://jcenter.bintray.com - - diff --git a/skywalking-application-toolkit/skywalking-toolkit-log4j-1.x/pom.xml b/skywalking-application-toolkit/skywalking-toolkit-log4j-1.x/pom.xml index aa9ff10ef3..4b787880c0 100644 --- a/skywalking-application-toolkit/skywalking-toolkit-log4j-1.x/pom.xml +++ b/skywalking-application-toolkit/skywalking-toolkit-log4j-1.x/pom.xml @@ -20,6 +20,27 @@ + + + + + + org.apache.maven.plugins + maven-source-plugin + + + + attach-sources + + jar + + + + 2.4 + + + + bintray-wu-sheng-sky-walking-repository diff --git a/skywalking-application-toolkit/skywalking-toolkit-log4j-2.x/pom.xml b/skywalking-application-toolkit/skywalking-toolkit-log4j-2.x/pom.xml index 111e507a5b..8cb6d2f34e 100644 --- a/skywalking-application-toolkit/skywalking-toolkit-log4j-2.x/pom.xml +++ b/skywalking-application-toolkit/skywalking-toolkit-log4j-2.x/pom.xml @@ -20,6 +20,27 @@ + + + + + + org.apache.maven.plugins + maven-source-plugin + + + + attach-sources + + jar + + + + 2.4 + + + + bintray-wu-sheng-sky-walking-repository diff --git a/skywalking-application-toolkit/skywalking-toolkit-logback-1.x/pom.xml b/skywalking-application-toolkit/skywalking-toolkit-logback-1.x/pom.xml index 283a3ea62a..0dd98155cb 100644 --- a/skywalking-application-toolkit/skywalking-toolkit-logback-1.x/pom.xml +++ b/skywalking-application-toolkit/skywalking-toolkit-logback-1.x/pom.xml @@ -20,6 +20,27 @@ + + + + + + org.apache.maven.plugins + maven-source-plugin + + + + attach-sources + + jar + + + + 2.4 + + + + bintray-wu-sheng-sky-walking-repository diff --git a/skywalking-application-toolkit/skywalking-toolkit-trace-context/pom.xml b/skywalking-application-toolkit/skywalking-toolkit-trace-context/pom.xml index 7cb964f9a0..3a55bd23d3 100644 --- a/skywalking-application-toolkit/skywalking-toolkit-trace-context/pom.xml +++ b/skywalking-application-toolkit/skywalking-toolkit-trace-context/pom.xml @@ -13,6 +13,26 @@ http://maven.apache.org + + + + + org.apache.maven.plugins + maven-source-plugin + + + + attach-sources + + jar + + + + 2.4 + + + + bintray-wu-sheng-sky-walking-repository diff --git a/skywalking-sniffer/skywalking-agent/dependency-reduced-pom.xml b/skywalking-sniffer/skywalking-agent/dependency-reduced-pom.xml index 6bae01f069..a597e2a393 100644 --- a/skywalking-sniffer/skywalking-agent/dependency-reduced-pom.xml +++ b/skywalking-sniffer/skywalking-agent/dependency-reduced-pom.xml @@ -3,7 +3,7 @@ skywalking-sniffer com.a.eye - 2.1-2017 + 2.0-2016 4.0.0 skywalking-agent From 268d5920f736cdfbc3aac07c72b8189be2536ad8 Mon Sep 17 00:00:00 2001 From: wusheng Date: Tue, 20 Dec 2016 15:49:33 +0800 Subject: [PATCH 3/8] add jcenter to repo --- pom.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pom.xml b/pom.xml index 1424bdebb0..cab2623156 100644 --- a/pom.xml +++ b/pom.xml @@ -98,4 +98,16 @@ + + + + false + + bintray + bintray + https://jcenter.bintray.com + + + + From 6ee99292a2700817b067296b6f981807bc4990d7 Mon Sep 17 00:00:00 2001 From: wusheng Date: Tue, 20 Dec 2016 17:35:07 +0800 Subject: [PATCH 4/8] add application toolkit to support opentracing --- skywalking-application-toolkit/pom.xml | 1 + .../skywalking-toolkit-opentracing/pom.xml | 26 +++++ .../toolkit/opentracing/SkyWalkingSpan.java | 104 ++++++++++++++++++ .../opentracing/SkyWalkingSpanBuilder.java | 72 ++++++++++++ .../toolkit/opentracing/SkyWalkingTracer.java | 27 +++++ 5 files changed, 230 insertions(+) create mode 100644 skywalking-application-toolkit/skywalking-toolkit-opentracing/pom.xml create mode 100644 skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingSpan.java create mode 100644 skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingSpanBuilder.java create mode 100644 skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingTracer.java diff --git a/skywalking-application-toolkit/pom.xml b/skywalking-application-toolkit/pom.xml index 19be7c443a..2fb8b4a9dd 100644 --- a/skywalking-application-toolkit/pom.xml +++ b/skywalking-application-toolkit/pom.xml @@ -18,5 +18,6 @@ skywalking-toolkit-log4j-2.x skywalking-toolkit-logback-1.x skywalking-toolkit-trace-context + skywalking-toolkit-opentracing diff --git a/skywalking-application-toolkit/skywalking-toolkit-opentracing/pom.xml b/skywalking-application-toolkit/skywalking-toolkit-opentracing/pom.xml new file mode 100644 index 0000000000..be3ccede11 --- /dev/null +++ b/skywalking-application-toolkit/skywalking-toolkit-opentracing/pom.xml @@ -0,0 +1,26 @@ + + + + skywalking-application-toolkit + com.a.eye + 2.1-2017 + + 4.0.0 + + skywalking-toolkit-opentracing + + + + io.opentracing + opentracing-api + 0.20.4 + + + io.opentracing + opentracing-noop + 0.20.4 + + + diff --git a/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingSpan.java b/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingSpan.java new file mode 100644 index 0000000000..7d5c72639f --- /dev/null +++ b/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingSpan.java @@ -0,0 +1,104 @@ +package com.a.eye.skywalking.toolkit.opentracing; + +import io.opentracing.Span; +import io.opentracing.SpanContext; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by wusheng on 2016/12/20. + */ +public class SkyWalkingSpan implements Span, SpanContext { + private final Map baggageItems; + + SkyWalkingSpan(){ + baggageItems = new HashMap(); + } + + @Override + public SpanContext context() { + return this; + } + + @Override + public void finish() { + + } + + @Override + public void finish(long finishMicros) { + + } + + @Override + public void close() { + + } + + @Override + public Span setTag(String key, String value) { + return this; + } + + @Override + public Span setTag(String key, boolean value) { + return this; + } + + @Override + public Span setTag(String key, Number value) { + return this; + } + + @Override + public Span log(Map fields) { + return this; + } + + @Override + public Span log(long timestampMicroseconds, Map fields) { + return this; + } + + @Override + public Span log(String event) { + return this; + } + + @Override + public Span log(long timestampMicroseconds, String event) { + return this; + } + + @Override + public Span setBaggageItem(String key, String value) { + baggageItems.put(key, value); + return this; + } + + @Override + public String getBaggageItem(String key) { + return baggageItems.get(key); + } + + @Override + public Span setOperationName(String operationName) { + return this; + } + + @Override + public Span log(String eventName, Object payload) { + return this; + } + + @Override + public Span log(long timestampMicroseconds, String eventName, Object payload) { + return this; + } + + @Override + public Iterable> baggageItems() { + return baggageItems.entrySet(); + } +} diff --git a/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingSpanBuilder.java b/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingSpanBuilder.java new file mode 100644 index 0000000000..f69b194012 --- /dev/null +++ b/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingSpanBuilder.java @@ -0,0 +1,72 @@ +package com.a.eye.skywalking.toolkit.opentracing; + +import io.opentracing.References; +import io.opentracing.Span; +import io.opentracing.SpanContext; +import io.opentracing.Tracer; + +import java.util.Map; + +/** + * All source code in SkyWalkingSpanBuilder acts like an NoopSpanBuilder. + * Actually, it is NOT. + * The whole logic will be added after toolkit-activation. + * + * Created by wusheng on 2016/12/20. + */ +public class SkyWalkingSpanBuilder implements Tracer.SpanBuilder { + private String operationName; + + SkyWalkingSpanBuilder(String operationName){ + this.operationName = operationName; + } + + @Override + public Tracer.SpanBuilder asChildOf(SpanContext spanContext) { + return null; + } + + @Override + public Tracer.SpanBuilder asChildOf(Span span) { + return null; + } + + @Override + public Tracer.SpanBuilder addReference(String referenceType, SpanContext referencedContext) { + if (referenceType.equals(References.CHILD_OF)) { + return asChildOf(referencedContext); + } else { + return this; + } + } + + @Override + public Tracer.SpanBuilder withTag(String key, String value) { + return this; + } + + @Override + public Tracer.SpanBuilder withTag(String key, boolean value) { + return this; + } + + @Override + public Tracer.SpanBuilder withTag(String key, Number value) { + return this; + } + + @Override + public Tracer.SpanBuilder withStartTimestamp(long microseconds) { + return this; + } + + @Override + public Span start() { + return new SkyWalkingSpan(); + } + + @Override + public Iterable> baggageItems() { + return null; + } +} diff --git a/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingTracer.java b/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingTracer.java new file mode 100644 index 0000000000..8b1aa7968e --- /dev/null +++ b/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingTracer.java @@ -0,0 +1,27 @@ +package com.a.eye.skywalking.toolkit.opentracing; + +import io.opentracing.SpanContext; +import io.opentracing.Tracer; +import io.opentracing.propagation.Format; + +/** + * Created by wusheng on 2016/12/20. + */ +public class SkyWalkingTracer implements Tracer{ + public static Tracer INSTANCE = new SkyWalkingTracer(); + + @Override + public SpanBuilder buildSpan(String operationName) { + return new SkyWalkingSpanBuilder(operationName); + } + + @Override + public void inject(SpanContext spanContext, Format format, C c) { + + } + + @Override + public SpanContext extract(Format format, C c) { + return null; + } +} From e5c562c4bb6eed969740eac85aad6b80691e8de4 Mon Sep 17 00:00:00 2001 From: wusheng Date: Tue, 20 Dec 2016 17:59:46 +0800 Subject: [PATCH 5/8] add some implements of OT. --- .../toolkit/opentracing/SkyWalkingSpan.java | 11 ++++- .../opentracing/SkyWalkingSpanBuilder.java | 44 ++++++++++++++++--- .../toolkit/opentracing/SkyWalkingTracer.java | 4 ++ 3 files changed, 53 insertions(+), 6 deletions(-) diff --git a/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingSpan.java b/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingSpan.java index 7d5c72639f..f4903c53b6 100644 --- a/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingSpan.java +++ b/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingSpan.java @@ -10,9 +10,18 @@ import java.util.Map; * Created by wusheng on 2016/12/20. */ public class SkyWalkingSpan implements Span, SpanContext { + private String operationName; + + private long startTime; + + private Map tags; + private final Map baggageItems; - SkyWalkingSpan(){ + SkyWalkingSpan(String operationName, long startTime, Map tags){ + this.operationName = operationName; + this.startTime = startTime; + this.tags = tags; baggageItems = new HashMap(); } diff --git a/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingSpanBuilder.java b/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingSpanBuilder.java index f69b194012..15cc19d218 100644 --- a/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingSpanBuilder.java +++ b/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingSpanBuilder.java @@ -5,6 +5,8 @@ import io.opentracing.Span; import io.opentracing.SpanContext; import io.opentracing.Tracer; +import java.util.Collections; +import java.util.HashMap; import java.util.Map; /** @@ -17,18 +19,38 @@ import java.util.Map; public class SkyWalkingSpanBuilder implements Tracer.SpanBuilder { private String operationName; + private long startTime = 0L; + + private final Map tags; + + private SpanContext parentContext; + SkyWalkingSpanBuilder(String operationName){ this.operationName = operationName; + this.tags = new HashMap(); } + /** + * In SkyWalkingTracer, SpanContext will not be used. Tracer will build reference by itself. + * + * @param spanContext + * @return + */ @Override public Tracer.SpanBuilder asChildOf(SpanContext spanContext) { - return null; + this.parentContext = spanContext; + return this; } + /** + * In SkyWalkingTracer, Parent Span will not be used. Tracer will build reference by itself. + * @param span + * @return + */ @Override public Tracer.SpanBuilder asChildOf(Span span) { - return null; + asChildOf(span.context()); + return this; } @Override @@ -42,31 +64,43 @@ public class SkyWalkingSpanBuilder implements Tracer.SpanBuilder { @Override public Tracer.SpanBuilder withTag(String key, String value) { + if (key != null && value != null) { + tags.put(key, value); + } return this; } @Override public Tracer.SpanBuilder withTag(String key, boolean value) { + if (key != null) { + tags.put(key, Boolean.toString(value)); + } return this; } @Override public Tracer.SpanBuilder withTag(String key, Number value) { + if (key != null && value != null) { + tags.put(key, value.toString()); + } return this; } @Override - public Tracer.SpanBuilder withStartTimestamp(long microseconds) { + public Tracer.SpanBuilder withStartTimestamp(long startTime) { + this.startTime = startTime; return this; } @Override public Span start() { - return new SkyWalkingSpan(); + return new SkyWalkingSpan(this.operationName, this.startTime, this.tags); } @Override public Iterable> baggageItems() { - return null; + return parentContext == null + ? Collections.emptyMap().entrySet() + : parentContext.baggageItems(); } } diff --git a/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingTracer.java b/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingTracer.java index 8b1aa7968e..4f91b3a1de 100644 --- a/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingTracer.java +++ b/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingTracer.java @@ -5,6 +5,10 @@ import io.opentracing.Tracer; import io.opentracing.propagation.Format; /** + * All source code in SkyWalkingTracer acts like an NoopTracer. + * Actually, it is NOT. + * The whole logic will be added after toolkit-activation. + * * Created by wusheng on 2016/12/20. */ public class SkyWalkingTracer implements Tracer{ From 96519491db7f116238707b56e212dc36ec9cd096 Mon Sep 17 00:00:00 2001 From: wusheng Date: Wed, 21 Dec 2016 10:59:18 +0800 Subject: [PATCH 6/8] Implement necessary interfaces and methods of OT. --- .../opentracing/ByteBufferContext.java | 29 ++++++++ .../toolkit/opentracing/SkyWalkingTracer.java | 67 +++++++++++++++++-- .../toolkit/opentracing/TextMapContext.java | 23 +++++++ .../opentracing/SkyWalkingTracerTest.java | 39 +++++++++++ 4 files changed, 152 insertions(+), 6 deletions(-) create mode 100644 skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/ByteBufferContext.java create mode 100644 skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/TextMapContext.java create mode 100644 skywalking-application-toolkit/skywalking-toolkit-opentracing/src/test/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingTracerTest.java diff --git a/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/ByteBufferContext.java b/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/ByteBufferContext.java new file mode 100644 index 0000000000..f919e3fd12 --- /dev/null +++ b/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/ByteBufferContext.java @@ -0,0 +1,29 @@ +package com.a.eye.skywalking.toolkit.opentracing; + +import io.opentracing.SpanContext; + +import java.nio.ByteBuffer; +import java.nio.charset.Charset; +import java.util.HashMap; +import java.util.Map; + +/** + * Created by wusheng on 2016/12/21. + */ +public class ByteBufferContext implements SpanContext { + static final Charset CHARSET = Charset.forName("UTF-8"); + + static final byte NO_ENTRY = 0; + static final byte ENTRY = 1; + + private final ByteBuffer byteBuffer; + + ByteBufferContext(ByteBuffer byteBuffer) { + this.byteBuffer = byteBuffer; + } + + @Override + public Iterable> baggageItems() { + return new HashMap().entrySet(); + } +} diff --git a/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingTracer.java b/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingTracer.java index 4f91b3a1de..eb3f851beb 100644 --- a/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingTracer.java +++ b/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingTracer.java @@ -3,15 +3,20 @@ package com.a.eye.skywalking.toolkit.opentracing; import io.opentracing.SpanContext; import io.opentracing.Tracer; import io.opentracing.propagation.Format; +import io.opentracing.propagation.TextMap; + +import java.nio.ByteBuffer; /** * All source code in SkyWalkingTracer acts like an NoopTracer. * Actually, it is NOT. * The whole logic will be added after toolkit-activation. - * + *

* Created by wusheng on 2016/12/20. */ -public class SkyWalkingTracer implements Tracer{ +public class SkyWalkingTracer implements Tracer { + private static String TRACE_HEAD_NAME = "SkyWalking-TRACING-NAME"; + public static Tracer INSTANCE = new SkyWalkingTracer(); @Override @@ -20,12 +25,62 @@ public class SkyWalkingTracer implements Tracer{ } @Override - public void inject(SpanContext spanContext, Format format, C c) { - + public void inject(SpanContext spanContext, Format format, C carrier) { + if (Format.Builtin.TEXT_MAP.equals(format) || Format.Builtin.HTTP_HEADERS.equals(format)) { + ((TextMap) carrier).put(TRACE_HEAD_NAME, formatCrossProcessPropagationContextData()); + } else if (Format.Builtin.BINARY.equals(format)) { + byte[] key = TRACE_HEAD_NAME.getBytes(ByteBufferContext.CHARSET); + byte[] value = formatCrossProcessPropagationContextData().getBytes(ByteBufferContext.CHARSET); + ((ByteBuffer) carrier).put(ByteBufferContext.ENTRY); + ((ByteBuffer) carrier).putInt(key.length); + ((ByteBuffer) carrier).putInt(value.length); + ((ByteBuffer) carrier).put(key); + ((ByteBuffer) carrier).put(value); + } else { + throw new IllegalArgumentException("Unsupported format: " + format); + } } @Override - public SpanContext extract(Format format, C c) { - return null; + public SpanContext extract(Format format, C carrier) { + if (Format.Builtin.TEXT_MAP.equals(format) || Format.Builtin.HTTP_HEADERS.equals(format)) { + TextMap textMapCarrier = (TextMap) carrier; + extractCrossProcessPropagationContextData(textMapCarrier); + return new TextMapContext(textMapCarrier); + } else if (Format.Builtin.BINARY.equals(format)) { + ByteBuffer byteBufferCarrier = (ByteBuffer)carrier; + extractCrossProcessPropagationContextData(byteBufferCarrier); + return new ByteBufferContext((ByteBuffer)carrier); + } else { + throw new IllegalArgumentException("Unsupported format: " + format); + } + } + + + /** + * set context data in toolkit-opentracing-activation + * + * @return + */ + private String formatCrossProcessPropagationContextData() { + return ""; + } + + /** + * read context data in toolkit-opentracing-activation + * + * @param textMapCarrier + */ + private void extractCrossProcessPropagationContextData(TextMap textMapCarrier) { + + } + + /** + * read context data in toolkit-opentracing-activation + * + * @param byteBufferCarrier + */ + private void extractCrossProcessPropagationContextData(ByteBuffer byteBufferCarrier) { + } } diff --git a/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/TextMapContext.java b/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/TextMapContext.java new file mode 100644 index 0000000000..66d1f443ba --- /dev/null +++ b/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/java/com/a/eye/skywalking/toolkit/opentracing/TextMapContext.java @@ -0,0 +1,23 @@ +package com.a.eye.skywalking.toolkit.opentracing; + +import io.opentracing.SpanContext; +import io.opentracing.propagation.TextMap; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by wusheng on 2016/12/21. + */ +public class TextMapContext implements SpanContext { + private final TextMap textMap; + + TextMapContext(TextMap textMap) { + this.textMap = textMap; + } + + @Override + public Iterable> baggageItems() { + return new HashMap().entrySet(); + } +} diff --git a/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/test/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingTracerTest.java b/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/test/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingTracerTest.java new file mode 100644 index 0000000000..159e905aac --- /dev/null +++ b/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/test/java/com/a/eye/skywalking/toolkit/opentracing/SkyWalkingTracerTest.java @@ -0,0 +1,39 @@ +package com.a.eye.skywalking.toolkit.opentracing; + +import io.opentracing.Span; +import io.opentracing.SpanContext; +import io.opentracing.Tracer; +import io.opentracing.propagation.TextMap; +import org.junit.Test; + +import java.util.Iterator; +import java.util.Map; + +/** + * Created by wusheng on 2016/12/21. + */ +public class SkyWalkingTracerTest { + @Test + public void testBuildSpan(){ + Tracer tracer = SkyWalkingTracer.INSTANCE; + Tracer.SpanBuilder spanBuilder = tracer.buildSpan("/http/serviceName"); + + SpanContext context = new TextMapContext(new TextMap() { + + @Override + public Iterator> iterator() { + throw new UnsupportedOperationException( + "TextMapInjectAdapter should only be used with Tracer.inject()"); + } + + @Override + public void put(String key, String value) { + + } + }); + spanBuilder.asChildOf(context).withTag("example.tag", "testtag"); + Span span = spanBuilder.start(); + + span.finish(); + } +} From eb3afeed09471734a0f81ef60582332d10ea66a0 Mon Sep 17 00:00:00 2001 From: wusheng Date: Wed, 21 Dec 2016 14:35:43 +0800 Subject: [PATCH 7/8] add a spi file to support tracer loader --- .../src/main/resources/META-INF.services/io.opentracing.Tracer | 1 + 1 file changed, 1 insertion(+) create mode 100644 skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/resources/META-INF.services/io.opentracing.Tracer diff --git a/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/resources/META-INF.services/io.opentracing.Tracer b/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/resources/META-INF.services/io.opentracing.Tracer new file mode 100644 index 0000000000..728fcb10e7 --- /dev/null +++ b/skywalking-application-toolkit/skywalking-toolkit-opentracing/src/main/resources/META-INF.services/io.opentracing.Tracer @@ -0,0 +1 @@ +com.a.eye.skywalking.toolkit.opentracing.SkyWalkingTracer From 07308fe566b39044d20c835438164de89a221de7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=99=9F=20Wu=20Sheng?= Date: Fri, 23 Dec 2016 15:43:32 +0800 Subject: [PATCH 8/8] Update README.md Add a new a characteristic --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b21ce80a7d..9fb23ff76f 100644 --- a/README.md +++ b/README.md @@ -17,9 +17,10 @@ SkyWalking: Large-Scale Distributed Systems Tracing Infrastructure, also known D # Abstract * An open source Large-Scale Distributed Systems Tracing Infrastructure, also known a ditributed tracer. * Based on [Google Dapper Paper: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](http://research.google.com/pubs/pub36356.html), [read Simplified Chinese Version](http://duanple.blog.163.com/blog/static/70971767201329113141336/) -* Support popular rpc frameworks, such as [dubbo](https://github.com/alibaba/dubbo), [dubbox](https://github.com/dangdangdotcom/dubbox), [motan](https://github.com/weibocom/motan) etc., trigger email-alert when application occurs unexpected exception。 +* Support popular rpc frameworks, such as [dubbo](https://github.com/alibaba/dubbo), [dubbox](https://github.com/dangdangdotcom/dubbox), [motan](https://github.com/weibocom/motan) etc., trigger email-alert when application occurs unexpected exception. +* Auto-instrumentation mechenism, **no need to CHANGE any application source code**. * Easy to deploy, **even in product mode** (since 2.0) . No need of Hadoop, HBase, or Cassandra Cluster. -* Pure Java server implements. provide gRPC (since 2.0) and HTTP (since 2.1) cross-platform spans collecting service. +* Pure Java server implementation. provide gRPC (since 2.0) and HTTP (since 2.1) cross-platform spans collecting service. # Supported components