From acaf9e5116450e013047af14aac457e3a420785e Mon Sep 17 00:00:00 2001 From: Guillaume Polaert Date: Mon, 17 Jul 2017 14:08:53 +0200 Subject: [PATCH] Adding async examples --- .../async-tracing/async-tracing.gradle | 7 +- .../com/datadoghq/trace/AsyncExample.java | 69 +++++++++++++++++++ .../datadoghq/trace/AsyncExampleReactive.java | 54 +++++++++++++++ .../src/main/resources/logback.xml | 16 +++++ .../java/com/datadoghq/trace/DDBaseSpan.java | 6 +- .../com/datadoghq/trace/DDSpanContext.java | 27 ++++---- 6 files changed, 163 insertions(+), 16 deletions(-) create mode 100644 dd-trace-examples/async-tracing/src/main/java/com/datadoghq/trace/AsyncExample.java create mode 100644 dd-trace-examples/async-tracing/src/main/java/com/datadoghq/trace/AsyncExampleReactive.java create mode 100644 dd-trace-examples/async-tracing/src/main/resources/logback.xml diff --git a/dd-trace-examples/async-tracing/async-tracing.gradle b/dd-trace-examples/async-tracing/async-tracing.gradle index 163686ea43..4b5cff5219 100644 --- a/dd-trace-examples/async-tracing/async-tracing.gradle +++ b/dd-trace-examples/async-tracing/async-tracing.gradle @@ -3,6 +3,9 @@ apply from: "${rootDir}/gradle/jacoco.gradle" description = 'async-tracing' dependencies { - compile project(':dd-trace') - compile group: 'io.opentracing.contrib', name: 'opentracing-spanmanager', version: '0.0.5' + compile project(':dd-trace') + compile group: 'io.opentracing.contrib', name: 'opentracing-spanmanager', version: '0.0.5' + compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3' + compile group:'io.reactivex.rxjava2', name:'rxjava', version:'2.1.1' + } diff --git a/dd-trace-examples/async-tracing/src/main/java/com/datadoghq/trace/AsyncExample.java b/dd-trace-examples/async-tracing/src/main/java/com/datadoghq/trace/AsyncExample.java new file mode 100644 index 0000000000..2b804b92e6 --- /dev/null +++ b/dd-trace-examples/async-tracing/src/main/java/com/datadoghq/trace/AsyncExample.java @@ -0,0 +1,69 @@ +package com.datadoghq.trace; + +import com.datadoghq.trace.sampling.AllSampler; +import com.datadoghq.trace.writer.DDAgentWriter; +import com.datadoghq.trace.writer.DDApi; +import io.opentracing.ActiveSpan; +import io.opentracing.Tracer; +import io.opentracing.util.GlobalTracer; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; + +public class AsyncExample { + + private static ExecutorService ex = Executors.newFixedThreadPool(1); + + public static Integer bar() throws Exception { + + try (ActiveSpan __ = GlobalTracer.get() + .buildSpan("bar") + .startActive()) { + System.out.println("bar"); + Thread.sleep(1000); + } + + return 42; + } + + public static Future foo() throws Exception { + + try (ActiveSpan span = GlobalTracer.get() + .buildSpan("foo") + .startActive()) { + + System.out.println("foo"); + Thread.sleep(500); + + final ActiveSpan.Continuation cont = span.capture(); + + Future future = ex.submit(() -> { + try (ActiveSpan __ = cont.activate()) { + + return bar(); + } + }); + + + + return future; + + + } + } + + public static void main(String[] args) throws Exception { + + DDAgentWriter writer = new DDAgentWriter(new DDApi("localhost", 8126)); + Tracer tracer = new DDTracer("dd-trace-test-app", writer, new AllSampler()); +// Tracer tracer = new DDTracer(new LoggingWriter(), new AllSampler()); + GlobalTracer.register(tracer); + + System.out.printf("%d%n", foo().get()); + + writer.close(); + ex.shutdownNow(); + + } + +} diff --git a/dd-trace-examples/async-tracing/src/main/java/com/datadoghq/trace/AsyncExampleReactive.java b/dd-trace-examples/async-tracing/src/main/java/com/datadoghq/trace/AsyncExampleReactive.java new file mode 100644 index 0000000000..b74b43cace --- /dev/null +++ b/dd-trace-examples/async-tracing/src/main/java/com/datadoghq/trace/AsyncExampleReactive.java @@ -0,0 +1,54 @@ +package com.datadoghq.trace; + +import com.datadoghq.trace.sampling.AllSampler; +import com.datadoghq.trace.writer.DDAgentWriter; +import com.datadoghq.trace.writer.DDApi; +import io.opentracing.ActiveSpan; +import io.opentracing.Tracer; +import io.opentracing.util.GlobalTracer; +import io.reactivex.Observable; + + +public class AsyncExampleReactive { + + + public static Integer bar() throws Exception { + try (ActiveSpan __ = GlobalTracer.get() + .buildSpan("bar") + .startActive()) { + System.out.println("bar"); + Thread.sleep(1000); + } + + return 42; + } + + public static Observable foo() throws Exception { + try (ActiveSpan span = GlobalTracer.get() + .buildSpan("foo") + .startActive()) { + + System.out.println("foo"); + Thread.sleep(500); + + final ActiveSpan.Continuation cont = span.capture(); + return Observable.fromCallable(() -> { + try (ActiveSpan __ = cont.activate()) { + return bar(); + } + }); + } + } + + public static void main(String[] args) throws Exception { + DDAgentWriter writer = new DDAgentWriter(new DDApi("localhost", 8126)); + Tracer tracer = new DDTracer("dd-trace-test-app", writer, new AllSampler()); + GlobalTracer.register(tracer); + + foo().subscribe(System.out::println); + + writer.close(); + } + +} + diff --git a/dd-trace-examples/async-tracing/src/main/resources/logback.xml b/dd-trace-examples/async-tracing/src/main/resources/logback.xml new file mode 100644 index 0000000000..ef7204c320 --- /dev/null +++ b/dd-trace-examples/async-tracing/src/main/resources/logback.xml @@ -0,0 +1,16 @@ + + + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + diff --git a/dd-trace/src/main/java/com/datadoghq/trace/DDBaseSpan.java b/dd-trace/src/main/java/com/datadoghq/trace/DDBaseSpan.java index 46d094281f..2446f7da95 100644 --- a/dd-trace/src/main/java/com/datadoghq/trace/DDBaseSpan.java +++ b/dd-trace/src/main/java/com/datadoghq/trace/DDBaseSpan.java @@ -304,6 +304,10 @@ public abstract class DDBaseSpan implements BaseSpan { @Override public String toString() { - return context.toString(); + return new StringBuilder() + .append(context.toString()) + .append(", duration_ns=") + .append(durationNano) + .toString(); } } diff --git a/dd-trace/src/main/java/com/datadoghq/trace/DDSpanContext.java b/dd-trace/src/main/java/com/datadoghq/trace/DDSpanContext.java index 11cb9a3811..5d7401283d 100644 --- a/dd-trace/src/main/java/com/datadoghq/trace/DDSpanContext.java +++ b/dd-trace/src/main/java/com/datadoghq/trace/DDSpanContext.java @@ -200,19 +200,20 @@ public class DDSpanContext implements io.opentracing.SpanContext { @Override public String toString() { - return "Span [ " - + traceId - + " ] [ " - + spanId - + " | " - + parentId - + " ] [ " - + getServiceName() - + " | " - + getOperationName() - + " | " - + getResourceName() - + " ]"; + return new StringBuilder() + .append("Span [ t_id=") + .append(traceId) + .append(", s_id=") + .append(spanId) + .append(", p_id=") + .append(parentId) + .append("] trace=") + .append(getServiceName()) + .append("/") + .append(getOperationName()) + .append("/") + .append(getResourceName()) + .toString(); } public void setOperationName(String operationName) {