Update hibernate to new agent api
This commit is contained in:
parent
50dcc5bd4e
commit
d3c83419f9
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue