Update hibernate to new agent api

This commit is contained in:
Trask Stalnaker 2019-10-19 11:57:41 -07:00
parent 50dcc5bd4e
commit d3c83419f9
6 changed files with 26 additions and 28 deletions

View File

@ -1,6 +1,7 @@
package datadog.trace.instrumentation.hibernate.core.v3_3; package datadog.trace.instrumentation.hibernate.core.v3_3;
import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType;
import static datadog.trace.instrumentation.api.AgentTracer.startSpan;
import static datadog.trace.instrumentation.hibernate.HibernateDecorator.DECORATOR; import static datadog.trace.instrumentation.hibernate.HibernateDecorator.DECORATOR;
import static java.util.Collections.singletonMap; import static java.util.Collections.singletonMap;
import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.isInterface;
@ -14,9 +15,8 @@ import com.google.auto.service.AutoService;
import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.Instrumenter;
import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.ContextStore;
import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.InstrumentationContext;
import datadog.trace.instrumentation.api.AgentSpan;
import datadog.trace.instrumentation.hibernate.SessionState; import datadog.trace.instrumentation.hibernate.SessionState;
import io.opentracing.Span;
import io.opentracing.util.GlobalTracer;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice;
@ -62,7 +62,7 @@ public class SessionFactoryInstrumentation extends AbstractHibernateInstrumentat
@Advice.OnMethodExit(suppress = Throwable.class) @Advice.OnMethodExit(suppress = Throwable.class)
public static void openSession(@Advice.Return final Object session) { public static void openSession(@Advice.Return final Object session) {
final Span span = GlobalTracer.get().buildSpan("hibernate.session").start(); final AgentSpan span = startSpan("hibernate.session");
DECORATOR.afterStart(span); DECORATOR.afterStart(span);
DECORATOR.onConnection(span, session); DECORATOR.onConnection(span, session);

View File

@ -15,9 +15,9 @@ import com.google.auto.service.AutoService;
import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.Instrumenter;
import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.ContextStore;
import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.InstrumentationContext;
import datadog.trace.instrumentation.api.AgentSpan;
import datadog.trace.instrumentation.hibernate.SessionMethodUtils; import datadog.trace.instrumentation.hibernate.SessionMethodUtils;
import datadog.trace.instrumentation.hibernate.SessionState; import datadog.trace.instrumentation.hibernate.SessionState;
import io.opentracing.Span;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -131,7 +131,7 @@ public class SessionInstrumentation extends AbstractHibernateInstrumentation {
state.getMethodScope().close(); state.getMethodScope().close();
} }
final Span span = state.getSessionSpan(); final AgentSpan span = state.getSessionSpan();
DECORATOR.onError(span, throwable); DECORATOR.onError(span, throwable);
DECORATOR.beforeFinish(span); DECORATOR.beforeFinish(span);
span.finish(); span.finish();

View File

@ -1,6 +1,7 @@
package datadog.trace.instrumentation.hibernate.core.v4_0; package datadog.trace.instrumentation.hibernate.core.v4_0;
import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType;
import static datadog.trace.instrumentation.api.AgentTracer.startSpan;
import static datadog.trace.instrumentation.hibernate.HibernateDecorator.DECORATOR; import static datadog.trace.instrumentation.hibernate.HibernateDecorator.DECORATOR;
import static java.util.Collections.singletonMap; import static java.util.Collections.singletonMap;
import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.isInterface;
@ -14,9 +15,8 @@ import com.google.auto.service.AutoService;
import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.Instrumenter;
import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.ContextStore;
import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.InstrumentationContext;
import datadog.trace.instrumentation.api.AgentSpan;
import datadog.trace.instrumentation.hibernate.SessionState; import datadog.trace.instrumentation.hibernate.SessionState;
import io.opentracing.Span;
import io.opentracing.util.GlobalTracer;
import java.util.Map; import java.util.Map;
import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice;
import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.method.MethodDescription;
@ -54,7 +54,7 @@ public class SessionFactoryInstrumentation extends AbstractHibernateInstrumentat
@Advice.OnMethodExit(suppress = Throwable.class) @Advice.OnMethodExit(suppress = Throwable.class)
public static void openSession(@Advice.Return final SharedSessionContract session) { public static void openSession(@Advice.Return final SharedSessionContract session) {
final Span span = GlobalTracer.get().buildSpan("hibernate.session").start(); final AgentSpan span = startSpan("hibernate.session");
DECORATOR.afterStart(span); DECORATOR.afterStart(span);
DECORATOR.onConnection(span, session); DECORATOR.onConnection(span, session);

View File

@ -15,9 +15,9 @@ import com.google.auto.service.AutoService;
import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.Instrumenter;
import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.ContextStore;
import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.InstrumentationContext;
import datadog.trace.instrumentation.api.AgentSpan;
import datadog.trace.instrumentation.hibernate.SessionMethodUtils; import datadog.trace.instrumentation.hibernate.SessionMethodUtils;
import datadog.trace.instrumentation.hibernate.SessionState; import datadog.trace.instrumentation.hibernate.SessionState;
import io.opentracing.Span;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -119,7 +119,7 @@ public class SessionInstrumentation extends AbstractHibernateInstrumentation {
state.getMethodScope().close(); state.getMethodScope().close();
} }
final Span span = state.getSessionSpan(); final AgentSpan span = state.getSessionSpan();
DECORATOR.onError(span, throwable); DECORATOR.onError(span, throwable);
DECORATOR.beforeFinish(span); DECORATOR.beforeFinish(span);
span.finish(); span.finish();

View File

@ -1,12 +1,13 @@
package datadog.trace.instrumentation.hibernate; package datadog.trace.instrumentation.hibernate;
import static datadog.trace.instrumentation.api.AgentTracer.activateSpan;
import static datadog.trace.instrumentation.api.AgentTracer.startSpan;
import static datadog.trace.instrumentation.hibernate.HibernateDecorator.DECORATOR; import static datadog.trace.instrumentation.hibernate.HibernateDecorator.DECORATOR;
import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.CallDepthThreadLocalMap;
import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.ContextStore;
import io.opentracing.Scope; import datadog.trace.instrumentation.api.AgentScope;
import io.opentracing.Span; import datadog.trace.instrumentation.api.AgentSpan;
import io.opentracing.util.GlobalTracer;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
@ -36,17 +37,14 @@ public class SessionMethodUtils {
return null; // This method call is being traced already. return null; // This method call is being traced already.
} }
final Scope scope; final AgentScope scope;
if (createSpan) { if (createSpan) {
scope = final AgentSpan span = startSpan(operationName, sessionState.getSessionSpan().context());
GlobalTracer.get() DECORATOR.afterStart(span);
.buildSpan(operationName) DECORATOR.onOperation(span, entity);
.asChildOf(sessionState.getSessionSpan()) scope = activateSpan(span, true);
.startActive(true);
DECORATOR.afterStart(scope.span());
DECORATOR.onOperation(scope.span(), entity);
} else { } else {
scope = GlobalTracer.get().scopeManager().activate(sessionState.getSessionSpan(), false); scope = activateSpan(sessionState.getSessionSpan(), false);
sessionState.setHasChildSpan(false); sessionState.setHasChildSpan(false);
} }
@ -65,8 +63,8 @@ public class SessionMethodUtils {
} }
CallDepthThreadLocalMap.reset(SessionMethodUtils.class); CallDepthThreadLocalMap.reset(SessionMethodUtils.class);
final Scope scope = sessionState.getMethodScope(); final AgentScope scope = sessionState.getMethodScope();
final Span span = scope.span(); final AgentSpan span = scope.span();
if (span != null && sessionState.hasChildSpan) { if (span != null && sessionState.hasChildSpan) {
DECORATOR.onError(span, throwable); DECORATOR.onError(span, throwable);
if (entity != null) { if (entity != null) {

View File

@ -1,13 +1,13 @@
package datadog.trace.instrumentation.hibernate; package datadog.trace.instrumentation.hibernate;
import io.opentracing.Scope; import datadog.trace.instrumentation.api.AgentScope;
import io.opentracing.Span; import datadog.trace.instrumentation.api.AgentSpan;
import lombok.Data; import lombok.Data;
import lombok.NonNull; import lombok.NonNull;
@Data @Data
public class SessionState { public class SessionState {
@NonNull public Span sessionSpan; @NonNull public AgentSpan sessionSpan;
public Scope methodScope; public AgentScope methodScope;
public boolean hasChildSpan = true; public boolean hasChildSpan = true;
} }