Play instrumentation cleanup
Simplify error collecting. Use slf4j to log. randomOpenPort util.
This commit is contained in:
parent
772872bcb5
commit
5f8a83486a
|
@ -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;
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue