diff --git a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/LogData.java b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/LogData.java index 250bc2516badaf13b9901d5d2031486b94dcb1b7..576aa680c0740c0f65e09677f9af1dde9b39a418 100644 --- a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/LogData.java +++ b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/LogData.java @@ -1,5 +1,6 @@ package com.a.eye.skywalking.trace; +import java.util.Collections; import java.util.Map; /** @@ -21,6 +22,6 @@ public class LogData { } public Map getFields() { - return fields; + return Collections.unmodifiableMap(fields); } } 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 5261d59ffee646b48069ab422bfad8b596a3154a..e447142200c0d810602acf7ff56edf9a2e453894 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 @@ -12,19 +12,8 @@ import java.util.Map; * Span is a concept from OpenTracing Spec, also from Google Dapper Paper. * Traces in OpenTracing are defined implicitly by their Spans. * - * [Span A] ←←←(the root span) - * | - * +------+------+ - * | | - * [Span B] [Span C] ←←←(Span C is a `ChildOf` Span A) - * | | - * [Span D] +---+-------+ - * | | - * [Span E] [Span F] >>> [Span G] >>> [Span H] - * ↑ - * ↑ - * ↑ - * (Span G `FollowsFrom` Span F) + * Know more things about span concept: + * {@see https://github.com/opentracing/specification/blob/master/specification.md#the-opentracing-data-model} * * Created by wusheng on 2017/2/17. */ @@ -192,9 +181,7 @@ public class Span { exceptionFields.put("message", t.getMessage()); exceptionFields.put("stack", ThrowableTransformer.INSTANCE.convert2String(t, 4000)); - logs.add(new LogData(System.currentTimeMillis(), exceptionFields)); - - return this; + return log(exceptionFields); } private enum ThrowableTransformer { 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 94d33874e9cb87c3eb44e56a6907716933c2f8ee..d0881dc1b4e97121f24e261dfe8b6e94c9d8eb16 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 @@ -29,20 +29,45 @@ public final class Tags { public static final class SPAN_KIND{ private static StringTag SPAN_KIND_TAG = new StringTag("span.kind"); + private static final String DB_KIND = "db"; + private static final String RPC_KIND = "rpc"; + private static final String NOSQL_KIND = "nosql"; + private static final String HTTP_KIND = "http"; + public static void asDBAccess(Span span){ - SPAN_KIND_TAG.set(span, "db"); + SPAN_KIND_TAG.set(span, DB_KIND); } public static void asRPC(Span span){ - SPAN_KIND_TAG.set(span, "rpc"); + SPAN_KIND_TAG.set(span, RPC_KIND); } public static void asNoSQL(Span span){ - SPAN_KIND_TAG.set(span, "nosql"); + SPAN_KIND_TAG.set(span, NOSQL_KIND); } public static void asHttp(Span span){ - SPAN_KIND_TAG.set(span, "http"); + SPAN_KIND_TAG.set(span, HTTP_KIND); + } + + public static String get(Span span){ + return SPAN_KIND_TAG.get(span); + } + + public static boolean isDBAccess(Span span){ + return DB_KIND.equals(get(span)); + } + + public static boolean isRPC(Span span){ + return RPC_KIND.equals(get(span)); + } + + public static boolean isNoSQL(Span span){ + return NOSQL_KIND.equals(get(span)); + } + + public static boolean isHttp(Span span){ + return HTTP_KIND.equals(get(span)); } } diff --git a/skywalking-commons/skywalking-trace/src/test/java/com/a/eye/skywalking/trace/SpanTestCase.java b/skywalking-commons/skywalking-trace/src/test/java/com/a/eye/skywalking/trace/SpanTestCase.java index d57cf2d22296c00bcfffc568882057c223b62e04..f26b22f232ddc4759570849c1ac7c3d4b5f2833e 100644 --- a/skywalking-commons/skywalking-trace/src/test/java/com/a/eye/skywalking/trace/SpanTestCase.java +++ b/skywalking-commons/skywalking-trace/src/test/java/com/a/eye/skywalking/trace/SpanTestCase.java @@ -2,6 +2,7 @@ package com.a.eye.skywalking.trace; import com.a.eye.skywalking.trace.tag.Tags; import java.util.Collections; +import java.util.List; import java.util.Map; import org.junit.Assert; import org.junit.Test; @@ -37,7 +38,7 @@ public class SpanTestCase { @Test public void testSetTag() { Span span1 = new Span(0, "serviceA"); - Tags.SPAN_KIND.set(span1, "client"); + Tags.SPAN_KIND.asHttp(span1); Tags.COMPONENT.set(span1, "Spring"); Tags.PEER_HOST_IPV4.set(span1, ipToInt("127.0.0.1")); Tags.ERROR.set(span1, true); @@ -48,7 +49,7 @@ public class SpanTestCase { Map tags = span1.getTags(); Assert.assertEquals(8, tags.size()); - Assert.assertEquals("client", Tags.SPAN_KIND.get(span1)); + Assert.assertTrue(Tags.SPAN_KIND.isHttp(span1)); Assert.assertEquals("127.0.0.1", intToIp(Tags.PEER_HOST_IPV4.get(span1))); Assert.assertTrue(Tags.ERROR.get(span1)); } @@ -82,4 +83,16 @@ public class SpanTestCase { sb.append(String.valueOf((longIp & 0x000000FF))); return sb.toString(); } + + @Test + public void testLogException(){ + Span span1 = new Span(0, "serviceA"); + Exception exp = new Exception("exception msg"); + span1.log(exp); + List logs = span1.getLogs(); + + Assert.assertEquals("java.lang.Exception", logs.get(0).getFields().get("error.kind")); + Assert.assertEquals("exception msg", logs.get(0).getFields().get("message")); + Assert.assertNotNull(logs.get(0).getFields().get("stack")); + } }