Add two trace segment mock API. 1.Tomcat-> Dubbo 2.Dubbo -> MySQL
This commit is contained in:
parent
52883b8f43
commit
082bcbc21b
|
|
@ -9,7 +9,7 @@
|
|||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>skywalking-sniffer-mock</artifactId>
|
||||
<description>This is a sniffer mock module, test for test-dependency, only.</description>
|
||||
<description>This is a sniffer mock module. Simulate a sniffer, assemble one or more trace segments. Test-dependency, only.</description>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
|
|
|
|||
|
|
@ -2,9 +2,11 @@ package com.a.eye.skywalking.sniffer.mock.trace;
|
|||
|
||||
import com.a.eye.skywalking.api.context.TracerContext;
|
||||
import com.a.eye.skywalking.sniffer.mock.context.MockTracerContextListener;
|
||||
import com.a.eye.skywalking.sniffer.mock.trace.builders.trace.DubboServerMysqlTraceBuilder;
|
||||
import com.a.eye.skywalking.sniffer.mock.trace.builders.trace.SingleTomcat200TraceBuilder;
|
||||
import com.a.eye.skywalking.sniffer.mock.trace.builders.trace.SingleTomcat404TraceBuilder;
|
||||
import com.a.eye.skywalking.sniffer.mock.trace.builders.trace.SingleTomcat500TraceBuilder;
|
||||
import com.a.eye.skywalking.sniffer.mock.trace.builders.trace.TomcatDubboClientTraceBuilder;
|
||||
import com.a.eye.skywalking.trace.TraceSegment;
|
||||
|
||||
/**
|
||||
|
|
@ -19,7 +21,6 @@ public enum TraceSegmentBuilderFactory {
|
|||
/**
|
||||
* @see {@link SingleTomcat200TraceBuilder}
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public TraceSegment singleTomcat200Trace(){
|
||||
return this.build(SingleTomcat200TraceBuilder.INSTANCE);
|
||||
|
|
@ -28,7 +29,6 @@ public enum TraceSegmentBuilderFactory {
|
|||
/**
|
||||
* @see {@link SingleTomcat404TraceBuilder}
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public TraceSegment singleTomcat404Trace(){
|
||||
return this.build(SingleTomcat404TraceBuilder.INSTANCE);
|
||||
|
|
@ -37,12 +37,25 @@ public enum TraceSegmentBuilderFactory {
|
|||
/**
|
||||
* @see {@link SingleTomcat500TraceBuilder}
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public TraceSegment singleTomcat500Trace(){
|
||||
return this.build(SingleTomcat500TraceBuilder.INSTANCE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see {@link TomcatDubboClientTraceBuilder}
|
||||
*/
|
||||
public TraceSegment traceOf_Tomcat_DubboClient(){
|
||||
return this.build(TomcatDubboClientTraceBuilder.INSTANCE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see {@link DubboServerMysqlTraceBuilder}
|
||||
*/
|
||||
public TraceSegment traceOf_DubboServer_MySQL() {
|
||||
return this.build(DubboServerMysqlTraceBuilder.INSTANCE);
|
||||
}
|
||||
|
||||
private TraceSegment build(TraceSegmentBuilder builder){
|
||||
MockTracerContextListener listener = new MockTracerContextListener();
|
||||
try{
|
||||
|
|
|
|||
|
|
@ -0,0 +1,44 @@
|
|||
package com.a.eye.skywalking.sniffer.mock.trace.builders.span;
|
||||
|
||||
import com.a.eye.skywalking.api.context.ContextManager;
|
||||
import com.a.eye.skywalking.trace.Span;
|
||||
import com.a.eye.skywalking.trace.tag.Tags;
|
||||
|
||||
/**
|
||||
* The <code>DubboSpanGenerator</code> generates all possible spans, by tracing Dubbo rpc.
|
||||
* Including client/server side span.
|
||||
*
|
||||
* @author wusheng
|
||||
*/
|
||||
public class DubboSpanGenerator {
|
||||
public static class Client extends SpanGeneration{
|
||||
@Override protected void before() {
|
||||
Span span = ContextManager.INSTANCE.createSpan("/default_rpc/com.a.eye.skywalking.test.persistence.PersistenceService.query");
|
||||
Tags.COMPONENT.set(span, "Dubbo");
|
||||
Tags.URL.set(span, "rest://192.168.1.8:20880/default_rpc/com.a.eye.skywalking.test.persistence.PersistenceService.query(String)");
|
||||
Tags.SPAN_KIND.set(span, Tags.SPAN_KIND_SERVER);
|
||||
Tags.PEER_HOST.set(span, "192.168.1.8");
|
||||
Tags.PEER_PORT.set(span, 20880);
|
||||
Tags.SPAN_LAYER.asHttp(span);
|
||||
}
|
||||
|
||||
@Override protected void after() {
|
||||
ContextManager.INSTANCE.stopSpan();
|
||||
}
|
||||
}
|
||||
|
||||
public static class Server extends SpanGeneration{
|
||||
@Override protected void before() {
|
||||
Span span = ContextManager.INSTANCE.createSpan("/default_rpc/com.a.eye.skywalking.test.persistence.PersistenceService.query");
|
||||
Tags.COMPONENT.set(span, "Dubbo");
|
||||
Tags.URL.set(span, "rest://192.168.1.8:20880/default_rpc/com.a.eye.skywalking.test.persistence.PersistenceService.query(String)");
|
||||
Tags.SPAN_KIND.set(span, Tags.SPAN_KIND_CLIENT);
|
||||
Tags.PEER_HOST.set(span, "10.21.9.35");
|
||||
Tags.SPAN_LAYER.asHttp(span);
|
||||
}
|
||||
|
||||
@Override protected void after() {
|
||||
ContextManager.INSTANCE.stopSpan();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
package com.a.eye.skywalking.sniffer.mock.trace.builders.span;
|
||||
|
||||
import com.a.eye.skywalking.api.context.ContextManager;
|
||||
import com.a.eye.skywalking.trace.Span;
|
||||
import com.a.eye.skywalking.trace.tag.Tags;
|
||||
|
||||
/**
|
||||
* The <code>MySQLGenerator</code> generates all possible spans, by tracing mysql client access.
|
||||
*
|
||||
* @author wusheng
|
||||
*/
|
||||
public class MySQLGenerator {
|
||||
public static class Query extends SpanGeneration {
|
||||
@Override protected void before() {
|
||||
Span span = ContextManager.INSTANCE.createSpan("mysql/jdbi/statement/executeQuery");
|
||||
Tags.COMPONENT.set(span, "Mysql");
|
||||
Tags.SPAN_KIND.set(span, Tags.SPAN_KIND_CLIENT);
|
||||
Tags.PEER_HOST.set(span, "10.5.34.18");
|
||||
Tags.PEER_PORT.set(span, 30088);
|
||||
Tags.DB_INSTANCE.set(span, "mysql-instance");
|
||||
Tags.DB_STATEMENT.set(span, "select * from users where user_id = 1");
|
||||
Tags.DB_TYPE.set(span, "sql");
|
||||
Tags.SPAN_LAYER.asDB(span);
|
||||
}
|
||||
|
||||
@Override protected void after() {
|
||||
ContextManager.INSTANCE.stopSpan();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,18 +1,20 @@
|
|||
package com.a.eye.skywalking.sniffer.mock.trace.builders.span;
|
||||
|
||||
/**
|
||||
* Created by wusheng on 2017/2/28.
|
||||
* The <code>SpanGeneration</code> implementations can generate several kinds of spans.
|
||||
*
|
||||
* @author wusheng
|
||||
*/
|
||||
public abstract class SpanGeneration {
|
||||
private SpanGeneration next;
|
||||
private SpanGeneration[] next;
|
||||
|
||||
public SpanGeneration build(SpanGeneration next){
|
||||
this.next = next;
|
||||
this.next = new SpanGeneration[]{next};
|
||||
return next;
|
||||
}
|
||||
|
||||
public SpanGeneration build(){
|
||||
return this;
|
||||
public void build(SpanGeneration... next){
|
||||
this.next = next;
|
||||
}
|
||||
|
||||
protected abstract void before();
|
||||
|
|
@ -22,7 +24,9 @@ public abstract class SpanGeneration {
|
|||
public void generate(){
|
||||
this.before();
|
||||
if(next != null){
|
||||
next.generate();
|
||||
for (SpanGeneration generation : next) {
|
||||
generation.generate();
|
||||
}
|
||||
}
|
||||
this.after();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,9 +15,12 @@ public class TomcatSpanGenerator{
|
|||
|
||||
@Override protected void before() {
|
||||
Span webSpan = ContextManager.INSTANCE.createSpan("/web/serviceA");
|
||||
Tags.COMPONENT.set(webSpan, "tomcat");
|
||||
Tags.COMPONENT.set(webSpan, "Tomcat");
|
||||
Tags.URL.set(webSpan, "http://10.21.9.35/web/serviceA");
|
||||
Tags.SPAN_KIND.set(webSpan, Tags.SPAN_KIND_SERVER);
|
||||
Tags.PEER_HOST.set(webSpan, "10.21.9.35");
|
||||
Tags.PEER_PORT.set(webSpan, 80);
|
||||
Tags.SPAN_LAYER.asHttp(webSpan);
|
||||
}
|
||||
|
||||
@Override protected void after() {
|
||||
|
|
@ -32,9 +35,12 @@ public class TomcatSpanGenerator{
|
|||
|
||||
@Override protected void before() {
|
||||
Span webSpan = ContextManager.INSTANCE.createSpan("/web/service/unknown");
|
||||
Tags.COMPONENT.set(webSpan, "tomcat");
|
||||
Tags.COMPONENT.set(webSpan, "Tomcat");
|
||||
Tags.URL.set(webSpan, "http://10.21.9.35/web/unknown");
|
||||
Tags.SPAN_KIND.set(webSpan, Tags.SPAN_KIND_SERVER);
|
||||
Tags.PEER_HOST.set(webSpan, "10.21.9.35");
|
||||
Tags.PEER_PORT.set(webSpan, 80);
|
||||
Tags.SPAN_LAYER.asHttp(webSpan);
|
||||
}
|
||||
|
||||
@Override protected void after() {
|
||||
|
|
@ -49,9 +55,12 @@ public class TomcatSpanGenerator{
|
|||
|
||||
@Override protected void before() {
|
||||
Span webSpan = ContextManager.INSTANCE.createSpan("/web/error/service");
|
||||
Tags.COMPONENT.set(webSpan, "tomcat");
|
||||
Tags.COMPONENT.set(webSpan, "Tomcat");
|
||||
Tags.URL.set(webSpan, "http://10.21.9.35/web/error/service");
|
||||
Tags.SPAN_KIND.set(webSpan, Tags.SPAN_KIND_SERVER);
|
||||
Tags.PEER_HOST.set(webSpan, "10.21.9.35");
|
||||
Tags.PEER_PORT.set(webSpan, 80);
|
||||
Tags.SPAN_LAYER.asHttp(webSpan);
|
||||
}
|
||||
|
||||
@Override protected void after() {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,21 @@
|
|||
package com.a.eye.skywalking.sniffer.mock.trace.builders.trace;
|
||||
|
||||
import com.a.eye.skywalking.sniffer.mock.context.MockTracerContextListener;
|
||||
import com.a.eye.skywalking.sniffer.mock.trace.TraceSegmentBuilder;
|
||||
import com.a.eye.skywalking.sniffer.mock.trace.builders.span.DubboSpanGenerator;
|
||||
import com.a.eye.skywalking.sniffer.mock.trace.builders.span.MySQLGenerator;
|
||||
import com.a.eye.skywalking.trace.TraceSegment;
|
||||
|
||||
/**
|
||||
* @author wusheng
|
||||
*/
|
||||
public enum DubboServerMysqlTraceBuilder implements TraceSegmentBuilder {
|
||||
INSTANCE;
|
||||
|
||||
@Override public TraceSegment build(MockTracerContextListener listener) {
|
||||
DubboSpanGenerator.Server rootSpan = new DubboSpanGenerator.Server();
|
||||
rootSpan.build(new MySQLGenerator.Query());
|
||||
rootSpan.generate();
|
||||
return listener.getFinished(0);
|
||||
}
|
||||
}
|
||||
|
|
@ -14,7 +14,7 @@ public enum SingleTomcat200TraceBuilder implements TraceSegmentBuilder {
|
|||
INSTANCE;
|
||||
|
||||
@Override public TraceSegment build(MockTracerContextListener listener) {
|
||||
TomcatSpanGenerator.ON200.INSTANCE.build().generate();
|
||||
TomcatSpanGenerator.ON200.INSTANCE.generate();
|
||||
return listener.getFinished(0);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ public enum SingleTomcat404TraceBuilder implements TraceSegmentBuilder {
|
|||
INSTANCE;
|
||||
|
||||
@Override public TraceSegment build(MockTracerContextListener listener) {
|
||||
TomcatSpanGenerator.ON404.INSTANCE.build().generate();
|
||||
TomcatSpanGenerator.ON404.INSTANCE.generate();
|
||||
return listener.getFinished(0);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ public enum SingleTomcat500TraceBuilder implements TraceSegmentBuilder {
|
|||
INSTANCE;
|
||||
|
||||
@Override public TraceSegment build(MockTracerContextListener listener) {
|
||||
TomcatSpanGenerator.ON500.INSTANCE.build().generate();
|
||||
TomcatSpanGenerator.ON500.INSTANCE.generate();
|
||||
return listener.getFinished(0);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,25 @@
|
|||
package com.a.eye.skywalking.sniffer.mock.trace.builders.trace;
|
||||
|
||||
import com.a.eye.skywalking.sniffer.mock.context.MockTracerContextListener;
|
||||
import com.a.eye.skywalking.sniffer.mock.trace.TraceSegmentBuilder;
|
||||
import com.a.eye.skywalking.sniffer.mock.trace.builders.span.DubboSpanGenerator;
|
||||
import com.a.eye.skywalking.sniffer.mock.trace.builders.span.TomcatSpanGenerator;
|
||||
import com.a.eye.skywalking.trace.TraceSegment;
|
||||
|
||||
/**
|
||||
* A Trace segment contains two spans with ChildOf relations,
|
||||
* the parent is a Tomcat span,
|
||||
* the child is a Dubbo client span.
|
||||
*
|
||||
* @author wusheng
|
||||
*/
|
||||
public enum TomcatDubboClientTraceBuilder implements TraceSegmentBuilder {
|
||||
INSTANCE;
|
||||
|
||||
@Override public TraceSegment build(MockTracerContextListener listener) {
|
||||
TomcatSpanGenerator.ON200 rootSpan = new TomcatSpanGenerator.ON200();
|
||||
rootSpan.build(new DubboSpanGenerator.Client());
|
||||
rootSpan.generate();
|
||||
return listener.getFinished(0);
|
||||
}
|
||||
}
|
||||
|
|
@ -49,4 +49,18 @@ public class MockTracerContextListenerTestCase {
|
|||
listener.clear();
|
||||
listener.assertValidIndex(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTraceOf_Tomcat_DubboClient(){
|
||||
TraceSegment segment = TraceSegmentBuilderFactory.INSTANCE.traceOf_Tomcat_DubboClient();
|
||||
|
||||
Assert.assertEquals(2, segment.getSpans().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTraceOf_DubboServer_MySQL(){
|
||||
TraceSegment segment = TraceSegmentBuilderFactory.INSTANCE.traceOf_DubboServer_MySQL();
|
||||
|
||||
Assert.assertEquals(2, segment.getSpans().size());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue