diff --git a/instrumentation/khttp-0.1/javaagent/khttp-0.1-javaagent.gradle b/instrumentation/khttp-0.1/javaagent/khttp-0.1-javaagent.gradle deleted file mode 100644 index 543c34a0b4d9..000000000000 --- a/instrumentation/khttp-0.1/javaagent/khttp-0.1-javaagent.gradle +++ /dev/null @@ -1,18 +0,0 @@ -apply from: "$rootDir/gradle/instrumentation.gradle" - -muzzle { - pass { - group = 'com.github.jkcclemens' - module = 'khttp' - versions = "(,)" - assertInverse = true - } -} - -repositories { - maven { url 'https://jitpack.io' } -} - -dependencies { - library 'com.github.jkcclemens:khttp:0.1.0' -} \ No newline at end of file diff --git a/instrumentation/khttp-0.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/khttp/KHttpHeadersInjectAdapter.java b/instrumentation/khttp-0.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/khttp/KHttpHeadersInjectAdapter.java deleted file mode 100644 index 15d4f46856e1..000000000000 --- a/instrumentation/khttp-0.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/khttp/KHttpHeadersInjectAdapter.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.khttp; - -import io.opentelemetry.context.propagation.TextMapSetter; -import java.util.HashMap; -import java.util.Map; - -public class KHttpHeadersInjectAdapter implements TextMapSetter> { - - public static Map asWritable(Map headers) { - // Kotlin likes to use read-only data structures, so wrap into new writable map - return new HashMap<>(headers); - } - - public static final KHttpHeadersInjectAdapter SETTER = new KHttpHeadersInjectAdapter(); - - @Override - public void set(Map carrier, String key, String value) { - carrier.put(key, value); - } -} diff --git a/instrumentation/khttp-0.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/khttp/KHttpInstrumentation.java b/instrumentation/khttp-0.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/khttp/KHttpInstrumentation.java deleted file mode 100644 index e3448e6f2f87..000000000000 --- a/instrumentation/khttp-0.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/khttp/KHttpInstrumentation.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.khttp; - -import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.extendsClass; -import static io.opentelemetry.javaagent.extension.matcher.ClassLoaderMatcher.hasClassesNamed; -import static io.opentelemetry.javaagent.instrumentation.api.Java8BytecodeBridge.currentContext; -import static io.opentelemetry.javaagent.instrumentation.khttp.KHttpHeadersInjectAdapter.asWritable; -import static io.opentelemetry.javaagent.instrumentation.khttp.KHttpTracer.tracer; -import static net.bytebuddy.matcher.ElementMatchers.isAbstract; -import static net.bytebuddy.matcher.ElementMatchers.isMethod; -import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; -import static net.bytebuddy.matcher.ElementMatchers.returns; -import static net.bytebuddy.matcher.ElementMatchers.takesArgument; - -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 java.util.Map; -import khttp.responses.Response; -import net.bytebuddy.asm.Advice; -import net.bytebuddy.description.type.TypeDescription; -import net.bytebuddy.matcher.ElementMatcher; - -public class KHttpInstrumentation implements TypeInstrumentation { - @Override - public ElementMatcher classLoaderOptimization() { - return hasClassesNamed("khttp.KHttp"); - } - - @Override - public ElementMatcher typeMatcher() { - return extendsClass(named("khttp.KHttp")); - } - - @Override - public void transform(TypeTransformer transformer) { - transformer.applyAdviceToMethod( - isMethod() - .and(not(isAbstract())) - .and(named("request")) - .and(takesArgument(0, String.class)) - .and(takesArgument(1, String.class)) - .and(takesArgument(2, Map.class)) - .and(returns(named("khttp.responses.Response"))), - KHttpInstrumentation.class.getName() + "$RequestAdvice"); - } - - public static class RequestAdvice { - - @Advice.OnMethodEnter(suppress = Throwable.class) - public static void methodEnter( - @Advice.Argument(value = 0) String method, - @Advice.Argument(value = 1) String uri, - @Advice.Argument(value = 2, readOnly = false) Map headers, - @Advice.Local("otelContext") Context context, - @Advice.Local("otelScope") Scope scope) { - Context parentContext = currentContext(); - if (!tracer().shouldStartSpan(parentContext)) { - return; - } - - headers = asWritable(headers); - context = - tracer().startSpan(parentContext, new RequestWrapper(method, uri, headers), headers); - scope = context.makeCurrent(); - } - - @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void methodExit( - @Advice.Return Response response, - @Advice.Thrown Throwable throwable, - @Advice.Local("otelContext") Context context, - @Advice.Local("otelScope") Scope scope) { - if (scope == null) { - return; - } - - scope.close(); - tracer().endMaybeExceptionally(context, response, throwable); - } - } -} diff --git a/instrumentation/khttp-0.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/khttp/KHttpInstrumentationModule.java b/instrumentation/khttp-0.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/khttp/KHttpInstrumentationModule.java deleted file mode 100644 index 3e40176093d5..000000000000 --- a/instrumentation/khttp-0.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/khttp/KHttpInstrumentationModule.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.khttp; - -import static java.util.Collections.singletonList; - -import com.google.auto.service.AutoService; -import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; -import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; -import java.util.List; - -@AutoService(InstrumentationModule.class) -public class KHttpInstrumentationModule extends InstrumentationModule { - - public KHttpInstrumentationModule() { - super("khttp"); - } - - @Override - public List typeInstrumentations() { - return singletonList(new KHttpInstrumentation()); - } -} diff --git a/instrumentation/khttp-0.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/khttp/KHttpTracer.java b/instrumentation/khttp-0.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/khttp/KHttpTracer.java deleted file mode 100644 index 45d0930cc947..000000000000 --- a/instrumentation/khttp-0.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/khttp/KHttpTracer.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.khttp; - -import static io.opentelemetry.javaagent.instrumentation.khttp.KHttpHeadersInjectAdapter.SETTER; - -import io.opentelemetry.context.propagation.TextMapSetter; -import io.opentelemetry.instrumentation.api.tracer.HttpClientTracer; -import io.opentelemetry.instrumentation.api.tracer.net.NetPeerAttributes; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.Map; -import khttp.responses.Response; - -public class KHttpTracer extends HttpClientTracer, Response> { - private static final KHttpTracer TRACER = new KHttpTracer(); - - private KHttpTracer() { - super(NetPeerAttributes.INSTANCE); - } - - public static KHttpTracer tracer() { - return TRACER; - } - - @Override - protected String method(RequestWrapper requestWrapper) { - return requestWrapper.method; - } - - @Override - protected URI url(RequestWrapper requestWrapper) throws URISyntaxException { - return new URI(requestWrapper.uri); - } - - @Override - protected Integer status(Response response) { - return response.getStatusCode(); - } - - @Override - protected String requestHeader(RequestWrapper requestWrapper, String name) { - return requestWrapper.headers.get(name); - } - - @Override - protected String responseHeader(Response response, String name) { - return response.getHeaders().get(name); - } - - @Override - protected TextMapSetter> getSetter() { - return SETTER; - } - - @Override - protected String getInstrumentationName() { - return "io.opentelemetry.javaagent.khttp-0.1"; - } -} diff --git a/instrumentation/khttp-0.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/khttp/RequestWrapper.java b/instrumentation/khttp-0.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/khttp/RequestWrapper.java deleted file mode 100644 index 462d6b42980c..000000000000 --- a/instrumentation/khttp-0.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/khttp/RequestWrapper.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.khttp; - -import java.util.Map; - -public class RequestWrapper { - final String method; - final String uri; - final Map headers; - - public RequestWrapper(String method, String uri, Map headers) { - this.method = method; - this.uri = uri; - this.headers = headers; - } -} diff --git a/instrumentation/khttp-0.1/javaagent/src/test/groovy/KHttpClientTest.groovy b/instrumentation/khttp-0.1/javaagent/src/test/groovy/KHttpClientTest.groovy deleted file mode 100644 index 2b1e2874efe0..000000000000 --- a/instrumentation/khttp-0.1/javaagent/src/test/groovy/KHttpClientTest.groovy +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import io.opentelemetry.instrumentation.test.AgentTestTrait -import io.opentelemetry.instrumentation.test.base.HttpClientTest -import khttp.KHttp - -class KHttpClientTest extends HttpClientTest implements AgentTestTrait { - - @Override - Void buildRequest(String method, URI uri, Map headers) { - return null - } - - @Override - int sendRequest(Void request, String method, URI uri, Map headers) { - headers.put("User-Agent", "khttp") - // khttp applies the same timeout for both connect and read - def timeoutSeconds = CONNECT_TIMEOUT_MS / 1000 - def response = KHttp.request(method, uri.toString(), headers, Collections.emptyMap(), null, null, null, null, timeoutSeconds) - return response.statusCode - } - - @Override - boolean testCircularRedirects() { - return false - } - - @Override - boolean testReusedRequest() { - // these tests will pass, but they don't really test anything since REQUEST is Void - false - } - - @Override - boolean testCallback() { - return false - } - - @Override - String userAgent() { - return "khttp" - } -} diff --git a/settings.gradle b/settings.gradle index 9937baf12c1b..843e44be9ce3 100644 --- a/settings.gradle +++ b/settings.gradle @@ -190,7 +190,6 @@ include ':instrumentation:jsf:myfaces-1.2:javaagent' include ':instrumentation:jsp-2.3:javaagent' include ':instrumentation:kafka-clients-0.11:javaagent' include ':instrumentation:kafka-streams-0.11:javaagent' -include ':instrumentation:khttp-0.1:javaagent' include ':instrumentation:kotlinx-coroutines:javaagent' include ':instrumentation:kubernetes-client-7.0:javaagent' include ':instrumentation:kubernetes-client-7.0:javaagent-unit-tests'