|
@@ -1,76 +0,0 @@
|
|
|
-/*
|
|
|
- * Copyright The OpenTelemetry Authors
|
|
|
- * SPDX-License-Identifier: Apache-2.0
|
|
|
- */
|
|
|
-
|
|
|
-package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v1_1;
|
|
|
-
|
|
|
-import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext;
|
|
|
-import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
|
|
|
-import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface;
|
|
|
-import static io.opentelemetry.javaagent.instrumentation.jaxrsclient.v1_1.JaxRsClientSingletons.instrumenter;
|
|
|
-import static net.bytebuddy.matcher.ElementMatchers.named;
|
|
|
-import static net.bytebuddy.matcher.ElementMatchers.returns;
|
|
|
-import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
|
|
-
|
|
|
-import com.sun.jersey.api.client.ClientRequest;
|
|
|
-import com.sun.jersey.api.client.ClientResponse;
|
|
|
-import io.opentelemetry.context.Context;
|
|
|
-import io.opentelemetry.context.Scope;
|
|
|
-import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
|
|
|
-import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
|
|
|
-import net.bytebuddy.asm.Advice;
|
|
|
-import net.bytebuddy.description.type.TypeDescription;
|
|
|
-import net.bytebuddy.matcher.ElementMatcher;
|
|
|
-
|
|
|
-public class ClientHandlerInstrumentation implements TypeInstrumentation {
|
|
|
- @Override
|
|
|
- public ElementMatcher<ClassLoader> classLoaderOptimization() {
|
|
|
- return hasClassesNamed("com.sun.jersey.api.client.ClientHandler");
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public ElementMatcher<TypeDescription> typeMatcher() {
|
|
|
- return implementsInterface(named("com.sun.jersey.api.client.ClientHandler"));
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void transform(TypeTransformer transformer) {
|
|
|
- transformer.applyAdviceToMethod(
|
|
|
- named("handle")
|
|
|
- .and(takesArgument(0, named("com.sun.jersey.api.client.ClientRequest")))
|
|
|
- .and(returns(named("com.sun.jersey.api.client.ClientResponse"))),
|
|
|
- this.getClass().getName() + "$HandleAdvice");
|
|
|
- }
|
|
|
-
|
|
|
- @SuppressWarnings("unused")
|
|
|
- public static class HandleAdvice {
|
|
|
-
|
|
|
- @Advice.OnMethodEnter
|
|
|
- public static void onEnter(
|
|
|
- @Advice.Argument(0) ClientRequest request,
|
|
|
- @Advice.Local("otelContext") Context context,
|
|
|
- @Advice.Local("otelScope") Scope scope) {
|
|
|
- Context parentContext = currentContext();
|
|
|
- if (instrumenter().shouldStart(parentContext, request)) {
|
|
|
- context = instrumenter().start(parentContext, request);
|
|
|
- scope = context.makeCurrent();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
|
|
|
- public static void onExit(
|
|
|
- @Advice.Argument(0) ClientRequest request,
|
|
|
- @Advice.Return ClientResponse response,
|
|
|
- @Advice.Thrown Throwable throwable,
|
|
|
- @Advice.Local("otelContext") Context context,
|
|
|
- @Advice.Local("otelScope") Scope scope) {
|
|
|
- if (scope == null) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- scope.close();
|
|
|
- instrumenter().end(context, request, response, throwable);
|
|
|
- }
|
|
|
- }
|
|
|
-}
|