提交 96f6c5fa 编写于 作者: wu-sheng's avatar wu-sheng

Add Tomcat span, and singleTrace mock.

上级 69877b80
......@@ -171,7 +171,7 @@ public final class TracerContext {
/**
* Clear the given {@link TracerContextListener}
*/
static synchronized void remove(TracerContextListener listener){
public static synchronized void remove(TracerContextListener listener){
listeners.remove(listener);
}
}
......
......@@ -48,4 +48,14 @@ public class MockTracerContextListener implements TracerContextListener {
public void clear(){
finishedTraceSegments.clear();
}
/**
* Get {@link TraceSegment} of the given index.
* @param index
* @return
*/
public TraceSegment getFinished(int index){
assertSize(index + 1);
return finishedTraceSegments.get(index);
}
}
package com.a.eye.skywalking.sniffer.mock.trace;
import com.a.eye.skywalking.sniffer.mock.context.MockTracerContextListener;
import com.a.eye.skywalking.trace.TraceSegment;
/**
* Created by wusheng on 2017/2/20.
*/
public interface TraceSegmentBuilder {
TraceSegment build();
TraceSegment build(MockTracerContextListener listener);
}
package com.a.eye.skywalking.sniffer.mock.trace;
import com.a.eye.skywalking.sniffer.mock.trace.builders.SingleTomcat200TraceBuilder;
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.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.trace.TraceSegment;
import java.util.HashMap;
import java.util.Map;
/**
* The <code>TraceSegmentBuilderFactory</code> contains all {@link TraceSegmentBuilder} implementations.
......@@ -14,22 +16,41 @@ import java.util.Map;
public enum TraceSegmentBuilderFactory {
INSTANCE;
private Map<String, TraceSegmentBuilder> allBuilders;
TraceSegmentBuilderFactory(){
allBuilders = new HashMap<String, TraceSegmentBuilder>();
initialize();
/**
* @see {@link SingleTomcat200TraceBuilder}
*
* @return
*/
public TraceSegment singleTomcat200Trace(){
return this.build(SingleTomcat200TraceBuilder.INSTANCE);
}
public TraceSegment singleTomcat200Trace(){
return allBuilders.get(SingleTomcat200TraceBuilder.INSTANCE).build();
/**
* @see {@link SingleTomcat404TraceBuilder}
*
* @return
*/
public TraceSegment singleTomcat404Trace(){
return this.build(SingleTomcat404TraceBuilder.INSTANCE);
}
private void initialize(){
initBuilder(SingleTomcat200TraceBuilder.INSTANCE);
/**
* @see {@link SingleTomcat500TraceBuilder}
*
* @return
*/
public TraceSegment singleTomcat500Trace(){
return this.build(SingleTomcat500TraceBuilder.INSTANCE);
}
private void initBuilder(TraceSegmentBuilder builder){
allBuilders.put(builder.toString(), builder);
private TraceSegment build(TraceSegmentBuilder builder){
MockTracerContextListener listener = new MockTracerContextListener();
try{
TracerContext.ListenerManager.add(listener);
return builder.build(listener);
}finally{
TracerContext.ListenerManager.remove(listener);
}
}
}
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>TomcatSpanGenerator</code> generate all possible spans, by tracing Tomcat.
*
* Created by wusheng on 2017/2/20.
*/
public enum TomcatSpanGenerator {
INSTANCE;
/**
* When tomcat response 200.
*/
public void on200(){
Span webSpan = ContextManager.INSTANCE.createSpan("/web/serviceA");
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.STATUS_CODE.set(webSpan, 200);
ContextManager.INSTANCE.stopSpan(webSpan);
}
/**
* When tomcat response 404.
*/
public void on404(){
Span webSpan = ContextManager.INSTANCE.createSpan("/web/service/unknown");
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.STATUS_CODE.set(webSpan, 404);
Tags.ERROR.set(webSpan,true);
ContextManager.INSTANCE.stopSpan(webSpan);
}
/**
* When tomcat response 500.
*/
public void on500(){
Span webSpan = ContextManager.INSTANCE.createSpan("/web/error/service");
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.STATUS_CODE.set(webSpan, 500);
Tags.ERROR.set(webSpan,true);
webSpan.log(new NumberFormatException("Can't convert 'abc' to int."));
ContextManager.INSTANCE.stopSpan(webSpan);
}
}
package com.a.eye.skywalking.sniffer.mock.trace.builders;
package com.a.eye.skywalking.sniffer.mock.trace.builders.trace;
import com.a.eye.skywalking.api.context.ContextManager;
import com.a.eye.skywalking.sniffer.mock.context.MockTracerContextListener;
import com.a.eye.skywalking.sniffer.mock.trace.TraceSegmentBuilder;
import com.a.eye.skywalking.trace.Span;
import com.a.eye.skywalking.sniffer.mock.trace.builders.span.TomcatSpanGenerator;
import com.a.eye.skywalking.trace.TraceSegment;
import com.a.eye.skywalking.trace.tag.Tags;
/**
* A Trace contains only one span, which represent a tomcat server side span.
......@@ -14,14 +13,8 @@ import com.a.eye.skywalking.trace.tag.Tags;
public enum SingleTomcat200TraceBuilder implements TraceSegmentBuilder {
INSTANCE;
@Override public TraceSegment build() {
Span webSpan = ContextManager.INSTANCE.createSpan("/web/serviceA");
{
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.STATUS_CODE.set(webSpan, 200);
}
return null;
@Override public TraceSegment build(MockTracerContextListener listener) {
TomcatSpanGenerator.INSTANCE.on200();
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.TomcatSpanGenerator;
import com.a.eye.skywalking.trace.TraceSegment;
/**
* A Trace contains only one span, which represent a tomcat server side span.
*
* Created by wusheng on 2017/2/20.
*/
public enum SingleTomcat404TraceBuilder implements TraceSegmentBuilder {
INSTANCE;
@Override public TraceSegment build(MockTracerContextListener listener) {
TomcatSpanGenerator.INSTANCE.on404();
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.TomcatSpanGenerator;
import com.a.eye.skywalking.trace.TraceSegment;
/**
* A Trace contains only one span, which represent a tomcat server side span.
*
* Created by wusheng on 2017/2/20.
*/
public enum SingleTomcat500TraceBuilder implements TraceSegmentBuilder {
INSTANCE;
@Override public TraceSegment build(MockTracerContextListener listener) {
TomcatSpanGenerator.INSTANCE.on500();
return listener.getFinished(0);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册