Play instrumentation cleanup

Simplify error collecting. Use slf4j to log. randomOpenPort util.
This commit is contained in:
Andrew Kent 2018-04-02 17:46:30 -07:00
parent 772872bcb5
commit 5f8a83486a
3 changed files with 26 additions and 24 deletions

View File

@ -17,8 +17,6 @@ import io.opentracing.propagation.Format;
import io.opentracing.propagation.TextMap; import io.opentracing.propagation.TextMap;
import io.opentracing.tag.Tags; import io.opentracing.tag.Tags;
import io.opentracing.util.GlobalTracer; import io.opentracing.util.GlobalTracer;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.*; import java.util.*;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.bytebuddy.agent.builder.AgentBuilder; import net.bytebuddy.agent.builder.AgentBuilder;
@ -175,26 +173,12 @@ public final class PlayInstrumentation extends Instrumenter.Configurable {
public static void onError(final Span span, final Throwable t) { public static void onError(final Span span, final Throwable t) {
Tags.ERROR.set(span, Boolean.TRUE); Tags.ERROR.set(span, Boolean.TRUE);
span.log(logsForException(t)); span.log(Collections.singletonMap("error.object", t));
Tags.HTTP_STATUS.set(span, 500); Tags.HTTP_STATUS.set(span, 500);
} }
public static Map<String, Object> logsForException(Throwable throwable) {
final Map<String, Object> errorLogs = new HashMap<>(4);
errorLogs.put("event", Tags.ERROR.getKey());
errorLogs.put("error.kind", throwable.getClass().getName());
errorLogs.put("error.object", throwable);
errorLogs.put("message", throwable.getMessage());
final StringWriter sw = new StringWriter();
throwable.printStackTrace(new PrintWriter(sw));
errorLogs.put("stack", sw.toString());
return errorLogs;
}
} }
@Slf4j
public static class RequestCallback implements Function1<Result, Result> { public static class RequestCallback implements Function1<Result, Result> {
private final Span span; private final Span span;
@ -208,7 +192,7 @@ public final class PlayInstrumentation extends Instrumenter.Configurable {
try { try {
Tags.HTTP_STATUS.set(span, result.header().status()); Tags.HTTP_STATUS.set(span, result.header().status());
} catch (Throwable t) { } catch (Throwable t) {
LoggerFactory.getLogger(RequestCallback.class).debug("error in play instrumentation", t); log.debug("error in play instrumentation", t);
} }
span.finish(); span.finish();
return result; return result;

View File

@ -1,5 +1,6 @@
import datadog.opentracing.DDSpan import datadog.opentracing.DDSpan
import datadog.trace.agent.test.AgentTestRunner import datadog.trace.agent.test.AgentTestRunner
import datadog.trace.agent.test.TestUtils
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
import play.api.test.TestServer import play.api.test.TestServer
@ -12,11 +13,13 @@ class PlayTest extends AgentTestRunner {
System.setProperty("dd.integration.play.enabled", "true") System.setProperty("dd.integration.play.enabled", "true")
} }
@Shared
int port = TestUtils.randomOpenPort()
@Shared @Shared
TestServer testServer TestServer testServer
def setupSpec() { def setupSpec() {
testServer = Helpers.testServer(9080, PlayTestUtils.buildTestApp()) testServer = Helpers.testServer(port, PlayTestUtils.buildTestApp())
testServer.start() testServer.start()
} }
@ -33,7 +36,7 @@ class PlayTest extends AgentTestRunner {
setup: setup:
OkHttpClient client = new OkHttpClient.Builder().build() OkHttpClient client = new OkHttpClient.Builder().build()
def request = new Request.Builder() def request = new Request.Builder()
.url("http://localhost:9080/helloplay/spock") .url("http://localhost:$port/helloplay/spock")
.header("x-datadog-trace-id", "123") .header("x-datadog-trace-id", "123")
.header("x-datadog-parent-id", "456") .header("x-datadog-parent-id", "456")
.get() .get()
@ -69,7 +72,7 @@ class PlayTest extends AgentTestRunner {
setup: setup:
OkHttpClient client = new OkHttpClient.Builder().build() OkHttpClient client = new OkHttpClient.Builder().build()
def request = new Request.Builder() def request = new Request.Builder()
.url("http://localhost:9080/make-error") .url("http://localhost:$port/make-error")
.get() .get()
.build() .build()
def response = client.newCall(request).execute() def response = client.newCall(request).execute()
@ -96,7 +99,7 @@ class PlayTest extends AgentTestRunner {
setup: setup:
OkHttpClient client = new OkHttpClient.Builder().build() OkHttpClient client = new OkHttpClient.Builder().build()
def request = new Request.Builder() def request = new Request.Builder()
.url("http://localhost:9080/exception") .url("http://localhost:$port/exception")
.get() .get()
.build() .build()
def response = client.newCall(request).execute() def response = client.newCall(request).execute()
@ -126,7 +129,7 @@ class PlayTest extends AgentTestRunner {
setup: setup:
OkHttpClient client = new OkHttpClient.Builder().build() OkHttpClient client = new OkHttpClient.Builder().build()
def request = new Request.Builder() def request = new Request.Builder()
.url("http://localhost:9080/nowhere") .url("http://localhost:$port/nowhere")
.get() .get()
.build() .build()
def response = client.newCall(request).execute() def response = client.newCall(request).execute()

View File

@ -6,6 +6,7 @@ import io.opentracing.Tracer;
import io.opentracing.util.GlobalTracer; import io.opentracing.util.GlobalTracer;
import java.io.*; import java.io.*;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.net.ServerSocket;
import java.net.URL; import java.net.URL;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
@ -160,4 +161,18 @@ public class TestUtils {
jarOutputStream.write(bytes, 0, bytes.length); jarOutputStream.write(bytes, 0, bytes.length);
jarOutputStream.closeEntry(); jarOutputStream.closeEntry();
} }
/** Open up a random, reusable port. */
public static int randomOpenPort() {
ServerSocket socket;
try {
socket = new ServerSocket(0);
socket.setReuseAddress(true);
socket.close();
return socket.getLocalPort();
} catch (IOException ioe) {
ioe.printStackTrace();
return -1;
}
}
} }