diff --git a/README.md b/README.md index bd8c078..5706e65 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,11 @@ Tracer tracer = ... ### RxJava 1 +```java +// Enable RxJava tracing: +TracingRxJavaUtils.enableTracing(tracer); +``` + #### Subscriber ```java diff --git a/opentracing-rxjava-1/src/main/java/io/opentracing/rxjava/TracingAction.java b/opentracing-rxjava-1/src/main/java/io/opentracing/rxjava/TracingAction.java new file mode 100644 index 0000000..177ab72 --- /dev/null +++ b/opentracing-rxjava-1/src/main/java/io/opentracing/rxjava/TracingAction.java @@ -0,0 +1,40 @@ +package io.opentracing.rxjava; + +import io.opentracing.ActiveSpan; +import io.opentracing.ActiveSpan.Continuation; +import io.opentracing.Tracer; +import rx.functions.Action0; + +class TracingAction implements Action0 { + + private final Action0 action0; + private final Continuation continuation; + + TracingAction(Action0 action0, Tracer tracer) { + this.action0 = action0; + + if (tracer.activeSpan() != null) { + continuation = tracer.activeSpan().capture(); + } else { + continuation = null; + } + } + + @Override + public void call() { + ActiveSpan span = null; + if (continuation != null) { + span = continuation.activate(); + } + + try { + action0.call(); + } finally { + if (span != null) { + span.deactivate(); + } + } + } +} + + diff --git a/opentracing-rxjava-1/src/main/java/io/opentracing/rxjava/TracingRxJavaUtils.java b/opentracing-rxjava-1/src/main/java/io/opentracing/rxjava/TracingRxJavaUtils.java new file mode 100644 index 0000000..857e95d --- /dev/null +++ b/opentracing-rxjava-1/src/main/java/io/opentracing/rxjava/TracingRxJavaUtils.java @@ -0,0 +1,20 @@ +package io.opentracing.rxjava; + +import io.opentracing.Tracer; +import rx.functions.Action0; +import rx.functions.Func1; +import rx.plugins.RxJavaHooks; + +public class TracingRxJavaUtils { + + @SuppressWarnings("unchecked") + public static void enableTracing(final Tracer tracer) { + + RxJavaHooks.setOnScheduleAction(new Func1() { + @Override + public Action0 call(final Action0 action0) { + return new TracingAction(action0, tracer); + } + }); + } +} diff --git a/opentracing-rxjava-1/src/test/java/io/opentracing/rxjava/TracingActionTest.java b/opentracing-rxjava-1/src/test/java/io/opentracing/rxjava/TracingActionTest.java index 6909b71..277b0fb 100644 --- a/opentracing-rxjava-1/src/test/java/io/opentracing/rxjava/TracingActionTest.java +++ b/opentracing-rxjava-1/src/test/java/io/opentracing/rxjava/TracingActionTest.java @@ -15,6 +15,7 @@ import java.util.List; import java.util.concurrent.TimeUnit; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import rx.Observable; import rx.functions.Action1; @@ -24,6 +25,11 @@ public class TracingActionTest { private static final MockTracer mockTracer = new MockTracer(new ThreadLocalActiveSpanSource(), MockTracer.Propagator.TEXT_MAP); + @BeforeClass + public static void beforeClass() { + TracingRxJavaUtils.enableTracing(mockTracer); + } + @Before public void before() throws Exception { mockTracer.reset(); diff --git a/opentracing-rxjava-1/src/test/java/io/opentracing/rxjava/TracingObserverTest.java b/opentracing-rxjava-1/src/test/java/io/opentracing/rxjava/TracingObserverTest.java index 5080124..f26e9df 100644 --- a/opentracing-rxjava-1/src/test/java/io/opentracing/rxjava/TracingObserverTest.java +++ b/opentracing-rxjava-1/src/test/java/io/opentracing/rxjava/TracingObserverTest.java @@ -15,6 +15,7 @@ import java.util.List; import java.util.concurrent.TimeUnit; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import rx.Observable; import rx.Observer; @@ -24,6 +25,11 @@ public class TracingObserverTest { private static final MockTracer mockTracer = new MockTracer(new ThreadLocalActiveSpanSource(), MockTracer.Propagator.TEXT_MAP); + @BeforeClass + public static void beforeClass() { + TracingRxJavaUtils.enableTracing(mockTracer); + } + @Before public void before() throws Exception { mockTracer.reset(); diff --git a/opentracing-rxjava-1/src/test/java/io/opentracing/rxjava/TracingSubscriberTest.java b/opentracing-rxjava-1/src/test/java/io/opentracing/rxjava/TracingSubscriberTest.java index 3c43041..697a8f2 100644 --- a/opentracing-rxjava-1/src/test/java/io/opentracing/rxjava/TracingSubscriberTest.java +++ b/opentracing-rxjava-1/src/test/java/io/opentracing/rxjava/TracingSubscriberTest.java @@ -20,6 +20,7 @@ import java.util.List; import java.util.concurrent.TimeUnit; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import rx.Observable; import rx.Subscriber; @@ -29,6 +30,11 @@ public class TracingSubscriberTest { private static final MockTracer mockTracer = new MockTracer(new ThreadLocalActiveSpanSource(), MockTracer.Propagator.TEXT_MAP); + @BeforeClass + public static void beforeClass() { + TracingRxJavaUtils.enableTracing(mockTracer); + } + @Before public void before() throws Exception { mockTracer.reset();