diff --git a/apm-collector/apm-collector-worker/src/test/java/org/skywalking/apm/collector/worker/span/persistence/SpanSearchWithIdTestCase.java b/apm-collector/apm-collector-worker/src/test/java/org/skywalking/apm/collector/worker/span/persistence/SpanSearchWithIdTestCase.java
index f6969cf53feb9e84264714ca4dede4c6a653cbb4..90bbf94e6a87b85f9dbc7718c88ef6bc4fa68826 100644
--- a/apm-collector/apm-collector-worker/src/test/java/org/skywalking/apm/collector/worker/span/persistence/SpanSearchWithIdTestCase.java
+++ b/apm-collector/apm-collector-worker/src/test/java/org/skywalking/apm/collector/worker/span/persistence/SpanSearchWithIdTestCase.java
@@ -18,7 +18,6 @@ import org.skywalking.apm.collector.worker.Const;
import org.skywalking.apm.collector.worker.segment.SegmentIndex;
import org.skywalking.apm.collector.worker.segment.mock.SegmentMock;
import org.skywalking.apm.collector.worker.storage.GetResponseFromEs;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.trace.TraceSegment;
import java.util.TimeZone;
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/client/CollectorClient.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/client/CollectorClient.java
index 6b5fc05fa7e24ca0bdc0fb746b0507535f91ef08..11fa6d713969cc4f231459d003b6ca845a5eb32f 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/client/CollectorClient.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/client/CollectorClient.java
@@ -10,7 +10,6 @@ import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.skywalking.apm.agent.core.boot.ServiceManager;
import org.skywalking.apm.agent.core.conf.Config;
-import org.skywalking.apm.agent.core.context.trace.SegmentsMessage;
import org.skywalking.apm.agent.core.context.trace.TraceSegment;
import org.skywalking.apm.agent.core.queue.TraceSegmentProcessQueue;
import org.skywalking.apm.logging.ILog;
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/AbstractTracerContext.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/AbstractTracerContext.java
index 1adc79002c008be53f82c57ebbe98e93cfebfbd0..4b1c19bdeffbbeb16beb7ee08bb2ccd44127146e 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/AbstractTracerContext.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/AbstractTracerContext.java
@@ -1,6 +1,7 @@
package org.skywalking.apm.agent.core.context;
import org.skywalking.apm.agent.core.context.trace.AbstractSpan;
+import org.skywalking.apm.agent.core.context.trace.SpanType;
/**
* The AbstractTracerContext
represents the tracer context manager.
@@ -14,15 +15,11 @@ public interface AbstractTracerContext {
String getGlobalTraceId();
- AbstractSpan createSpan(String operationName, boolean isLeaf);
-
- AbstractSpan createSpan(String operationName, long startTime, boolean isLeaf);
+ AbstractSpan createSpan(String operationName, SpanType spanType);
AbstractSpan activeSpan();
void stopSpan(AbstractSpan span);
- void stopSpan(AbstractSpan span, Long endTime);
-
void dispose();
}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextCarrier.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextCarrier.java
index a8fb8dfb86da0acc43dbf94763f26ab014daaf10..25d576f8efddb5d8dd1210b3ee68939a244f9b46 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextCarrier.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextCarrier.java
@@ -5,7 +5,6 @@ import java.util.LinkedList;
import java.util.List;
import org.skywalking.apm.agent.core.context.ids.DistributedTraceId;
import org.skywalking.apm.agent.core.context.ids.PropagatedTraceId;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.trace.TraceSegment;
import org.skywalking.apm.util.StringUtil;
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/TracerContext.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/TracerContext.java
index be3aebd4e9ab36d84e0e2fa2f9a19f4254686c3a..bfd85ec228854d6d709dab0d209939468b6eb2d9 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/TracerContext.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/TracerContext.java
@@ -5,8 +5,6 @@ import java.util.List;
import org.skywalking.apm.agent.core.boot.ServiceManager;
import org.skywalking.apm.agent.core.conf.Config;
import org.skywalking.apm.agent.core.context.trace.AbstractSpan;
-import org.skywalking.apm.agent.core.context.trace.LeafSpan;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.trace.TraceSegment;
import org.skywalking.apm.agent.core.context.trace.TraceSegmentRef;
import org.skywalking.apm.agent.core.sampling.SamplingService;
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/TracingContext.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/TracingContext.java
new file mode 100644
index 0000000000000000000000000000000000000000..c06ddd15716b6c78390f3074ff46a7aedcb096e8
--- /dev/null
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/TracingContext.java
@@ -0,0 +1,100 @@
+package org.skywalking.apm.agent.core.context;
+
+import java.util.LinkedList;
+import org.skywalking.apm.agent.core.boot.ServiceManager;
+import org.skywalking.apm.agent.core.conf.Config;
+import org.skywalking.apm.agent.core.context.trace.AbstractSpan;
+import org.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
+import org.skywalking.apm.agent.core.context.trace.SpanType;
+import org.skywalking.apm.agent.core.context.trace.TraceSegment;
+import org.skywalking.apm.agent.core.dictionary.DictionaryManager;
+import org.skywalking.apm.agent.core.sampling.SamplingService;
+
+/**
+ * @author wusheng
+ */
+public class TracingContext implements AbstractTracerContext {
+ private SamplingService samplingService;
+
+ private TraceSegment segment;
+
+ /**
+ * Active spans stored in a Stack, usually called 'ActiveSpanStack'.
+ * This {@link LinkedList} is the in-memory storage-structure.
+ *
+ * I use {@link LinkedList#removeLast()}, {@link LinkedList#addLast(Object)} and {@link LinkedList#last} instead of
+ * {@link #pop()}, {@link #push(AbstractTracingSpan)}, {@link #peek()}
+ */
+ private LinkedList activeSpanStack = new LinkedList();
+
+ private int spanIdGenerator;
+
+ TracingContext() {
+ this.segment = new TraceSegment(DictionaryManager.getApplicationDictionary().findId(Config.Agent.APPLICATION_CODE));
+ this.spanIdGenerator = 0;
+ if (samplingService == null) {
+ samplingService = ServiceManager.INSTANCE.findService(SamplingService.class);
+ }
+ }
+
+ @Override
+ public void inject(ContextCarrier carrier) {
+
+ }
+
+ @Override
+ public void extract(ContextCarrier carrier) {
+
+ }
+
+ @Override
+ public String getGlobalTraceId() {
+ return null;
+ }
+
+ @Override
+ public AbstractSpan createSpan(String operationName, SpanType spanType) {
+ return null;
+ }
+
+ @Override
+ public AbstractSpan activeSpan() {
+ return null;
+ }
+
+ @Override
+ public void stopSpan(AbstractSpan span) {
+
+ }
+
+ @Override
+ public void dispose() {
+
+ }
+
+ /**
+ * @return the top element of 'ActiveSpanStack', and remove it.
+ */
+ private AbstractTracingSpan pop() {
+ return activeSpanStack.removeLast();
+ }
+
+ /**
+ * Add a new Span at the top of 'ActiveSpanStack'
+ *
+ * @param span
+ */
+ private void push(AbstractTracingSpan span) {
+ activeSpanStack.addLast(span);
+ }
+
+ /**
+ * @return the top element of 'ActiveSpanStack' only.
+ */
+ private AbstractTracingSpan peek() {
+ if (activeSpanStack.isEmpty()) {
+ return null;
+ }
+ return activeSpanStack.getLast();
+ }
+}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/tag/AbstractTag.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/tag/AbstractTag.java
index 518e6e2ae0c5dafdbed490b61e1e60f6e1c3c9f2..7c40949e527c6e26bd35b401934b9c2bdac1fd7e 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/tag/AbstractTag.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/tag/AbstractTag.java
@@ -1,7 +1,6 @@
package org.skywalking.apm.agent.core.context.tag;
import org.skywalking.apm.agent.core.context.trace.AbstractSpan;
-import org.skywalking.apm.agent.core.context.trace.Span;
/**
* This is the abstract tag.
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/AbstractSpan.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/AbstractSpan.java
index 73697705f84d47ab87bc1489c52f3173c38762c0..e5e936cc1cae4f3d4cecb3af28145054cece1754 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/AbstractSpan.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/AbstractSpan.java
@@ -1,6 +1,9 @@
package org.skywalking.apm.agent.core.context.trace;
-import java.util.Map;
+import java.util.LinkedList;
+import java.util.List;
+import org.skywalking.apm.agent.core.context.util.KeyValuePair;
+import org.skywalking.apm.agent.core.context.util.ThrowableTransformer;
/**
* The AbstractSpan
represents the span's skeleton,
@@ -8,24 +11,70 @@ import java.util.Map;
*
* @author wusheng
*/
-public interface AbstractSpan {
- AbstractSpan setOperationName(String operationName);
+public abstract class AbstractSpan {
+ protected String operationName;
+ /**
+ * The start time of this Span.
+ */
+ protected long startTime;
+ /**
+ * The end time of this Span.
+ */
+ protected long endTime;
- void setPeerHost(String peerHost);
+ /**
+ * Log is a concept from OpenTracing spec.
+ *
+ * {@see https://github.com/opentracing/specification/blob/master/specification.md#log-structured-data}
+ */
+ protected List logs;
- void setPort(int port);
+ protected AbstractSpan(String operationName) {
+ this.operationName = operationName;
+ }
- void setPeers(String peers);
+ public void start() {
+ this.startTime = System.currentTimeMillis();
+ }
- AbstractSpan setTag(String key, String value);
+ /**
+ * Set a key:value tag on the Span.
+ *
+ * @return this Span instance, for chaining
+ */
+ public abstract AbstractSpan tag(String key, String value);
- AbstractSpan setTag(String key, boolean value);
+ /**
+ * Record an exception event of the current walltime timestamp.
+ *
+ * @param t any subclass of {@link Throwable}, which occurs in this span.
+ * @return the Span, for chaining
+ */
+ public AbstractSpan log(Throwable t) {
+ if (logs == null) {
+ logs = new LinkedList();
+ }
+ logs.add(new LogDataEntity.Builder()
+ .add(new KeyValuePair("event", "error"))
+ .add(new KeyValuePair("error.kind", t.getClass().getName()))
+ .add(new KeyValuePair("message", t.getMessage()))
+ .add(new KeyValuePair("stack", ThrowableTransformer.INSTANCE.convert2String(t, 4000)))
+ .build());
+ return this;
+ }
- AbstractSpan setTag(String key, Integer value);
+ /**
+ * @return true if the actual span is an entry span.
+ */
+ public abstract boolean isEntry();
- AbstractSpan log(Map fields);
+ /**
+ * @return true if the actual span is a local span.
+ */
+ public abstract boolean isLocal();
- AbstractSpan log(Throwable t);
-
- AbstractSpan log(String event);
+ /**
+ * @return true if the actual span is an exit span.
+ */
+ public abstract boolean isExit();
}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/AbstractTracingSpan.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/AbstractTracingSpan.java
new file mode 100644
index 0000000000000000000000000000000000000000..858593559cccb32da7dabb5e3df041194a99c14b
--- /dev/null
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/AbstractTracingSpan.java
@@ -0,0 +1,43 @@
+package org.skywalking.apm.agent.core.context.trace;
+
+import java.util.LinkedList;
+import java.util.List;
+import org.skywalking.apm.agent.core.context.util.KeyValuePair;
+
+/**
+ * The AbstractTracingSpan
represents a group of {@link AbstractSpan} implementations,
+ * which belongs a real distributed trace.
+ *
+ * @author wusheng
+ */
+public abstract class AbstractTracingSpan extends AbstractSpan {
+ protected int spanId;
+ protected int parentSpanId;
+ protected List tags;
+
+ protected AbstractTracingSpan(int spanId, int parentSpanId, String operationName) {
+ super(operationName);
+ this.spanId = spanId;
+ this.parentSpanId = parentSpanId;
+ }
+
+ @Override
+ public AbstractTracingSpan tag(String key, String value) {
+ if (tags == null) {
+ tags = new LinkedList();
+ }
+ tags.add(new KeyValuePair(key, value));
+ return this;
+ }
+
+ /**
+ * Finish the active Span.
+ * When it is finished, it will be archived by the given {@link TraceSegment}, which owners it.
+ *
+ * @param owner of the Span.
+ */
+ public void finish(TraceSegment owner) {
+ this.endTime = System.currentTimeMillis();
+ owner.archive(this);
+ }
+}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/EntrySpan.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/EntrySpan.java
new file mode 100644
index 0000000000000000000000000000000000000000..204b3cd1beeb5432fb16aa0410ce8e27fa7f9d17
--- /dev/null
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/EntrySpan.java
@@ -0,0 +1,69 @@
+package org.skywalking.apm.agent.core.context.trace;
+
+/**
+ * The EntrySpan
represents a service provider point, such as Tomcat server entrance.
+ *
+ * It is a start point of {@link TraceSegment}, even in a complex application, there maybe have multi entry point,
+ * the EntrySpan
only represents the first one.
+ *
+ * But with the last EntrySpan
's tags and logs, which have more details about a service provider.
+ *
+ * @author wusheng
+ */
+public class EntrySpan extends AbstractTracingSpan {
+ private int stackDepth;
+
+ public EntrySpan(int spanId, int parentSpanId, String operationName) {
+ super(spanId, parentSpanId, operationName);
+ this.stackDepth = 0;
+ }
+
+ /**
+ * Set the {@link #startTime}, when the first start, which means the first service provided.
+ */
+ @Override
+ public void start() {
+ if (++stackDepth == 1) {
+ super.start();
+ }
+ clearWhenRestart();
+ }
+
+ @Override
+ public EntrySpan tag(String key, String value) {
+ if (stackDepth == 1) {
+ super.tag(key, value);
+ }
+ return this;
+ }
+
+ @Override
+ public void finish(TraceSegment owner) {
+ if (--stackDepth == 0) {
+ super.finish(owner);
+ }
+ }
+
+ @Override
+ public EntrySpan log(Throwable t) {
+ super.log(t);
+ return this;
+ }
+
+ @Override public boolean isEntry() {
+ return true;
+ }
+
+ @Override public boolean isLocal() {
+ return false;
+ }
+
+ @Override public boolean isExit() {
+ return false;
+ }
+
+ private void clearWhenRestart() {
+ this.logs = null;
+ this.tags = null;
+ }
+}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/ExitSpan.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/ExitSpan.java
new file mode 100644
index 0000000000000000000000000000000000000000..e9d554580ff37652302bcab71499943fdcedbf1e
--- /dev/null
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/ExitSpan.java
@@ -0,0 +1,67 @@
+package org.skywalking.apm.agent.core.context.trace;
+
+/**
+ * The ExitSpan
represents a service consumer point, such as Feign, Okhttp client for a Http service.
+ *
+ * It is an exit point or a leaf span(our old name) of trace tree.
+ * In a single rpc call, because of a combination of client libs, there maybe contain multi exit point.
+ *
+ * The ExitSpan
only presents the first one.
+ *
+ * @author wusheng
+ */
+public class ExitSpan extends AbstractTracingSpan {
+ private int stackDepth;
+ private String peerPoint;
+
+ public ExitSpan(int spanId, int parentSpanId, String operationName, String peerPoint) {
+ super(spanId, parentSpanId, operationName);
+ this.stackDepth = 0;
+ this.peerPoint = peerPoint;
+ }
+
+ /**
+ * Set the {@link #startTime}, when the first start, which means the first service provided.
+ */
+ @Override
+ public void start() {
+ if (++stackDepth == 1) {
+ super.start();
+ }
+ }
+
+ @Override
+ public ExitSpan tag(String key, String value) {
+ if (stackDepth == 1) {
+ super.tag(key, value);
+ }
+ return this;
+ }
+
+ @Override
+ public void finish(TraceSegment owner) {
+ if (--stackDepth == 0) {
+ super.finish(owner);
+ }
+ }
+
+ @Override
+ public ExitSpan log(Throwable t) {
+ if (stackDepth == 1) {
+ super.log(t);
+ }
+ return this;
+ }
+
+ @Override public boolean isEntry() {
+ return false;
+ }
+
+ @Override public boolean isLocal() {
+ return false;
+ }
+
+ @Override public boolean isExit() {
+ return true;
+ }
+}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/LeafSpan.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/LeafSpan.java
deleted file mode 100644
index 0d102e952a91a6edd38fadceaf4918bb4a24221f..0000000000000000000000000000000000000000
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/LeafSpan.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package org.skywalking.apm.agent.core.context.trace;
-
-
-/**
- * LeafSpan is a special type of {@link Span}
- *
- * In rpc-client tracing scenario, one component could constitute by many other rpc-client.
- * e.g Feign constitutes by okhttp, apache httpclient, etc.
- *
- * By having leaf concept, no need so many spans for single rpc call.
- *
- * @author wusheng
- */
-public class LeafSpan extends Span {
- private int stackDepth = 0;
-
- /**
- * Create a new span, by given span id and give startTime but no parent span id,
- * No parent span id means that, this Span is the first span of the {@link TraceSegment}
- *
- * @param spanId given by the creator, and must be unique id in the {@link TraceSegment}
- * @param operationName {@link #operationName}
- * @param startTime given start time of span
- */
- public LeafSpan(int spanId, String operationName, long startTime) {
- super(spanId, -1, operationName, startTime);
- }
-
- /**
- * Create a new span, by given span id, parent span, operationName and startTime.
- * This span must belong a {@link TraceSegment}, also is a part of Distributed Trace.
- *
- * @param spanId given by the creator, and must be unique id in the {@link TraceSegment}
- * @param parentSpan {@link Span}
- * @param operationName {@link #operationName}
- * @param startTime given start timestamp
- */
- public LeafSpan(int spanId, Span parentSpan, String operationName, long startTime) {
- super(spanId, parentSpan.getSpanId(), operationName, startTime);
- }
-
- public void push() {
- stackDepth++;
- }
-
- public void pop() {
- stackDepth--;
- }
-
- public boolean isFinished() {
- return stackDepth == 0;
- }
-
- @Override
- public boolean isLeaf() {
- return true;
- }
-
- private boolean isInOwnerContext() {
- return stackDepth == 1;
- }
-
- /**
- * Sets the string name for the logical operation this span represents,
- * only when this is in context of the leaf span owner.
- *
- * @return this Span instance, for chaining
- */
- @Override
- public Span setOperationName(String operationName) {
- if (isInOwnerContext()) {
- super.setOperationName(operationName);
- }
- return this;
- }
-
- /**
- * Set a key:value tag on the Span,
- * only when this is in context of the leaf span owner.
- *
- * @return this Span instance, for chaining
- */
- @Override
- public final Span setTag(String key, String value) {
- if (isInOwnerContext()) {
- super.setTag(key, value);
- }
- return this;
- }
-
- @Override
- public final Span setTag(String key, boolean value) {
- if (isInOwnerContext()) {
- super.setTag(key, value);
- }
- return this;
- }
-
- @Override
- public final Span setTag(String key, Integer value) {
- if (isInOwnerContext()) {
- super.setTag(key, value);
- }
- return this;
- }
-}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/LocalSpan.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/LocalSpan.java
new file mode 100644
index 0000000000000000000000000000000000000000..83cddb4c087c34c3d677291a6ecc1fe76858fd1d
--- /dev/null
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/LocalSpan.java
@@ -0,0 +1,37 @@
+package org.skywalking.apm.agent.core.context.trace;
+
+/**
+ * The LocalSpan
represents a normal tracing point, such as a local method.
+ *
+ * @author wusheng
+ */
+public class LocalSpan extends AbstractTracingSpan {
+
+ public LocalSpan(int spanId, int parentSpanId, String operationName) {
+ super(spanId, parentSpanId, operationName);
+ }
+
+ @Override
+ public LocalSpan tag(String key, String value) {
+ super.tag(key, value);
+ return this;
+ }
+
+ @Override
+ public LocalSpan log(Throwable t) {
+ super.log(t);
+ return this;
+ }
+
+ @Override public boolean isEntry() {
+ return false;
+ }
+
+ @Override public boolean isLocal() {
+ return true;
+ }
+
+ @Override public boolean isExit() {
+ return false;
+ }
+}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/LogData.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/LogData.java
deleted file mode 100644
index 3e9fd6b0167bb7549c8d1ba4b5f7e2b387d3d794..0000000000000000000000000000000000000000
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/LogData.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.skywalking.apm.agent.core.context.trace;
-
-import com.google.gson.annotations.Expose;
-import com.google.gson.annotations.SerializedName;
-import java.util.Collections;
-import java.util.Map;
-
-/**
- * It is a holder of one log record.
- *
- * Created by wusheng on 2017/2/17.
- */
-public class LogData {
- @Expose
- @SerializedName(value = "tm")
- private long time;
-
- @Expose
- @SerializedName(value = "fi")
- private Map fields;
-
- LogData(long time, Map fields) {
- this.time = time;
- if (fields == null) {
- throw new NullPointerException();
- }
- this.fields = fields;
- }
-
- public LogData() {
- }
-
- public long getTime() {
- return time;
- }
-
- public Map getFields() {
- return Collections.unmodifiableMap(fields);
- }
-
-}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/LogDataEntity.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/LogDataEntity.java
new file mode 100644
index 0000000000000000000000000000000000000000..6a1eedb976560fb2288039fa97e2f5e5ac5bb373
--- /dev/null
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/LogDataEntity.java
@@ -0,0 +1,42 @@
+package org.skywalking.apm.agent.core.context.trace;
+
+import java.util.LinkedList;
+import java.util.List;
+import org.skywalking.apm.agent.core.context.util.KeyValuePair;
+
+/**
+ * The LogDataEntity
represents a collection of {@link KeyValuePair},
+ * contains several fields of a logging operation.
+ *
+ * @author wusheng
+ */
+public class LogDataEntity {
+ protected List logs;
+
+ private LogDataEntity(List logs) {
+ this.logs = logs;
+ }
+
+ public List getLogs() {
+ return logs;
+ }
+
+ public static class Builder {
+ protected List logs;
+
+ public Builder() {
+ logs = new LinkedList();
+ }
+
+ public Builder add(KeyValuePair... fields){
+ for (KeyValuePair field : fields) {
+ logs.add(field);
+ }
+ return this;
+ }
+
+ public LogDataEntity build(){
+ return new LogDataEntity(logs);
+ }
+ }
+}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/NoopSpan.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/NoopSpan.java
index 45995108600416cf18aedd51d38ebf65db8629df..7e538bb6273fbdc62458a55313e7efa92dd96046 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/NoopSpan.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/NoopSpan.java
@@ -1,6 +1,5 @@
package org.skywalking.apm.agent.core.context.trace;
-import java.util.Map;
import org.skywalking.apm.agent.core.context.IgnoredTracerContext;
/**
@@ -9,55 +8,39 @@ import org.skywalking.apm.agent.core.context.IgnoredTracerContext;
*
* @author wusheng
*/
-public class NoopSpan implements AbstractSpan {
- @Override
- public AbstractSpan setOperationName(String operationName) {
- return this;
- }
-
- @Override
- public void setPeerHost(String peerHost) {
-
+public class NoopSpan extends AbstractSpan {
+ public NoopSpan() {
+ super(null);
}
@Override
- public void setPort(int port) {
-
+ public void start() {
+ super.start();
}
@Override
- public void setPeers(String peers) {
-
+ public AbstractSpan log(Throwable t) {
+ return super.log(t);
}
- @Override
- public AbstractSpan setTag(String key, String value) {
- return this;
- }
+ public void finish(){
- @Override
- public AbstractSpan setTag(String key, boolean value) {
- return this;
}
@Override
- public AbstractSpan setTag(String key, Integer value) {
- return this;
+ public AbstractSpan tag(String key, String value) {
+ return null;
}
- @Override
- public AbstractSpan log(Map fields) {
- return this;
+ @Override public boolean isEntry() {
+ return false;
}
- @Override
- public AbstractSpan log(Throwable t) {
- return this;
+ @Override public boolean isLocal() {
+ return false;
}
- @Override
- public AbstractSpan log(String event) {
- return this;
+ @Override public boolean isExit() {
+ return false;
}
-
}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/SegmentsMessage.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/SegmentsMessage.java
deleted file mode 100644
index d08fae7ce7e8967235d0b4711de1c1ea47feb8dd..0000000000000000000000000000000000000000
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/SegmentsMessage.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.skywalking.apm.agent.core.context.trace;
-
-import com.google.gson.Gson;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * The SegmentsMessage
is a set of {@link TraceSegment},
- * this set provides a container, when several {@link TraceSegment}s are going to uplink to server.
- *
- * @author wusheng
- */
-public class SegmentsMessage {
- private List segments;
-
- public SegmentsMessage() {
- segments = new LinkedList();
- }
-
- public void append(TraceSegment segment) {
- this.segments.add(segment);
- }
-
- public List getSegments() {
- return Collections.unmodifiableList(segments);
- }
-
- /**
- * This serialization mechanism started from 3.1, it is similar to network package.
- * The data protocol is
- *
- * segment1.json.length + ' '(one blank space) + segment1.json
- * + segment2.json.length + ' '(one blank space) + segment2.json
- * + etc.
- *
- * @param gson the serializer for {@link TraceSegment}
- * @return the string represents the SegmentMessage
- */
- public String serialize(Gson gson) {
- StringBuilder buffer = new StringBuilder();
- for (TraceSegment segment : segments) {
- String segmentJson = gson.toJson(segment);
- buffer.append(segmentJson.length()).append(' ').append(segmentJson);
- }
- return buffer.toString();
- }
-}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/Span.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/Span.java
deleted file mode 100644
index 28f32f6acacd4a543eb1e56bfeef7836a7d9ae61..0000000000000000000000000000000000000000
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/Span.java
+++ /dev/null
@@ -1,416 +0,0 @@
-package org.skywalking.apm.agent.core.context.trace;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonObject;
-import com.google.gson.TypeAdapter;
-import com.google.gson.annotations.JsonAdapter;
-import com.google.gson.stream.JsonReader;
-import com.google.gson.stream.JsonWriter;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import org.skywalking.apm.agent.core.context.tag.BooleanTagItem;
-import org.skywalking.apm.agent.core.context.tag.IntTagItem;
-import org.skywalking.apm.agent.core.context.tag.StringTagItem;
-import org.skywalking.apm.agent.core.context.util.ThrowableTransformer;
-import org.skywalking.apm.util.StringUtil;
-
-/**
- * Span is a concept from OpenTracing Spec, also from Google Dapper Paper.
- * Traces in OpenTracing are defined implicitly by their Spans.
- *
- * 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.
- */
-@JsonAdapter(Span.Serializer.class)
-public class Span implements AbstractSpan {
- private static Gson SERIALIZATION_GSON = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
-
- private int spanId;
- private int parentSpanId;
-
- /**
- * The start time of this Span.
- */
- private long startTime;
-
- /**
- * The end time of this Span.
- */
- private long endTime;
-
- /**
- * The operation name ot this Span.
- * If you want to know, how to set an operation name,
- * {@see https://github.com/opentracing/specification/blob/master/specification.md#start-a-new-span}
- */
- private String operationName;
-
- /**
- * {@link #peerHost}, {@link #port} and {@link #peers} were part of tags,
- * independence them from tags for better performance and gc.
- */
- private String peerHost;
-
- private int port;
-
- private String peers;
-
- /**
- * Tag is a concept from OpenTracing spec.
- *
- * {@see https://github.com/opentracing/specification/blob/master/specification.md#set-a-span-tag}
- */
- private List tagsWithStr;
-
- private List tagsWithBool;
-
- private List tagsWithInt;
-
- /**
- * Log is a concept from OpenTracing spec.
- *
- * {@see https://github.com/opentracing/specification/blob/master/specification.md#log-structured-data}
- */
- private List logs;
-
- /**
- * Create a new span, by given span id, parent span id and operationName.
- * This span must belong a {@link TraceSegment}, also is a part of Distributed Trace.
- *
- * @param spanId given by the creator, and must be unique id in the {@link TraceSegment}
- * @param parentSpanId given by the creator, and must be an existed span id in the {@link TraceSegment}. Value -1
- * means no parent span if this {@link TraceSegment}.
- * @param operationName {@link #operationName}
- */
- protected Span(int spanId, int parentSpanId, String operationName) {
- this(spanId, parentSpanId, operationName, System.currentTimeMillis());
- }
-
- /**
- * Create a new span, by given span id, parent span id, operationName and startTime.
- * This span must belong a {@link TraceSegment}, also is a part of Distributed Trace.
- *
- * @param spanId given by the creator, and must be unique id in the {@link TraceSegment}
- * @param parentSpanId given by the creator, and must be an existed span id in the {@link TraceSegment}. Value -1
- * means no parent span if this {@link TraceSegment}.
- * @param operationName {@link #operationName}
- * @param startTime given start timestamp.
- */
- protected Span(int spanId, int parentSpanId, String operationName, long startTime) {
- this();
- this.spanId = spanId;
- this.parentSpanId = parentSpanId;
- this.startTime = startTime;
- this.setOperationName(operationName);
- }
-
- /**
- * Create a new span, by given span id and no parent span id.
- * No parent span id means that, this Span is the first span of the {@link TraceSegment}
- *
- * @param spanId given by the creator, and must be unique id in the {@link TraceSegment}
- * @param operationName {@link #operationName}
- */
- public Span(int spanId, String operationName) {
- this(spanId, -1, operationName);
- }
-
- /**
- * Create a new span, by given span id and give startTime but no parent span id,
- * No parent span id means that, this Span is the first span of the {@link TraceSegment}
- *
- * @param spanId given by the creator, and must be unique id in the {@link TraceSegment}
- * @param operationName {@link #operationName}
- * @param startTime given start time of span
- */
- public Span(int spanId, String operationName, long startTime) {
- this(spanId, -1, operationName, startTime);
- }
-
- /**
- * Create a new span, by given span id and given parent {@link Span}.
- *
- * @param spanId given by the creator, and must be unique id in the {@link TraceSegment}
- * @param parentSpan {@link Span}
- * @param operationName {@link #operationName}
- */
- public Span(int spanId, Span parentSpan, String operationName) {
- this(spanId, parentSpan.spanId, operationName, System.currentTimeMillis());
- }
-
- /**
- * Create a new span, by given span id, parent span, operationName and startTime.
- * This span must belong a {@link TraceSegment}, also is a part of Distributed Trace.
- *
- * @param spanId given by the creator, and must be unique id in the {@link TraceSegment}
- * @param parentSpan {@link Span}
- * @param operationName {@link #operationName}
- * @param startTime given start timestamp
- */
- public Span(int spanId, Span parentSpan, String operationName, long startTime) {
- this(spanId, parentSpan.spanId, operationName, startTime);
- }
-
- /**
- * Create a new/empty span.
- */
- public Span() {
- }
-
- /**
- * Finish the active Span.
- * When it is finished, it will be archived by the given {@link TraceSegment}, which owners it.
- *
- * @param owner of the Span.
- */
- public void finish(TraceSegment owner) {
- this.finish(owner, System.currentTimeMillis());
- }
-
- /**
- * Finish the active Span.
- * When it is finished, it will be archived by the given {@link TraceSegment}, which owners it.
- * At the same out, set the {@link #endTime} as the given endTime
- *
- * @param owner of the Span.
- * @param endTime of the Span.
- */
- public void finish(TraceSegment owner, long endTime) {
- this.endTime = endTime;
- owner.archive(this);
- }
-
- /**
- * Set the string name for the logical operation this span represents.
- *
- * @return this Span instance, for chaining
- */
- public AbstractSpan setOperationName(String operationName) {
- this.operationName = operationName;
- return this;
- }
-
- /**
- * Set a key:value tag on the Span.
- *
- * @return this Span instance, for chaining
- */
- public Span setTag(String key, String value) {
- if (tagsWithStr == null) {
- tagsWithStr = new LinkedList();
- }
- tagsWithStr.add(new StringTagItem(key, value));
- return this;
- }
-
- public Span setTag(String key, boolean value) {
- if (tagsWithBool == null) {
- tagsWithBool = new LinkedList();
- }
- tagsWithBool.add(new BooleanTagItem(key, value));
- return this;
- }
-
- public Span setTag(String key, Integer value) {
- if (tagsWithInt == null) {
- tagsWithInt = new LinkedList();
- }
- tagsWithInt.add(new IntTagItem(key, value));
- return this;
- }
-
- /**
- * 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}
- * Log key:value pairs to the Span with the current walltime timestamp.
CAUTIONARY NOTE:
- * not all Tracer implementations support key:value log fields end-to-end. Caveat emptor.
A contrived example
- * (using Guava, which is not required):
- *
{@code
- * span.log(
- * ImmutableMap.Builder()
- * .put("event", "soft error")
- * .put("type", "cache timeout")
- * .put("waited.millis", 1500)
- * .build());
- * }
- *
- * @param fields key:value log fields. Tracer implementations should support String, numeric, and boolean values;
- * some may also support arbitrary Objects.
- * @return the Span, for chaining
- * @see Span#log(String)
- */
- public Span log(Map fields) {
- if (logs == null) {
- logs = new LinkedList();
- }
- logs.add(new LogData(System.currentTimeMillis(), fields));
- return this;
- }
-
- /**
- * Record an exception event of the current walltime timestamp.
- *
- * @param t any subclass of {@link Throwable}, which occurs in this span.
- * @return the Span, for chaining
- */
- public Span log(Throwable t) {
- Map exceptionFields = new HashMap();
- exceptionFields.put("event", "error");
- exceptionFields.put("error.kind", t.getClass().getName());
- exceptionFields.put("message", t.getMessage());
- exceptionFields.put("stack", ThrowableTransformer.INSTANCE.convert2String(t, 4000));
-
- return log(exceptionFields);
- }
-
- /**
- * 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#L120}
- * Record an event at the current walltime timestamp.
Shorthand for
- *
{@code
- * span.log(Collections.singletonMap("event", event));
- * }
- *
- * @param event the event value; often a stable identifier for a moment in the Span lifecycle
- * @return the Span, for chaining
- */
- public Span log(String event) {
- log(Collections.singletonMap("event", event));
- return this;
- }
-
- public int getSpanId() {
- return spanId;
- }
-
- public int getParentSpanId() {
- return parentSpanId;
- }
-
- public long getStartTime() {
- return startTime;
- }
-
- public long getEndTime() {
- return endTime;
- }
-
- public String getOperationName() {
- return operationName;
- }
-
- public boolean isLeaf() {
- return false;
- }
-
- public String getPeerHost() {
- return peerHost;
- }
-
- public int getPort() {
- return port;
- }
-
- public String getPeers() {
- return peers;
- }
-
- public void setPeerHost(String peerHost) {
- this.peerHost = peerHost;
- }
-
- public void setPort(int port) {
- this.port = port;
- }
-
- public void setPeers(String peers) {
- this.peers = peers;
- }
-
- @Override
- public String toString() {
- return "Span{" +
- "spanId=" + spanId +
- ", parentSpanId=" + parentSpanId +
- ", startTime=" + startTime +
- ", operationName='" + operationName + '\'' +
- '}';
- }
-
- public static class Serializer extends TypeAdapter {
- @Override
- public void write(JsonWriter out, Span span) throws IOException {
- out.beginObject();
- out.name("si").value(span.spanId);
- out.name("ps").value(span.parentSpanId);
- out.name("st").value(span.startTime);
- out.name("et").value(span.endTime);
- out.name("on").value(span.operationName);
-
- this.writeTags(out, span);
-
- if (span.logs != null) {
- out.name("logs").jsonValue(SERIALIZATION_GSON.toJson(span.logs));
- }
-
- out.endObject();
- }
-
- public void writeTags(JsonWriter out, Span span) throws IOException {
- JsonObject tagWithStr = null;
- JsonObject tagWithInt = null;
- JsonObject tagWithBool = null;
- if (!StringUtil.isEmpty(span.peerHost)) {
- tagWithStr = new JsonObject();
- tagWithStr.addProperty("peer.host", span.peerHost);
- tagWithInt = new JsonObject();
- tagWithInt.addProperty("peer.port", span.port);
- } else if (!StringUtil.isEmpty(span.peers)) {
- tagWithStr = new JsonObject();
- tagWithStr.addProperty("peers", span.peers);
- } else if (span.tagsWithStr != null) {
- tagWithStr = new JsonObject();
- }
-
- if (span.tagsWithStr != null) {
- for (StringTagItem item : span.tagsWithStr) {
- tagWithStr.addProperty(item.getKey(), item.getValue());
- }
- }
- if (span.tagsWithInt != null) {
- if (tagWithInt != null) {
- tagWithInt = new JsonObject();
- }
- for (IntTagItem item : span.tagsWithInt) {
- tagWithInt.addProperty(item.getKey(), item.getValue());
- }
- }
- if (span.tagsWithBool != null) {
- tagWithBool = new JsonObject();
- for (BooleanTagItem item : span.tagsWithBool) {
- tagWithBool.addProperty(item.getKey(), item.getValue());
- }
- }
-
- if (tagWithStr != null) {
- out.name("ts").jsonValue(tagWithStr.toString());
- }
- if (tagWithInt != null) {
- out.name("ti").jsonValue(tagWithInt.toString());
- }
- if (tagWithBool != null) {
- out.name("tb").jsonValue(tagWithBool.toString());
- }
- }
-
- @Override
- public Span read(JsonReader in) throws IOException {
- throw new IOException("Can't deserialize span at agent side for performance consideration");
- }
- }
-}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/SpanType.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/SpanType.java
new file mode 100644
index 0000000000000000000000000000000000000000..ec13a4a1d38d63a77902cfb1cc531aea37e65db1
--- /dev/null
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/SpanType.java
@@ -0,0 +1,10 @@
+package org.skywalking.apm.agent.core.context.trace;
+
+/**
+ * @author wusheng
+ */
+public enum SpanType {
+ ENTRY,
+ EXIT,
+ LOCAL;
+}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegment.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegment.java
index d54f76c916e180c103552cf7f989c0fbead81082..daefba54c6abf603db8839b1690fdae1b7f12f23 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegment.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegment.java
@@ -1,7 +1,5 @@
package org.skywalking.apm.agent.core.context.trace;
-import com.google.gson.annotations.Expose;
-import com.google.gson.annotations.SerializedName;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@@ -26,22 +24,16 @@ public class TraceSegment {
* The id of this trace segment.
* Every segment has its unique-global-id.
*/
- @Expose
- @SerializedName(value = "ts")
private String traceSegmentId;
/**
* The start time of this trace segment.
*/
- @Expose
- @SerializedName(value = "st")
private long startTime;
/**
* The end time of this trace segment.
*/
- @Expose
- @SerializedName(value = "et")
private long endTime;
/**
@@ -50,8 +42,6 @@ public class TraceSegment {
* but if this segment is a start span of batch process, the segment faces multi parents,
* at this moment, we use this {@link #refs} to link them.
*/
- @Expose
- @SerializedName(value = "rs")
private List refs;
/**
@@ -59,19 +49,15 @@ public class TraceSegment {
* They all have finished.
* All active spans are hold and controlled by "skywalking-api" module.
*/
- @Expose
- @SerializedName(value = "ss")
- private List spans;
+ private List spans;
/**
- * The applicationCode
represents a name of current application/JVM and indicates which is business
+ * The applicationId
represents a name of current application/JVM and indicates which is business
* role in the cluster.
*
* e.g. account_app, billing_app
*/
- @Expose
- @SerializedName(value = "ac")
- private String applicationCode;
+ private int applicationId;
/**
* The relatedGlobalTraces
represent a set of all related trace. Most time it contains only one
@@ -86,18 +72,16 @@ public class TraceSegment {
* relatedGlobalTraces
targets this {@link TraceSegment}'s related call chain, a call chain contains
* multi {@link TraceSegment}s, only using {@link #refs} is not enough for analysis and ui.
*/
- @Expose
- @SerializedName(value = "gt")
private DistributedTraceIds relatedGlobalTraces;
private boolean ignore = false;
/**
- * Create a trace segment, by the given applicationCode.
+ * Create a trace segment, by the given applicationId.
*/
- public TraceSegment(String applicationCode) {
+ public TraceSegment(int applicationId) {
this();
- this.applicationCode = applicationCode;
+ this.applicationId = applicationId;
}
/**
@@ -108,7 +92,7 @@ public class TraceSegment {
public TraceSegment() {
this.startTime = System.currentTimeMillis();
this.traceSegmentId = GlobalIdGenerator.generate(ID_TYPE);
- this.spans = new LinkedList();
+ this.spans = new LinkedList();
this.relatedGlobalTraces = new DistributedTraceIds();
this.relatedGlobalTraces.append(new NewDistributedTraceId());
}
@@ -142,12 +126,12 @@ public class TraceSegment {
}
/**
- * After {@link Span} is finished, as be controller by "skywalking-api" module,
+ * After {@link AbstractSpan} is finished, as be controller by "skywalking-api" module,
* notify the {@link TraceSegment} to archive it.
*
* @param finishedSpan
*/
- public void archive(Span finishedSpan) {
+ public void archive(AbstractTracingSpan finishedSpan) {
spans.add(finishedSpan);
}
@@ -173,13 +157,6 @@ public class TraceSegment {
return endTime;
}
- public List getRefs() {
- if (refs == null) {
- return null;
- }
- return Collections.unmodifiableList(refs);
- }
-
public boolean hasRef() {
return !(refs == null || refs.size() == 0);
}
@@ -192,14 +169,6 @@ public class TraceSegment {
return this.spans != null && this.spans.size() == 1;
}
- public List getSpans() {
- return Collections.unmodifiableList(spans);
- }
-
- public String getApplicationCode() {
- return applicationCode;
- }
-
public boolean isIgnore() {
return ignore;
}
@@ -216,7 +185,7 @@ public class TraceSegment {
", endTime=" + endTime +
", refs=" + refs +
", spans=" + spans +
- ", applicationCode='" + applicationCode + '\'' +
+ ", applicationId='" + applicationId + '\'' +
", relatedGlobalTraces=" + relatedGlobalTraces +
'}';
}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegmentRef.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegmentRef.java
index bd0ca79cbac29a03b3a300987a9f990e6bd67f8f..a9e2c7c97ca1c00fa6ff7fa5eba3a1b41be55a2a 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegmentRef.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegmentRef.java
@@ -1,9 +1,5 @@
package org.skywalking.apm.agent.core.context.trace;
-import com.google.gson.annotations.Expose;
-import com.google.gson.annotations.SerializedName;
-import org.skywalking.apm.agent.core.context.tag.Tags;
-
/**
* {@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}.
@@ -14,29 +10,12 @@ public class TraceSegmentRef {
/**
* {@link TraceSegment#traceSegmentId}
*/
- @Expose
- @SerializedName(value = "ts")
private String traceSegmentId;
- /**
- * {@link Span#spanId}
- */
- @Expose
- @SerializedName(value = "si")
private int spanId = -1;
- /**
- * {@link TraceSegment#applicationCode}
- */
- @Expose
- @SerializedName(value = "ac")
private String applicationCode;
- /**
- * {@link Tags#PEER_HOST}
- */
- @Expose
- @SerializedName(value = "ph")
private String peerHost;
/**
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/util/KeyValuePair.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/util/KeyValuePair.java
new file mode 100644
index 0000000000000000000000000000000000000000..6ae5ebcae8266d90590a5a4d30628fab0b534d9c
--- /dev/null
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/util/KeyValuePair.java
@@ -0,0 +1,24 @@
+package org.skywalking.apm.agent.core.context.util;
+
+/**
+ * The KeyValuePair
represents a object which contains a string key and a string value.
+ *
+ * @author wusheng
+ */
+public class KeyValuePair {
+ private String key;
+ private String value;
+
+ public KeyValuePair(String key, String value) {
+ this.key = key;
+ this.value = value;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public String getValue() {
+ return value;
+ }
+}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/dictionary/ApplicationDictionary.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/dictionary/ApplicationDictionary.java
new file mode 100644
index 0000000000000000000000000000000000000000..115c5ea2f49b292780faae79a009a33c1e4f53d1
--- /dev/null
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/dictionary/ApplicationDictionary.java
@@ -0,0 +1,14 @@
+package org.skywalking.apm.agent.core.dictionary;
+
+/**
+ * Map of application id to application code, which is from the collector side.
+ *
+ * @author wusheng
+ */
+public enum ApplicationDictionary {
+ INSTANCE;
+
+ public int findId(String applicationCode) {
+
+ }
+}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/dictionary/DictionaryManager.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/dictionary/DictionaryManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..81e581de55b0b8511cd1c4223c9977a5a4bc1ee4
--- /dev/null
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/dictionary/DictionaryManager.java
@@ -0,0 +1,13 @@
+package org.skywalking.apm.agent.core.dictionary;
+
+/**
+ * @author wusheng
+ */
+public class DictionaryManager {
+ /**
+ * @return {@link ApplicationDictionary} to find applicationId
+ */
+ public static ApplicationDictionary getApplicationDictionary(){
+ return ApplicationDictionary.INSTANCE;
+ }
+}
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/trace/LeafSpanTestCase.java b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/trace/LeafSpanTestCase.java
index 3ceb1b83a5a91e2f094f7e74110263db21ed7237..f79a983d0ff5fc60e7c896c0902a4e296b2df929 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/trace/LeafSpanTestCase.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/trace/LeafSpanTestCase.java
@@ -2,7 +2,6 @@ package org.skywalking.apm.agent.core.context.trace;
import org.junit.Assert;
import org.junit.Test;
-import org.skywalking.apm.agent.core.context.trace.LeafSpan;
import org.skywalking.apm.agent.core.tags.BooleanTagReader;
import org.skywalking.apm.agent.core.tags.IntTagReader;
import org.skywalking.apm.agent.core.tags.StringTagReader;
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/trace/SpanTestCase.java b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/trace/SpanTestCase.java
index 8031530b3bb354bf04a6ceac7b795e74cfe00a7a..e68e8c9592bc5d4693603b301e8bfabb892d0d9e 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/trace/SpanTestCase.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/trace/SpanTestCase.java
@@ -6,9 +6,6 @@ import org.junit.Assert;
import org.junit.Test;
import org.skywalking.apm.agent.core.tags.BooleanTagReader;
import org.skywalking.apm.agent.core.tags.StringTagReader;
-import org.skywalking.apm.agent.core.context.trace.LogData;
-import org.skywalking.apm.agent.core.context.trace.Span;
-import org.skywalking.apm.agent.core.context.trace.TraceSegment;
import org.skywalking.apm.agent.core.context.tag.Tags;
/**
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/trace/TraceSegmentTestCase.java b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/trace/TraceSegmentTestCase.java
index f0ff219005b3d87a30c9b5ff369275f4580d8e43..1b62dce9727305c8d0fdf7fe76bab4cbd478fb92 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/trace/TraceSegmentTestCase.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/trace/TraceSegmentTestCase.java
@@ -18,7 +18,7 @@ public class TraceSegmentTestCase {
Assert.assertTrue(segment.getTraceSegmentId().startsWith("Segment"));
Assert.assertTrue(segment.getStartTime() > 0);
- Assert.assertEquals("billing_app", segment.getApplicationCode());
+ Assert.assertEquals("billing_app", segment.getApplicationId());
}
@Test
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/tags/BooleanTagReader.java b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/tags/BooleanTagReader.java
index f353b0c8831117d015b1b4f560531ff92d700e5a..326e5fdc78146dab16928c97c8b538193bec7e58 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/tags/BooleanTagReader.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/tags/BooleanTagReader.java
@@ -2,7 +2,6 @@ package org.skywalking.apm.agent.core.tags;
import java.lang.reflect.Field;
import java.util.List;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.tag.BooleanTag;
import org.skywalking.apm.agent.core.context.tag.BooleanTagItem;
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/tags/IntTagReader.java b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/tags/IntTagReader.java
index feee4eb596db3d1f416a9ffe4e5b735b888163ce..6e168ec58e8c6616abe07727274cdccd152ba231 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/tags/IntTagReader.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/tags/IntTagReader.java
@@ -2,7 +2,6 @@ package org.skywalking.apm.agent.core.tags;
import java.lang.reflect.Field;
import java.util.List;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.tag.IntTag;
import org.skywalking.apm.agent.core.context.tag.IntTagItem;
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/tags/StringTagReader.java b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/tags/StringTagReader.java
index fc7246e7af6a81f56fbdb0c669b46f4d9d98163a..d15816650e2474c03be0ce274374409adf0c30e5 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/tags/StringTagReader.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/tags/StringTagReader.java
@@ -2,7 +2,6 @@ package org.skywalking.apm.agent.core.tags;
import java.lang.reflect.Field;
import java.util.List;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.tag.StringTag;
import org.skywalking.apm.agent.core.context.tag.StringTagItem;
diff --git a/apm-sniffer/apm-agent/pom.xml b/apm-sniffer/apm-agent/pom.xml
index 92d678ba7b443985f49e536f018a86de34e9e5a0..d1883f5110e6dacbe664c5fcfa881acd02aa5b35 100644
--- a/apm-sniffer/apm-agent/pom.xml
+++ b/apm-sniffer/apm-agent/pom.xml
@@ -148,7 +148,6 @@
org.apache.httpcomponents:*
commons-logging:*
commons-codec:*
- *:gson
diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/java/org/skywalking/apm/plugin/dubbo/DubboInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/java/org/skywalking/apm/plugin/dubbo/DubboInterceptorTest.java
index 98dfe05d623f8278205ffdb1b5f1eccc68914791..991c691c8e0f012772b27920c7ea6bc73977decf 100644
--- a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/java/org/skywalking/apm/plugin/dubbo/DubboInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/java/org/skywalking/apm/plugin/dubbo/DubboInterceptorTest.java
@@ -27,8 +27,6 @@ import org.skywalking.apm.sniffer.mock.context.MockTracerContextListener;
import org.skywalking.apm.sniffer.mock.context.SegmentAssert;
import org.skywalking.apm.sniffer.mock.trace.SpanLogReader;
import org.skywalking.apm.sniffer.mock.trace.tags.StringTagReader;
-import org.skywalking.apm.agent.core.context.trace.LogData;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.trace.TraceSegment;
import org.skywalking.apm.agent.core.context.trace.TraceSegmentRef;
import org.skywalking.apm.agent.core.context.tag.Tags;
diff --git a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/java/org/skywalking/apm/plugin/feign/http/v9/DefaultHttpClientInterceptor.java b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/java/org/skywalking/apm/plugin/feign/http/v9/DefaultHttpClientInterceptor.java
index 4e658ef01476e052f47c36e797a209412ab8a461..37525e8e180e02b084ff8461fadf32914de788fb 100644
--- a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/java/org/skywalking/apm/plugin/feign/http/v9/DefaultHttpClientInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/java/org/skywalking/apm/plugin/feign/http/v9/DefaultHttpClientInterceptor.java
@@ -16,7 +16,6 @@ import org.skywalking.apm.agent.core.context.ContextCarrier;
import org.skywalking.apm.agent.core.context.ContextManager;
import org.skywalking.apm.agent.core.context.tag.Tags;
import org.skywalking.apm.agent.core.context.trace.AbstractSpan;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.plugin.interceptor.EnhancedClassInstanceContext;
import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodInvokeContext;
import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor;
diff --git a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/test/java/org/skywalking/apm/plugin/feign/http/v9/DefaultHttpClientInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/test/java/org/skywalking/apm/plugin/feign/http/v9/DefaultHttpClientInterceptorTest.java
index e9d6191cf12f336faff3555e02ac049201eb26d1..76425b1f02a9281ca7a0d3feb319dff920aac5e5 100644
--- a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/test/java/org/skywalking/apm/plugin/feign/http/v9/DefaultHttpClientInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/test/java/org/skywalking/apm/plugin/feign/http/v9/DefaultHttpClientInterceptorTest.java
@@ -22,7 +22,6 @@ import org.skywalking.apm.sniffer.mock.context.SegmentAssert;
import org.skywalking.apm.sniffer.mock.trace.SpanLogReader;
import org.skywalking.apm.sniffer.mock.trace.tags.BooleanTagReader;
import org.skywalking.apm.sniffer.mock.trace.tags.StringTagReader;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.trace.TraceSegment;
import org.skywalking.apm.agent.core.context.tag.Tags;
diff --git a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/test/java/org/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/test/java/org/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptorTest.java
index 2ebf8b2465cc8b3c54dfc0a1b145c924421b9442..b24d549e15bcb0519e7e546c863e29f0a0ceec41 100644
--- a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/test/java/org/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/test/java/org/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptorTest.java
@@ -18,8 +18,6 @@ import org.skywalking.apm.sniffer.mock.context.MockTracerContextListener;
import org.skywalking.apm.sniffer.mock.context.SegmentAssert;
import org.skywalking.apm.sniffer.mock.trace.tags.BooleanTagReader;
import org.skywalking.apm.sniffer.mock.trace.tags.StringTagReader;
-import org.skywalking.apm.agent.core.context.trace.LogData;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.trace.TraceSegment;
import org.skywalking.apm.agent.core.context.tag.Tags;
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/CallableStatementTracing.java b/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/CallableStatementTracing.java
index 76b6b8eb1f6750a7558d53431ef69564ac896575..f6a949093a0aac47c15a5ce80383f196cd90880e 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/CallableStatementTracing.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/CallableStatementTracing.java
@@ -4,7 +4,6 @@ import java.sql.SQLException;
import org.skywalking.apm.agent.core.context.ContextManager;
import org.skywalking.apm.agent.core.context.tag.Tags;
import org.skywalking.apm.agent.core.context.trace.AbstractSpan;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.util.StringUtil;
/**
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/ConnectionTracing.java b/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/ConnectionTracing.java
index b20421b6bc277a2ab71aba8db417dbdee709ad12..b86c6025e2606e025fe59a9a494ee3bae39449e4 100755
--- a/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/ConnectionTracing.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/ConnectionTracing.java
@@ -3,7 +3,6 @@ package org.skywalking.apm.plugin.jdbc;
import org.skywalking.apm.agent.core.context.ContextManager;
import org.skywalking.apm.agent.core.context.trace.AbstractSpan;
import org.skywalking.apm.util.StringUtil;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.tag.Tags;
import java.sql.SQLException;
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/PreparedStatementTracing.java b/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/PreparedStatementTracing.java
index 4dea978ff75ce83c0bcc914036c93a2f44403f02..1b351bffaceebe2f50c6ce0b430a62f9c3a32223 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/PreparedStatementTracing.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/PreparedStatementTracing.java
@@ -4,7 +4,6 @@ import java.sql.SQLException;
import org.skywalking.apm.agent.core.context.ContextManager;
import org.skywalking.apm.agent.core.context.tag.Tags;
import org.skywalking.apm.agent.core.context.trace.AbstractSpan;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.util.StringUtil;
/**
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/StatementTracing.java b/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/StatementTracing.java
index d28c09d57e5c5ee6949e8e48bc6f216a3c6bf586..dae0e1e7039f20c12af3ae21a32d7910dcbc621d 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/StatementTracing.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/StatementTracing.java
@@ -4,7 +4,6 @@ import java.sql.SQLException;
import org.skywalking.apm.agent.core.context.ContextManager;
import org.skywalking.apm.agent.core.context.tag.Tags;
import org.skywalking.apm.agent.core.context.trace.AbstractSpan;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.util.StringUtil;
/**
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/test/java/org/skywalking/apm/plugin/jdbc/AbstractStatementTest.java b/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/test/java/org/skywalking/apm/plugin/jdbc/AbstractStatementTest.java
index 266b1d07760c37baf7e8b586bc8e4a4d4b327ee0..c442856baf5dc1d864f1bd94d64e2fb09eb18760 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/test/java/org/skywalking/apm/plugin/jdbc/AbstractStatementTest.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/test/java/org/skywalking/apm/plugin/jdbc/AbstractStatementTest.java
@@ -5,8 +5,6 @@ import java.util.List;
import org.hamcrest.CoreMatchers;
import org.skywalking.apm.sniffer.mock.context.MockTracerContextListener;
import org.skywalking.apm.sniffer.mock.trace.tags.StringTagReader;
-import org.skywalking.apm.agent.core.context.trace.LogData;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.tag.Tags;
import java.sql.SQLException;
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/test/java/org/skywalking/apm/plugin/jdbc/SWCallableStatementTest.java b/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/test/java/org/skywalking/apm/plugin/jdbc/SWCallableStatementTest.java
index 7d00bd0f048ab262caed2a2531e74b85cbb36d63..76f8150ffde709852ddb9eed92989e2ad3c88e7f 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/test/java/org/skywalking/apm/plugin/jdbc/SWCallableStatementTest.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/test/java/org/skywalking/apm/plugin/jdbc/SWCallableStatementTest.java
@@ -1,7 +1,6 @@
package org.skywalking.apm.plugin.jdbc;
import com.mysql.cj.api.jdbc.JdbcConnection;
-import java.lang.reflect.Field;
import java.util.List;
import org.hamcrest.CoreMatchers;
import org.junit.After;
@@ -16,8 +15,6 @@ import org.skywalking.apm.agent.core.boot.ServiceManager;
import org.skywalking.apm.agent.core.context.TracerContext;
import org.skywalking.apm.sniffer.mock.context.MockTracerContextListener;
import org.skywalking.apm.sniffer.mock.context.SegmentAssert;
-import org.skywalking.apm.agent.core.context.trace.LogData;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.trace.TraceSegment;
import java.io.InputStream;
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/test/java/org/skywalking/apm/plugin/jdbc/SWStatementTest.java b/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/test/java/org/skywalking/apm/plugin/jdbc/SWStatementTest.java
index b42d96ea3a4546bef63586ba16972951deecc1d5..540b0de918bd44e6d7197fb9d9271fc129f13d77 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/test/java/org/skywalking/apm/plugin/jdbc/SWStatementTest.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/test/java/org/skywalking/apm/plugin/jdbc/SWStatementTest.java
@@ -13,8 +13,6 @@ import org.skywalking.apm.agent.core.boot.ServiceManager;
import org.skywalking.apm.agent.core.context.TracerContext;
import org.skywalking.apm.sniffer.mock.context.MockTracerContextListener;
import org.skywalking.apm.sniffer.mock.context.SegmentAssert;
-import org.skywalking.apm.agent.core.context.trace.LogData;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.trace.TraceSegment;
import java.net.MalformedURLException;
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/test/java/org/skywalking/apm/plugin/jdbc/SwPreparedStatementTest.java b/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/test/java/org/skywalking/apm/plugin/jdbc/SwPreparedStatementTest.java
index 2984ea502ee3bfe8724c399dce3cb90319a820ab..7cf27a870bbf62061e8929448064f7516a01decf 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/test/java/org/skywalking/apm/plugin/jdbc/SwPreparedStatementTest.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-plugin/src/test/java/org/skywalking/apm/plugin/jdbc/SwPreparedStatementTest.java
@@ -16,8 +16,6 @@ import org.skywalking.apm.agent.core.boot.ServiceManager;
import org.skywalking.apm.agent.core.context.TracerContext;
import org.skywalking.apm.sniffer.mock.context.MockTracerContextListener;
import org.skywalking.apm.sniffer.mock.context.SegmentAssert;
-import org.skywalking.apm.agent.core.context.trace.LogData;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.trace.TraceSegment;
import java.io.InputStream;
diff --git a/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/src/test/java/org/skywalking/apm/plugin/jedis/v2/JedisMethodInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/src/test/java/org/skywalking/apm/plugin/jedis/v2/JedisMethodInterceptorTest.java
index 2ed164853e41470ef4ebae9f9df76d5d9bbcbf6e..81d57e354b5178e299745afd7f1b8706d6075347 100644
--- a/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/src/test/java/org/skywalking/apm/plugin/jedis/v2/JedisMethodInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/src/test/java/org/skywalking/apm/plugin/jedis/v2/JedisMethodInterceptorTest.java
@@ -16,10 +16,7 @@ import org.skywalking.apm.agent.core.plugin.interceptor.EnhancedClassInstanceCon
import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodInvokeContext;
import org.skywalking.apm.sniffer.mock.context.MockTracerContextListener;
import org.skywalking.apm.sniffer.mock.context.SegmentAssert;
-import org.skywalking.apm.sniffer.mock.trace.tags.BooleanTagReader;
import org.skywalking.apm.sniffer.mock.trace.tags.StringTagReader;
-import org.skywalking.apm.agent.core.context.trace.LogData;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.trace.TraceSegment;
import org.skywalking.apm.agent.core.context.tag.Tags;
diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/java/org/skywalking/apm/plugin/mongodb/v3/MongoDBMethodInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/java/org/skywalking/apm/plugin/mongodb/v3/MongoDBMethodInterceptorTest.java
index 3304f9f2441a2e97fe8a7aa3beeb243f34c933de..53e53881b32c8663fef6123bbfd96e5636967b22 100644
--- a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/java/org/skywalking/apm/plugin/mongodb/v3/MongoDBMethodInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/java/org/skywalking/apm/plugin/mongodb/v3/MongoDBMethodInterceptorTest.java
@@ -23,8 +23,6 @@ import org.skywalking.apm.sniffer.mock.context.MockTracerContextListener;
import org.skywalking.apm.sniffer.mock.context.SegmentAssert;
import org.skywalking.apm.sniffer.mock.trace.SpanLogReader;
import org.skywalking.apm.sniffer.mock.trace.tags.StringTagReader;
-import org.skywalking.apm.agent.core.context.trace.LogData;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.trace.TraceSegment;
import org.skywalking.apm.agent.core.context.tag.Tags;
diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/java/org/skywalking/apm/plugin/mongodb/v3/MongoDBWriteMethodInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/java/org/skywalking/apm/plugin/mongodb/v3/MongoDBWriteMethodInterceptorTest.java
index 70ffcc2d9eb2be1ce1249c5a5ce8b5fbd473ea06..6b306bd6d63880fcfbad9aab68f55b4811b00f0c 100644
--- a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/java/org/skywalking/apm/plugin/mongodb/v3/MongoDBWriteMethodInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/java/org/skywalking/apm/plugin/mongodb/v3/MongoDBWriteMethodInterceptorTest.java
@@ -24,8 +24,6 @@ import org.skywalking.apm.sniffer.mock.context.MockTracerContextListener;
import org.skywalking.apm.sniffer.mock.context.SegmentAssert;
import org.skywalking.apm.sniffer.mock.trace.SpanLogReader;
import org.skywalking.apm.sniffer.mock.trace.tags.StringTagReader;
-import org.skywalking.apm.agent.core.context.trace.LogData;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.trace.TraceSegment;
import org.skywalking.apm.agent.core.context.tag.Tags;
diff --git a/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/java/org/skywalking/apm/plugin/motan/MotanConsumerInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/java/org/skywalking/apm/plugin/motan/MotanConsumerInterceptorTest.java
index 1d6d6157b0c0e127c8a4493e5377ac93040e44a0..4d8db81684fe99b2943b80038aad58dc0868d121 100644
--- a/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/java/org/skywalking/apm/plugin/motan/MotanConsumerInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/java/org/skywalking/apm/plugin/motan/MotanConsumerInterceptorTest.java
@@ -19,8 +19,6 @@ import org.skywalking.apm.sniffer.mock.context.MockTracerContextListener;
import org.skywalking.apm.sniffer.mock.context.SegmentAssert;
import org.skywalking.apm.sniffer.mock.trace.SpanLogReader;
import org.skywalking.apm.sniffer.mock.trace.tags.StringTagReader;
-import org.skywalking.apm.agent.core.context.trace.LogData;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.trace.TraceSegment;
import org.skywalking.apm.agent.core.context.tag.Tags;
diff --git a/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/java/org/skywalking/apm/plugin/motan/MotanProviderInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/java/org/skywalking/apm/plugin/motan/MotanProviderInterceptorTest.java
index 5906826b65f6e5a60abb64079b44eb1d32780420..e659f7725285c61378b19aef2d8cdc3c9a03a967 100644
--- a/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/java/org/skywalking/apm/plugin/motan/MotanProviderInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/java/org/skywalking/apm/plugin/motan/MotanProviderInterceptorTest.java
@@ -21,8 +21,6 @@ import org.skywalking.apm.sniffer.mock.context.MockTracerContextListener;
import org.skywalking.apm.sniffer.mock.context.SegmentAssert;
import org.skywalking.apm.sniffer.mock.trace.SpanLogReader;
import org.skywalking.apm.sniffer.mock.trace.tags.StringTagReader;
-import org.skywalking.apm.agent.core.context.trace.LogData;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.trace.TraceSegment;
import org.skywalking.apm.agent.core.context.trace.TraceSegmentRef;
import org.skywalking.apm.agent.core.context.tag.Tags;
diff --git a/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/main/java/org/skywalking/apm/plugin/okhttp/v3/RealCallInterceptor.java b/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/main/java/org/skywalking/apm/plugin/okhttp/v3/RealCallInterceptor.java
index fc57eaf86019821f48af46470b79e504aff960ae..3e97514e92df844fc49f7cffa04b2229aea14305 100644
--- a/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/main/java/org/skywalking/apm/plugin/okhttp/v3/RealCallInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/main/java/org/skywalking/apm/plugin/okhttp/v3/RealCallInterceptor.java
@@ -11,7 +11,6 @@ import org.skywalking.apm.agent.core.context.ContextCarrier;
import org.skywalking.apm.agent.core.context.ContextManager;
import org.skywalking.apm.agent.core.context.tag.Tags;
import org.skywalking.apm.agent.core.context.trace.AbstractSpan;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.plugin.interceptor.EnhancedClassInstanceContext;
import org.skywalking.apm.agent.core.plugin.interceptor.enhance.ConstructorInvokeContext;
import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor;
diff --git a/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/test/java/org/skywalking/apm/plugin/okhttp/v3/RealCallInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/test/java/org/skywalking/apm/plugin/okhttp/v3/RealCallInterceptorTest.java
index 329f2db3fc756fe1f5ea9d53bb48b27885907887..b94f8c5c77ac765b745123c280d7b8e27023c78f 100644
--- a/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/test/java/org/skywalking/apm/plugin/okhttp/v3/RealCallInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/test/java/org/skywalking/apm/plugin/okhttp/v3/RealCallInterceptorTest.java
@@ -20,7 +20,6 @@ import org.skywalking.apm.sniffer.mock.context.SegmentAssert;
import org.skywalking.apm.sniffer.mock.trace.SpanLogReader;
import org.skywalking.apm.sniffer.mock.trace.tags.BooleanTagReader;
import org.skywalking.apm.sniffer.mock.trace.tags.StringTagReader;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.trace.TraceSegment;
import org.skywalking.apm.agent.core.context.tag.Tags;
diff --git a/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/src/test/java/org/skywalking/apm/plugin/resin/v3/ResinV3InterceptorTest.java b/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/src/test/java/org/skywalking/apm/plugin/resin/v3/ResinV3InterceptorTest.java
index 04284e11633fad9bf7e3e3bab5a57f43903d19ea..68724d88d8f7b76dc5503dacfd765d104a426d76 100644
--- a/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/src/test/java/org/skywalking/apm/plugin/resin/v3/ResinV3InterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/src/test/java/org/skywalking/apm/plugin/resin/v3/ResinV3InterceptorTest.java
@@ -20,8 +20,6 @@ import org.skywalking.apm.sniffer.mock.context.SegmentAssert;
import org.skywalking.apm.sniffer.mock.trace.SpanLogReader;
import org.skywalking.apm.sniffer.mock.trace.tags.IntTagReader;
import org.skywalking.apm.sniffer.mock.trace.tags.StringTagReader;
-import org.skywalking.apm.agent.core.context.trace.LogData;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.trace.TraceSegment;
import org.skywalking.apm.agent.core.context.trace.TraceSegmentRef;
import org.skywalking.apm.agent.core.context.tag.Tags;
diff --git a/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/src/test/java/org/skywalking/apm/plugin/resin/v4/ResinV4InterceptorTest.java b/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/src/test/java/org/skywalking/apm/plugin/resin/v4/ResinV4InterceptorTest.java
index dc389b7607dea8e10c01ccc15553c05b4454da59..5e682a8ebf321ec08a98ca2ed5dd2ac94d3030d7 100644
--- a/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/src/test/java/org/skywalking/apm/plugin/resin/v4/ResinV4InterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/src/test/java/org/skywalking/apm/plugin/resin/v4/ResinV4InterceptorTest.java
@@ -20,8 +20,6 @@ import org.skywalking.apm.sniffer.mock.context.SegmentAssert;
import org.skywalking.apm.sniffer.mock.trace.SpanLogReader;
import org.skywalking.apm.sniffer.mock.trace.tags.IntTagReader;
import org.skywalking.apm.sniffer.mock.trace.tags.StringTagReader;
-import org.skywalking.apm.agent.core.context.trace.LogData;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.trace.TraceSegment;
import org.skywalking.apm.agent.core.context.trace.TraceSegmentRef;
import org.skywalking.apm.agent.core.context.tag.Tags;
diff --git a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/test/java/org/skywalking/apm/plugin/tomcat78x/TomcatInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/test/java/org/skywalking/apm/plugin/tomcat78x/TomcatInterceptorTest.java
index 48b7ca3622ca5f68ebf5d0fa8c168636051b5c1f..ce7fc8ecae52669f53e130701f32c60abf399cbf 100644
--- a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/test/java/org/skywalking/apm/plugin/tomcat78x/TomcatInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/test/java/org/skywalking/apm/plugin/tomcat78x/TomcatInterceptorTest.java
@@ -20,8 +20,6 @@ import org.skywalking.apm.sniffer.mock.context.SegmentAssert;
import org.skywalking.apm.sniffer.mock.trace.SpanLogReader;
import org.skywalking.apm.sniffer.mock.trace.tags.IntTagReader;
import org.skywalking.apm.sniffer.mock.trace.tags.StringTagReader;
-import org.skywalking.apm.agent.core.context.trace.LogData;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.trace.TraceSegment;
import org.skywalking.apm.agent.core.context.trace.TraceSegmentRef;
import org.skywalking.apm.agent.core.context.tag.Tags;
diff --git a/apm-sniffer/apm-sniffer-mock/src/main/java/org/skywalking/apm/sniffer/mock/trace/SpanLogReader.java b/apm-sniffer/apm-sniffer-mock/src/main/java/org/skywalking/apm/sniffer/mock/trace/SpanLogReader.java
index d1b01eff07d35bfb12d390c0f56f2042afa42315..29bd4b7c54e323abf92ff6fc257003a3a252673a 100644
--- a/apm-sniffer/apm-sniffer-mock/src/main/java/org/skywalking/apm/sniffer/mock/trace/SpanLogReader.java
+++ b/apm-sniffer/apm-sniffer-mock/src/main/java/org/skywalking/apm/sniffer/mock/trace/SpanLogReader.java
@@ -2,8 +2,6 @@ package org.skywalking.apm.sniffer.mock.trace;
import java.lang.reflect.Field;
import java.util.List;
-import org.skywalking.apm.agent.core.context.trace.LogData;
-import org.skywalking.apm.agent.core.context.trace.Span;
/**
* @author wusheng
diff --git a/apm-sniffer/apm-sniffer-mock/src/main/java/org/skywalking/apm/sniffer/mock/trace/tags/BooleanTagReader.java b/apm-sniffer/apm-sniffer-mock/src/main/java/org/skywalking/apm/sniffer/mock/trace/tags/BooleanTagReader.java
index e7043f7e367aa71445f9c49f0a0ecc4e3a4ef1b3..52543fc9e1220dbd1c596ccfb4e9f1179c13044a 100644
--- a/apm-sniffer/apm-sniffer-mock/src/main/java/org/skywalking/apm/sniffer/mock/trace/tags/BooleanTagReader.java
+++ b/apm-sniffer/apm-sniffer-mock/src/main/java/org/skywalking/apm/sniffer/mock/trace/tags/BooleanTagReader.java
@@ -2,7 +2,6 @@ package org.skywalking.apm.sniffer.mock.trace.tags;
import java.lang.reflect.Field;
import java.util.List;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.tag.BooleanTag;
import org.skywalking.apm.agent.core.context.tag.BooleanTagItem;
diff --git a/apm-sniffer/apm-sniffer-mock/src/main/java/org/skywalking/apm/sniffer/mock/trace/tags/IntTagReader.java b/apm-sniffer/apm-sniffer-mock/src/main/java/org/skywalking/apm/sniffer/mock/trace/tags/IntTagReader.java
index 65ddb76b5abbb17ab0a9ee553d0d3226ed584728..53fcc396ca7b7e033f7079fab78ff21bfd3dd52a 100644
--- a/apm-sniffer/apm-sniffer-mock/src/main/java/org/skywalking/apm/sniffer/mock/trace/tags/IntTagReader.java
+++ b/apm-sniffer/apm-sniffer-mock/src/main/java/org/skywalking/apm/sniffer/mock/trace/tags/IntTagReader.java
@@ -2,7 +2,6 @@ package org.skywalking.apm.sniffer.mock.trace.tags;
import java.lang.reflect.Field;
import java.util.List;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.tag.IntTag;
import org.skywalking.apm.agent.core.context.tag.IntTagItem;
diff --git a/apm-sniffer/apm-sniffer-mock/src/main/java/org/skywalking/apm/sniffer/mock/trace/tags/StringTagReader.java b/apm-sniffer/apm-sniffer-mock/src/main/java/org/skywalking/apm/sniffer/mock/trace/tags/StringTagReader.java
index 5baa48fbe06b3d583262f2f46c1b966c41001432..d36be00d935de1589c6a4cdf7488b2bdcd8672c5 100644
--- a/apm-sniffer/apm-sniffer-mock/src/main/java/org/skywalking/apm/sniffer/mock/trace/tags/StringTagReader.java
+++ b/apm-sniffer/apm-sniffer-mock/src/main/java/org/skywalking/apm/sniffer/mock/trace/tags/StringTagReader.java
@@ -2,7 +2,6 @@ package org.skywalking.apm.sniffer.mock.trace.tags;
import java.lang.reflect.Field;
import java.util.List;
-import org.skywalking.apm.agent.core.context.trace.Span;
import org.skywalking.apm.agent.core.context.tag.StringTag;
import org.skywalking.apm.agent.core.context.tag.StringTagItem;
diff --git a/pom.xml b/pom.xml
index 6a9919157bb29ee75c4da4a03246bf56ae78cf92..8b5e3094ca11c46b8808fd2973f97dd854ab84d7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -72,12 +72,6 @@
-
- com.google.code.gson
- gson
- 2.8.0
-
-
junit
junit