提交 082bcbc2 编写于 作者: wu-sheng's avatar wu-sheng

Add two trace segment mock API. 1.Tomcat-> Dubbo 2.Dubbo -> MySQL

上级 52883b8f
......@@ -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{
......
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();
}
}
}
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();
}
}
}
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() {
......
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);
}
}
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());
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册