fix span error tagging in grpc server interceptor
MODIFY
dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/GrpcServerDecorator.java
dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/GrpcServerDecorator.java
@@ -2,6 +2,9 @@ package datadog.trace.instrumentation.grpc.server;
import datadog.trace.agent.decorator.ServerDecorator;
import datadog.trace.api.DDSpanTypes;
+import io.grpc.Status;
+import io.opentracing.Span;
+import io.opentracing.tag.Tags;
public class GrpcServerDecorator extends ServerDecorator {
public static final GrpcServerDecorator DECORATE = new GrpcServerDecorator();
@@ -20,4 +23,17 @@ public class GrpcServerDecorator extends ServerDecorator {
protected String component() {
return "grpc-server";
}
+
+ public Span onClose(final Span span, final Status status) {
+
+ span.setTag("status.code", status.getCode().name());
+ span.setTag("status.description", status.getDescription());
+
+ onError(span, status.getCause());
+ if (!status.isOk()) {
+ Tags.ERROR.set(span, true);
+ }
+
+ return span;
+ }
}

MODIFY
dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/TracingServerInterceptor.java
dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/TracingServerInterceptor.java
@@ -90,6 +90,27 @@ public class TracingServerInterceptor implements ServerInterceptor {
this.span = span;
}
+ @Override
+ public void onClose(final Status status, final Metadata trailers) {
+ DECORATE.onClose(span, status);
+ // Finishes span.
+ try (final Scope scope = tracer.scopeManager().activate(span, false)) {
+ if (scope instanceof TraceScope) {
+ ((TraceScope) scope).setAsyncPropagation(true);
+ }
+ delegate().onClose(status, trailers);
+ if (scope instanceof TraceScope) {
+ ((TraceScope) scope).setAsyncPropagation(false);
+ }
+ } catch (final Throwable e) {
+ DECORATE.onError(span, e);
+ throw e;
+ } finally {
+ DECORATE.beforeFinish(span);
+ span.finish();
+ }
+ }
+
@Override
public void onMessage(final ReqT message) {
final Scope scope =
@@ -178,6 +199,7 @@ public class TracingServerInterceptor implements ServerInterceptor {
}
}
+
@Override
public void onReady() {
try (final Scope scope = tracer.scopeManager().activate(span, false)) {

fix span error tagging in grpc server interceptor