Skip to content

Commit 31f606d

Browse files
committed
jaxrs-3.0-*
1 parent 2f2aca1 commit 31f606d

File tree

4 files changed

+86
-48
lines changed

4 files changed

+86
-48
lines changed

instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-jersey-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v3_0/JerseyInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@
1111
import com.google.auto.service.AutoService;
1212
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1313
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
14+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
1415
import java.util.List;
1516
import net.bytebuddy.matcher.ElementMatcher;
1617

1718
@AutoService(InstrumentationModule.class)
18-
public class JerseyInstrumentationModule extends InstrumentationModule {
19+
public class JerseyInstrumentationModule extends InstrumentationModule
20+
implements ExperimentalInstrumentationModule {
1921
public JerseyInstrumentationModule() {
2022
super("jaxrs", "jaxrs-3.0", "jersey", "jersey-3.0");
2123
}
@@ -32,4 +34,9 @@ public List<TypeInstrumentation> typeInstrumentations() {
3234
new JerseyServletContainerInstrumentation(),
3335
new JerseyResourceMethodDispatcherInstrumentation());
3436
}
37+
38+
@Override
39+
public boolean isIndyReady() {
40+
return true;
41+
}
3542
}

instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-jersey-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v3_0/JerseyRequestContextInstrumentation.java

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
import jakarta.ws.rs.container.ResourceInfo;
1515
import jakarta.ws.rs.core.UriInfo;
1616
import java.lang.reflect.Method;
17+
import javax.annotation.Nullable;
1718
import net.bytebuddy.asm.Advice;
18-
import net.bytebuddy.asm.Advice.Local;
1919

2020
/**
2121
* Jersey specific context instrumentation.
@@ -35,47 +35,59 @@ protected String abortAdviceName() {
3535
@SuppressWarnings("unused")
3636
public static class ContainerRequestContextAdvice {
3737

38+
public static class AdviceScope {
39+
public Jaxrs3HandlerData handlerData;
40+
public Context context;
41+
public Scope scope;
42+
43+
public AdviceScope(
44+
Class<?> resourceClass, Method method, ContainerRequestContext requestContext) {
45+
handlerData = new Jaxrs3HandlerData(resourceClass, method);
46+
context =
47+
Jaxrs3RequestContextHelper.createOrUpdateAbortSpan(
48+
instrumenter(), requestContext, handlerData);
49+
if (context != null) {
50+
scope = context.makeCurrent();
51+
}
52+
}
53+
54+
public void exit(@Nullable Throwable throwable) {
55+
if (scope == null) {
56+
return;
57+
}
58+
scope.close();
59+
instrumenter().end(context, handlerData, null, throwable);
60+
}
61+
}
62+
63+
@Nullable
3864
@Advice.OnMethodEnter(suppress = Throwable.class)
39-
public static void decorateAbortSpan(
40-
@Advice.This ContainerRequestContext requestContext,
41-
@Local("otelHandlerData") Jaxrs3HandlerData handlerData,
42-
@Local("otelContext") Context context,
43-
@Local("otelScope") Scope scope) {
44-
UriInfo uriInfo = requestContext.getUriInfo();
65+
public static AdviceScope decorateAbortSpan(
66+
@Advice.This ContainerRequestContext requestContext) {
4567

68+
UriInfo uriInfo = requestContext.getUriInfo();
4669
if (requestContext.getProperty(JaxrsConstants.ABORT_HANDLED) != null
4770
|| !(uriInfo instanceof ResourceInfo)) {
48-
return;
71+
return null;
4972
}
5073

5174
ResourceInfo resourceInfo = (ResourceInfo) uriInfo;
5275
Method method = resourceInfo.getResourceMethod();
5376
Class<?> resourceClass = resourceInfo.getResourceClass();
5477

5578
if (resourceClass == null || method == null) {
56-
return;
79+
return null;
5780
}
5881

59-
handlerData = new Jaxrs3HandlerData(resourceClass, method);
60-
context =
61-
Jaxrs3RequestContextHelper.createOrUpdateAbortSpan(
62-
instrumenter(), requestContext, handlerData);
63-
if (context != null) {
64-
scope = context.makeCurrent();
65-
}
82+
return new AdviceScope(resourceClass, method, requestContext);
6683
}
6784

6885
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
6986
public static void stopSpan(
70-
@Local("otelHandlerData") Jaxrs3HandlerData handlerData,
71-
@Local("otelContext") Context context,
72-
@Local("otelScope") Scope scope,
73-
@Advice.Thrown Throwable throwable) {
74-
if (scope == null) {
75-
return;
87+
@Advice.Thrown Throwable throwable, @Advice.Enter @Nullable AdviceScope adviceScope) {
88+
if (adviceScope != null) {
89+
adviceScope.exit(throwable);
7690
}
77-
scope.close();
78-
instrumenter().end(context, handlerData, null, throwable);
7991
}
8092
}
8193
}

instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-resteasy-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v3_0/ResteasyInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@
1111
import com.google.auto.service.AutoService;
1212
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1313
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
14+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
1415
import java.util.List;
1516
import net.bytebuddy.matcher.ElementMatcher;
1617

1718
@AutoService(InstrumentationModule.class)
18-
public class ResteasyInstrumentationModule extends InstrumentationModule {
19+
public class ResteasyInstrumentationModule extends InstrumentationModule
20+
implements ExperimentalInstrumentationModule {
1921
public ResteasyInstrumentationModule() {
2022
super("jaxrs", "jaxrs-3.0", "resteasy", "resteasy-6.0");
2123
}
@@ -36,4 +38,9 @@ public List<TypeInstrumentation> typeInstrumentations() {
3638
new ResteasyResourceMethodInvokerInstrumentation(),
3739
new ResteasyResourceLocatorInvokerInstrumentation());
3840
}
41+
42+
@Override
43+
public boolean isIndyReady() {
44+
return true;
45+
}
3946
}

instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-resteasy-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v3_0/ResteasyRequestContextInstrumentation.java

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
import io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsConstants;
1111
import jakarta.ws.rs.container.ContainerRequestContext;
1212
import java.lang.reflect.Method;
13+
import javax.annotation.Nullable;
1314
import net.bytebuddy.asm.Advice;
14-
import net.bytebuddy.asm.Advice.Local;
1515
import org.jboss.resteasy.core.ResourceMethodInvoker;
1616
import org.jboss.resteasy.core.interception.jaxrs.PostMatchContainerRequestContext;
1717

@@ -34,42 +34,54 @@ protected String abortAdviceName() {
3434
@SuppressWarnings("unused")
3535
public static class ContainerRequestContextAdvice {
3636

37+
public static class AdviceScope {
38+
private final Jaxrs3HandlerData handlerData;
39+
private final Context context;
40+
private final Scope scope;
41+
42+
public AdviceScope(
43+
Class<?> resourceClass, Method method, ContainerRequestContext requestContext) {
44+
handlerData = new Jaxrs3HandlerData(resourceClass, method);
45+
context =
46+
Jaxrs3RequestContextHelper.createOrUpdateAbortSpan(
47+
ResteasySingletons.instrumenter(), requestContext, handlerData);
48+
scope = context != null ? context.makeCurrent() : null;
49+
}
50+
51+
public void exit(Throwable throwable) {
52+
if (scope == null) {
53+
return;
54+
}
55+
scope.close();
56+
ResteasySingletons.instrumenter().end(context, handlerData, null, throwable);
57+
}
58+
}
59+
60+
@Nullable
3761
@Advice.OnMethodEnter(suppress = Throwable.class)
38-
public static void decorateAbortSpan(
39-
@Advice.This ContainerRequestContext requestContext,
40-
@Local("otelHandlerData") Jaxrs3HandlerData handlerData,
41-
@Local("otelContext") Context context,
42-
@Local("otelScope") Scope scope) {
62+
public static AdviceScope decorateAbortSpan(
63+
@Advice.This ContainerRequestContext requestContext) {
64+
4365
if (requestContext.getProperty(JaxrsConstants.ABORT_HANDLED) != null
4466
|| !(requestContext instanceof PostMatchContainerRequestContext)) {
45-
return;
67+
return null;
4668
}
4769

4870
ResourceMethodInvoker resourceMethodInvoker =
4971
((PostMatchContainerRequestContext) requestContext).getResourceMethod();
5072
Method method = resourceMethodInvoker.getMethod();
5173
Class<?> resourceClass = resourceMethodInvoker.getResourceClass();
5274

53-
handlerData = new Jaxrs3HandlerData(resourceClass, method);
54-
context =
55-
Jaxrs3RequestContextHelper.createOrUpdateAbortSpan(
56-
ResteasySingletons.instrumenter(), requestContext, handlerData);
57-
if (context != null) {
58-
scope = context.makeCurrent();
59-
}
75+
return new AdviceScope(resourceClass, method, requestContext);
6076
}
6177

6278
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
6379
public static void stopSpan(
64-
@Local("otelHandlerData") Jaxrs3HandlerData handlerData,
65-
@Local("otelContext") Context context,
66-
@Local("otelScope") Scope scope,
67-
@Advice.Thrown Throwable throwable) {
68-
if (scope == null) {
69-
return;
80+
@Advice.Thrown @Nullable Throwable throwable,
81+
@Advice.Enter @Nullable AdviceScope adviceScope) {
82+
if (adviceScope != null) {
83+
adviceScope.exit(throwable);
7084
}
71-
scope.close();
72-
ResteasySingletons.instrumenter().end(context, handlerData, null, throwable);
7385
}
7486
}
7587
}

0 commit comments

Comments
 (0)