package org.skywalking.apm.sniffer.mock.trace; import org.skywalking.apm.agent.core.context.TracerContext; import org.skywalking.apm.sniffer.mock.context.MockTracerContextListener; import org.skywalking.apm.sniffer.mock.trace.builders.trace.*; import org.skywalking.apm.trace.TraceSegment; /** * The <code>TraceSegmentBuilderFactory</code> contains all {@link TraceSegmentBuilder} implementations. All the * implementations can build a true {@link TraceSegment} object, and contain all necessary spans, with all tags/events, * all refs. * <p> * Created by wusheng on 2017/2/20. */ public enum TraceSegmentBuilderFactory { INSTANCE; /** * @see {@link SingleTomcat200TraceBuilder} */ public TraceSegment singleTomcat200Trace() { return this.build(SingleTomcat200TraceBuilder.INSTANCE); } /** * @see {@link SingleTomcat404TraceBuilder} */ public TraceSegment singleTomcat404Trace() { return this.build(SingleTomcat404TraceBuilder.INSTANCE); } /** * @see {@link SingleTomcat500TraceBuilder} */ 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 { TracerContext.ListenerManager.add(listener); return builder.build(listener); } finally { TracerContext.ListenerManager.remove(listener); } } }