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;
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 java.util.Collections.singletonMap;
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.bootstrap.ContextStore;
import datadog.trace.bootstrap.InstrumentationContext;
import datadog.trace.instrumentation.api.AgentSpan;
import datadog.trace.instrumentation.hibernate.SessionState;
import io.opentracing.Span;
import io.opentracing.util.GlobalTracer;
import java.util.HashMap;
import java.util.Map;
import net.bytebuddy.asm.Advice;
@ -62,7 +62,7 @@ public class SessionFactoryInstrumentation extends AbstractHibernateInstrumentat
@Advice.OnMethodExit(suppress = Throwable.class)
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.onConnection(span, session);

View File

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

View File

@ -1,6 +1,7 @@
package datadog.trace.instrumentation.hibernate.core.v4_0;
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 java.util.Collections.singletonMap;
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.bootstrap.ContextStore;
import datadog.trace.bootstrap.InstrumentationContext;
import datadog.trace.instrumentation.api.AgentSpan;
import datadog.trace.instrumentation.hibernate.SessionState;
import io.opentracing.Span;
import io.opentracing.util.GlobalTracer;
import java.util.Map;
import net.bytebuddy.asm.Advice;
import net.bytebuddy.description.method.MethodDescription;
@ -54,7 +54,7 @@ public class SessionFactoryInstrumentation extends AbstractHibernateInstrumentat
@Advice.OnMethodExit(suppress = Throwable.class)
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.onConnection(span, session);

View File

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

View File

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

View File

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