Fix NoClassDefFound errors for ratpack

This commit is contained in:
Jon Mort 2018-04-30 13:03:59 +01:00
parent de7a7c9575
commit c1a7f58aaf
No known key found for this signature in database
GPG Key ID: F48EC3DC382704A4
3 changed files with 24 additions and 9 deletions

View File

@ -1,5 +1,6 @@
package datadog.trace.instrumentation.ratpack; package datadog.trace.instrumentation.ratpack;
import static datadog.trace.instrumentation.ratpack.RatpackInstrumentation.ROOT_RATPACK_HELPER_INJECTOR;
import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType;
import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.isInterface;
import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.named;
@ -22,7 +23,12 @@ public final class RatpackHttpClientInstrumentation extends Instrumenter.Configu
new HelperInjector( new HelperInjector(
"datadog.trace.instrumentation.ratpack.impl.RatpackHttpClientAdvice$RatpackHttpClientRequestAdvice", "datadog.trace.instrumentation.ratpack.impl.RatpackHttpClientAdvice$RatpackHttpClientRequestAdvice",
"datadog.trace.instrumentation.ratpack.impl.RatpackHttpClientAdvice$RatpackHttpClientRequestStreamAdvice", "datadog.trace.instrumentation.ratpack.impl.RatpackHttpClientAdvice$RatpackHttpClientRequestStreamAdvice",
"datadog.trace.instrumentation.ratpack.impl.RatpackHttpClientAdvice$RatpackHttpGetAdvice"); "datadog.trace.instrumentation.ratpack.impl.RatpackHttpClientAdvice$RatpackHttpGetAdvice",
"datadog.trace.instrumentation.ratpack.impl.RatpackHttpClientAdvice$RequestAction",
"datadog.trace.instrumentation.ratpack.impl.RatpackHttpClientAdvice$ResponseAction",
"datadog.trace.instrumentation.ratpack.impl.RatpackHttpClientAdvice$StreamedResponseAction",
"datadog.trace.instrumentation.ratpack.impl.RequestSpecInjectAdapter",
"datadog.trace.instrumentation.ratpack.impl.WrappedRequestSpec");
public static final TypeDescription.ForLoadedType URI_TYPE_DESCRIPTION = public static final TypeDescription.ForLoadedType URI_TYPE_DESCRIPTION =
new TypeDescription.ForLoadedType(URI.class); new TypeDescription.ForLoadedType(URI.class);
@ -42,6 +48,7 @@ public final class RatpackHttpClientInstrumentation extends Instrumenter.Configu
.type( .type(
not(isInterface()).and(hasSuperType(named("ratpack.http.client.HttpClient"))), not(isInterface()).and(hasSuperType(named("ratpack.http.client.HttpClient"))),
RatpackInstrumentation.CLASSLOADER_CONTAINS_RATPACK_1_4_OR_ABOVE) RatpackInstrumentation.CLASSLOADER_CONTAINS_RATPACK_1_4_OR_ABOVE)
.transform(ROOT_RATPACK_HELPER_INJECTOR)
.transform(HTTP_CLIENT_HELPER_INJECTOR) .transform(HTTP_CLIENT_HELPER_INJECTOR)
.transform( .transform(
DDAdvice.create() DDAdvice.create()

View File

@ -19,11 +19,18 @@ import net.bytebuddy.matcher.ElementMatcher;
public final class RatpackInstrumentation extends Instrumenter.Configurable { public final class RatpackInstrumentation extends Instrumenter.Configurable {
static final String EXEC_NAME = "ratpack"; static final String EXEC_NAME = "ratpack";
static final HelperInjector ROOT_RATPACK_HELPER_INJECTOR =
new HelperInjector(
"datadog.opentracing.scopemanager.ContextualScopeManager",
"datadog.opentracing.scopemanager.ScopeContext");
private static final HelperInjector SERVER_REGISTRY_HELPER_INJECTOR = private static final HelperInjector SERVER_REGISTRY_HELPER_INJECTOR =
new HelperInjector( new HelperInjector(
"datadog.trace.instrumentation.ratpack.impl.RatpackRequestExtractAdapter",
"datadog.trace.instrumentation.ratpack.impl.RatpackScopeManager", "datadog.trace.instrumentation.ratpack.impl.RatpackScopeManager",
"datadog.trace.instrumentation.ratpack.impl.TracingHandler", "datadog.trace.instrumentation.ratpack.impl.RatpackServerAdvice$RatpackServerRegistryAdvice",
"datadog.trace.instrumentation.ratpack.impl.RatpackServerAdvice$RatpackServerRegistryAdvice"); "datadog.trace.instrumentation.ratpack.impl.TracingHandler");
private static final HelperInjector EXEC_STARTER_HELPER_INJECTOR = private static final HelperInjector EXEC_STARTER_HELPER_INJECTOR =
new HelperInjector( new HelperInjector(
"datadog.trace.instrumentation.ratpack.impl.RatpackServerAdvice$ExecStarterAdvice", "datadog.trace.instrumentation.ratpack.impl.RatpackServerAdvice$ExecStarterAdvice",
@ -52,6 +59,7 @@ public final class RatpackInstrumentation extends Instrumenter.Configurable {
.type( .type(
named("ratpack.server.internal.ServerRegistry"), named("ratpack.server.internal.ServerRegistry"),
CLASSLOADER_CONTAINS_RATPACK_1_4_OR_ABOVE) CLASSLOADER_CONTAINS_RATPACK_1_4_OR_ABOVE)
.transform(ROOT_RATPACK_HELPER_INJECTOR)
.transform(SERVER_REGISTRY_HELPER_INJECTOR) .transform(SERVER_REGISTRY_HELPER_INJECTOR)
.transform( .transform(
DDAdvice.create() DDAdvice.create()
@ -62,6 +70,7 @@ public final class RatpackInstrumentation extends Instrumenter.Configurable {
.type( .type(
not(isInterface()).and(hasSuperType(named("ratpack.exec.ExecStarter"))), not(isInterface()).and(hasSuperType(named("ratpack.exec.ExecStarter"))),
CLASSLOADER_CONTAINS_RATPACK_1_4_OR_ABOVE) CLASSLOADER_CONTAINS_RATPACK_1_4_OR_ABOVE)
.transform(ROOT_RATPACK_HELPER_INJECTOR)
.transform(EXEC_STARTER_HELPER_INJECTOR) .transform(EXEC_STARTER_HELPER_INJECTOR)
.transform( .transform(
DDAdvice.create() DDAdvice.create()

View File

@ -1,25 +1,24 @@
package datadog.trace.instrumentation.ratpack.impl; package datadog.trace.instrumentation.ratpack.impl;
import com.google.common.collect.ListMultimap;
import io.opentracing.propagation.TextMap; import io.opentracing.propagation.TextMap;
import java.util.Iterator; import java.util.*;
import java.util.Map;
import ratpack.http.Request; import ratpack.http.Request;
import ratpack.util.MultiValueMap;
/** /**
* Simple request extractor in the same vein as @see * Simple request extractor in the same vein as @see
* io.opentracing.contrib.web.servlet.filter.HttpServletRequestExtractAdapter * io.opentracing.contrib.web.servlet.filter.HttpServletRequestExtractAdapter
*/ */
public class RatpackRequestExtractAdapter implements TextMap { public class RatpackRequestExtractAdapter implements TextMap {
private final ListMultimap<String, String> headers; private final MultiValueMap<String, String> headers;
RatpackRequestExtractAdapter(Request request) { RatpackRequestExtractAdapter(Request request) {
this.headers = request.getHeaders().asMultiValueMap().asMultimap(); this.headers = request.getHeaders().asMultiValueMap();
} }
@Override @Override
public Iterator<Map.Entry<String, String>> iterator() { public Iterator<Map.Entry<String, String>> iterator() {
return headers.entries().iterator(); return headers.entrySet().iterator();
} }
@Override @Override