From fde3c60a1ab34d830776c005a261a6e3a3c906fa Mon Sep 17 00:00:00 2001 From: wusheng Date: Sat, 18 Feb 2017 21:47:49 +0800 Subject: [PATCH] =?UTF-8?q?Add=20get=20method=20to=20all=20=E2=80=98Tag?= =?UTF-8?q?=E2=80=99=20classes.=20Begin=20to=20add=20test=20case.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/a/eye/skywalking/trace/Span.java | 10 +++ .../a/eye/skywalking/trace/TraceSegment.java | 21 +++++++ .../eye/skywalking/trace/TraceSegmentRef.java | 3 +- .../eye/skywalking/trace/tag/AbstractTag.java | 4 +- .../eye/skywalking/trace/tag/BooleanTag.java | 4 ++ .../a/eye/skywalking/trace/tag/IntTag.java | 23 +++++++ .../a/eye/skywalking/trace/tag/ShortTag.java | 4 ++ .../a/eye/skywalking/trace/tag/StringTag.java | 4 ++ .../com/a/eye/skywalking/trace/tag/Tags.java | 27 +++++++- .../trace/TraceSegmentTestCase.java | 63 +++++++++++++++++++ .../com/a/eye/skywalking/conf/Config.java | 13 ---- .../skywalking/context/ContextManager.java | 19 ++++++ .../queue/TraceSegmentProcessQueue.java | 4 ++ 13 files changed, 183 insertions(+), 16 deletions(-) create mode 100644 skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/IntTag.java create mode 100644 skywalking-commons/skywalking-trace/src/test/java/com/a/eye/skywalking/trace/TraceSegmentTestCase.java diff --git a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/Span.java b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/Span.java index f219b577b..35018c9fb 100644 --- a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/Span.java +++ b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/Span.java @@ -140,6 +140,16 @@ public class Span { return Collections.unmodifiableMap(tags); } + /** + * Get tag value of the given key. + * + * @param key the given tag key. + * @return tag value. + */ + public Object getTag(String key){ + return tags.get(key); + } + /** * This method is from opentracing-java. * {@see https://github.com/opentracing/opentracing-java/blob/release-0.20.9/opentracing-api/src/main/java/io/opentracing/Span.java#L91} diff --git a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegment.java b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegment.java index 7e0af65ad..1abf1d840 100644 --- a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegment.java +++ b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegment.java @@ -1,5 +1,6 @@ package com.a.eye.skywalking.trace; +import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -100,4 +101,24 @@ public class TraceSegment { public String getTraceSegmentId() { return traceSegmentId; } + + public long getStartTime() { + return startTime; + } + + public long getEndTime() { + return endTime; + } + + public TraceSegmentRef getPrimaryRef() { + return primaryRef; + } + + public List getRefs() { + return Collections.unmodifiableList(refs); + } + + public List getSpans() { + return Collections.unmodifiableList(spans); + } } diff --git a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegmentRef.java b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegmentRef.java index bfe0d50e9..29abf0e41 100644 --- a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegmentRef.java +++ b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegmentRef.java @@ -1,7 +1,8 @@ package com.a.eye.skywalking.trace; /** - * {@link TraceSegmentRef} is like a pointer, which ref to another {@link TraceSegment}. + * {@link TraceSegmentRef} is like a pointer, which ref to another {@link TraceSegment}, + * use {@link #spanId} point to the exact span of the ref {@link TraceSegment}. * * Created by wusheng on 2017/2/17. */ diff --git a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/AbstractTag.java b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/AbstractTag.java index 56f18b9b3..428cd760f 100644 --- a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/AbstractTag.java +++ b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/AbstractTag.java @@ -8,7 +8,7 @@ import com.a.eye.skywalking.trace.Span; * which provide an easy way to * {@link Span#setTag(String, String)} , * {@link Span#setTag(String, Number)} , - * {@link Span#setTag(String, boolean)} + * {@link Span#setTag(String, boolean)} , * * Created by wusheng on 2017/2/17. */ @@ -27,4 +27,6 @@ public abstract class AbstractTag { } protected abstract void set(Span span, T tagValue); + + public abstract T get(Span span); } diff --git a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/BooleanTag.java b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/BooleanTag.java index 9fb3be239..6a6cd106b 100644 --- a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/BooleanTag.java +++ b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/BooleanTag.java @@ -16,4 +16,8 @@ public class BooleanTag extends AbstractTag{ public void set(Span span, Boolean tagValue) { span.setTag(key, tagValue); } + + @Override public Boolean get(Span span) { + return (Boolean)span.getTag(super.key); + } } diff --git a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/IntTag.java b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/IntTag.java new file mode 100644 index 000000000..758374ada --- /dev/null +++ b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/IntTag.java @@ -0,0 +1,23 @@ +package com.a.eye.skywalking.trace.tag; + +import com.a.eye.skywalking.trace.Span; + +/** + * Do the same thing as {@link StringTag}, just with a {@link Integer} value. + * + * Created by wusheng on 2017/2/18. + */ +public class IntTag extends AbstractTag { + public IntTag(String key) { + super(key); + } + + @Override + public void set(Span span, Integer tagValue) { + span.setTag(super.key, tagValue); + } + + @Override public Integer get(Span span) { + return (Integer)span.getTag(super.key); + } +} diff --git a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/ShortTag.java b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/ShortTag.java index 563ba4921..ce81ea060 100644 --- a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/ShortTag.java +++ b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/ShortTag.java @@ -16,4 +16,8 @@ public class ShortTag extends AbstractTag { public void set(Span span, Short tagValue) { span.setTag(super.key, tagValue); } + + @Override public Short get(Span span) { + return (Short)span.getTag(super.key); + } } diff --git a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/StringTag.java b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/StringTag.java index 472527bc3..62004a7f0 100644 --- a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/StringTag.java +++ b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/StringTag.java @@ -17,4 +17,8 @@ public class StringTag extends AbstractTag { protected void set(Span span, String tagValue) { span.setTag(key, tagValue); } + + @Override public String get(Span span) { + return (String)span.getTag(super.key); + } } diff --git a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/Tags.java b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/Tags.java index f663bd44d..a0171e9f2 100644 --- a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/Tags.java +++ b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/tag/Tags.java @@ -10,11 +10,21 @@ public final class Tags { private Tags() { } + /** + * HTTP_URL records the url of the incoming request. + */ + public static final StringTag HTTP_URL = new StringTag("http.url"); + + /** + * HTTP_STATUS records the http status code of the response. + */ + public static final IntTag HTTP_STATUS = new IntTag("http.status_code"); + /** * SPAN_KIND hints at the relationship between spans. * e.g. cl = client; se = server. */ - public static StringTag SPAN_KIND = new StringTag("span.kind"); + public static final StringTag SPAN_KIND = new StringTag("span.kind"); /** * COMPONENT is a low-cardinality identifier of the module, library, or package that is instrumented. @@ -26,4 +36,19 @@ public final class Tags { * ERROR indicates whether a Span ended in an error state. */ public static final BooleanTag ERROR = new BooleanTag("error"); + + /** + * PEER_HOST_IPV4 records IPv4 host address of the peer. + */ + public static final IntTag PEER_HOST_IPV4 = new IntTag("peer.ipv4"); + + /** + * DB_URL records the url of the database access. + */ + public static final StringTag DB_URL = new StringTag("db.url"); + + /** + * DB_SQL records the sql of the database access. + */ + public static final StringTag DB_SQL = new StringTag("db.sql"); } diff --git a/skywalking-commons/skywalking-trace/src/test/java/com/a/eye/skywalking/trace/TraceSegmentTestCase.java b/skywalking-commons/skywalking-trace/src/test/java/com/a/eye/skywalking/trace/TraceSegmentTestCase.java new file mode 100644 index 000000000..e6b253de0 --- /dev/null +++ b/skywalking-commons/skywalking-trace/src/test/java/com/a/eye/skywalking/trace/TraceSegmentTestCase.java @@ -0,0 +1,63 @@ +package com.a.eye.skywalking.trace; + +import org.junit.Assert; +import org.junit.Test; + +/** + * Created by wusheng on 2017/2/18. + */ +public class TraceSegmentTestCase { + @Test + public void testConstructor(){ + TraceSegment segment = new TraceSegment("trace_1"); + + Assert.assertEquals("trace_1", segment.getTraceSegmentId()); + Assert.assertTrue(segment.getStartTime() > 0); + } + + @Test + public void testRef(){ + TraceSegment segment = new TraceSegment("trace_3"); + + TraceSegmentRef ref1 = new TraceSegmentRef(); + ref1.setTraceSegmentId("parent_trace_0"); + ref1.setSpanId(1); + segment.ref(ref1); + + TraceSegmentRef ref2 = new TraceSegmentRef(); + ref2.setTraceSegmentId("parent_trace_1"); + ref2.setSpanId(5); + segment.ref(ref2); + + TraceSegmentRef ref3 = new TraceSegmentRef(); + ref3.setTraceSegmentId("parent_trace_1"); + ref3.setSpanId(5); + segment.ref(ref3); + + Assert.assertEquals(ref1, segment.getPrimaryRef()); + Assert.assertEquals(ref2, segment.getRefs().get(0)); + Assert.assertEquals(ref3, segment.getRefs().get(1)); + } + + @Test + public void testArchiveSpan(){ + TraceSegment segment = new TraceSegment("trace_1"); + Span span1 = new Span(1, "/serviceA"); + segment.archive(span1); + + Span span2 = new Span(2, "/db/sql"); + segment.archive(span2); + + Assert.assertEquals(span1, segment.getSpans().get(0)); + Assert.assertEquals(span2, segment.getSpans().get(1)); + } + + @Test + public void testFinish(){ + TraceSegment segment = new TraceSegment("trace_1"); + + Assert.assertTrue(segment.getEndTime() == 0); + segment.finish(); + Assert.assertTrue(segment.getEndTime() > 0); + } +} diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/conf/Config.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/conf/Config.java index e02b1b9f6..85032931d 100644 --- a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/conf/Config.java +++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/conf/Config.java @@ -19,19 +19,6 @@ public class Config { public static int BUFFER_SIZE = 1024 * 4; } - public static class BuriedPoint { - // 是否打印埋点信息 - public static boolean PRINTF = false; - - public static int MAX_EXCEPTION_STACK_LENGTH = 4000; - - // Business Key 最大长度 - public static int BUSINESSKEY_MAX_LENGTH = 300; - - // 使用逗号分离 - public static String EXCLUSIVE_EXCEPTIONS = ""; - } - public static class Logging { // log文件名 diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/context/ContextManager.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/context/ContextManager.java index b4b4dd4da..9c6e8f054 100644 --- a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/context/ContextManager.java +++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/context/ContextManager.java @@ -1,6 +1,7 @@ package com.a.eye.skywalking.context; import com.a.eye.skywalking.queue.TraceSegmentProcessQueue; +import com.a.eye.skywalking.trace.Span; import com.a.eye.skywalking.trace.TraceSegment; /** @@ -10,6 +11,8 @@ import com.a.eye.skywalking.trace.TraceSegment; * * What is 'ChildOf'? {@see https://github.com/opentracing/specification/blob/master/specification.md#references-between-spans} * + * Also, {@link ContextManager} delegates to all {@link TracerContext}'s major methods: {@link + * TracerContext#createSpan(String)}, {@link TracerContext#activeSpan()}, {@link TracerContext#stopSpan(Span)} * * Created by wusheng on 2017/2/17. */ @@ -35,4 +38,20 @@ public enum ContextManager implements TracerContextListener { } return segment; } + + public Span createSpan(String operationName) { + return get().createSpan(operationName); + } + + public Span activeSpan() { + return get().activeSpan(); + } + + public void stopSpan(Span span) { + get().stopSpan(span); + } + + public void stopSpan() { + stopSpan(activeSpan()); + } } diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/queue/TraceSegmentProcessQueue.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/queue/TraceSegmentProcessQueue.java index 92d7d8612..edff9c6b0 100644 --- a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/queue/TraceSegmentProcessQueue.java +++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/queue/TraceSegmentProcessQueue.java @@ -11,6 +11,10 @@ import com.lmax.disruptor.dsl.Disruptor; import com.lmax.disruptor.util.DaemonThreadFactory; /** + * {@link TraceSegmentProcessQueue} is a proxy of {@link Disruptor}, High Performance Inter-Thread MQ. + * + * {@see https://github.com/LMAX-Exchange/disruptor} + * * Created by wusheng on 2017/2/17. */ public enum TraceSegmentProcessQueue implements TracerContextListener {