Skip to content

Commit 2c5e8bc

Browse files
author
Doug Hilpipre
committed
updates
1 parent 870d588 commit 2c5e8bc

12 files changed

Lines changed: 92 additions & 185 deletions

File tree

ktor-client-cio-3.2.0/src/main/java/io/ktor/client/engine/cio/Endpoint_Instrumentation.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,17 @@ public Endpoint_Instrumentation(String host, int port, Proxy proxy, boolean secu
3131

3232
@Trace
3333
public Object execute(HttpRequestData request, CoroutineContext coroutineContext, Continuation<? super HttpResponseData> continuation) {
34-
if (request != null && segment == null) {
35-
Url url = request.getUrl();
36-
String urlString = null;
37-
if (url != null) {
38-
urlString = url.toString();
39-
URI uri = URI.create(url.toString());
40-
HttpParameters httpParameters = HttpParameters.library("Ktor-CIO-Client").uri(uri).procedure(request.getMethod().toString()).noInboundHeaders().build();
41-
segment = NewRelic.getAgent().getTransaction().startSegment("CIOClientRequest");
42-
segment.reportAsExternal(httpParameters);
43-
}
44-
}
34+
// if (request != null && segment == null) {
35+
// Url url = request.getUrl();
36+
// String urlString = null;
37+
// if (url != null) {
38+
// urlString = url.toString();
39+
// URI uri = URI.create(url.toString());
40+
// HttpParameters httpParameters = HttpParameters.library("Ktor-CIO-Client").uri(uri).procedure(request.getMethod().toString()).noInboundHeaders().build();
41+
// segment = NewRelic.getAgent().getTransaction().startSegment("CIOClientRequest");
42+
// segment.reportAsExternal(httpParameters);
43+
// }
44+
// }
4545
return Weaver.callOriginal();
4646
}
4747

ktor-client-core-3.3.0/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ dependencies {
1616

1717
jar {
1818
manifest {
19-
attributes 'Implementation-Title': 'com.newrelic.instrumentation.labs.ktor-client-core-2.0'
19+
attributes 'Implementation-Title': 'com.newrelic.instrumentation.labs.ktor-client-core-3.3.0'
2020
attributes 'Implementation-Vendor': 'New Relic Labs'
2121
attributes 'Implementation-Vendor-Id': 'com.newrelic.labs'
2222
attributes 'Implementation-Version': "1.0"
Lines changed: 6 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,14 @@
11
package com.newrelic.instrumentation.labs.ktor.client;
22

3-
import java.net.URI;
4-
5-
import com.newrelic.api.agent.HttpParameters;
6-
7-
import com.newrelic.api.agent.NewRelic;
8-
import com.newrelic.api.agent.Token;
9-
import io.ktor.client.request.HttpRequestBuilder;
10-
import io.ktor.http.HttpMethod;
11-
import io.ktor.http.URLBuilder;
12-
import io.ktor.http.Url;
13-
import kotlin.coroutines.CoroutineContext;
14-
import org.jetbrains.annotations.Nullable;
3+
import kotlin.jvm.functions.Function3;
154

165
public class InstrumentationUtils {
176

18-
public static HttpParameters getParams(HttpRequestBuilder builder) {
19-
URLBuilder urlBuilder = builder.getUrl();
20-
if (urlBuilder != null) {
21-
22-
Url url = urlBuilder.build();
23-
URI uri = URI.create(url.toString());
24-
HttpMethod httpMethod = builder.getMethod();
25-
return HttpParameters.library("Ktor-Client").uri(uri).procedure(httpMethod.getValue()).noInboundHeaders().build();
26-
}
27-
28-
return null;
29-
}
30-
31-
public static void setToken(CoroutineContext context) {
32-
TokenContext tokenContext = NRTokenContextKt.getTokenContext(context);;
33-
if (tokenContext == null) {
34-
Token t = NewRelic.getAgent().getTransaction().getToken();
35-
if(t != null && t.isActive()) {
36-
NRTokenContextKt.addTokenContext(context,t);
37-
} else if(t != null) {
38-
t.expire();
39-
t = null;
40-
}
41-
}
42-
}
7+
public static <A,B,C,D> NRFunction3Wrapper<A,B,C,D> getWrapper(Function3<A,B,C,D> delegate, String phase, String pipelineName) {
8+
if(delegate == null) return null;
439

44-
public static Token getToken(CoroutineContext context) {
45-
TokenContext tokenContext = NRTokenContextKt.getTokenContext(context);
46-
if (tokenContext != null) {
47-
return tokenContext.getToken();
48-
}
49-
return null;
50-
}
10+
if(delegate instanceof NRFunction3Wrapper) return null;
5111

52-
public static void expireToken(CoroutineContext context) {
53-
@Nullable TokenContext tokencontext = NRTokenContextKt.getTokenContextOrNull(context);
54-
if (tokencontext != null) {
55-
Token token = tokencontext.getToken();
56-
token.expire();
57-
token = null;
58-
NRTokenContextKt.removeTokenContext(context);
59-
}
60-
}
12+
return new NRFunction3Wrapper<>(delegate,phase,pipelineName);
13+
}
6114
}

ktor-client-core-3.3.0/src/main/java/com/newrelic/instrumentation/labs/ktor/client/NRFunction3Wrapper.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,20 @@
44
import com.newrelic.api.agent.NewRelic;
55
import com.newrelic.api.agent.Token;
66
import com.newrelic.api.agent.Trace;
7+
import com.newrelic.api.agent.TracedMethod;
78
import kotlin.jvm.functions.Function3;
89

910
public class NRFunction3Wrapper<A,B,C,D> implements Function3<A,B,C,D> {
1011

1112
private final Function3<A,B,C,D> delegate;
13+
private final String pipelineName;
14+
private final String phase;
1215
private static boolean isTransformed = false;
1316

14-
public NRFunction3Wrapper(Function3<A,B,C,D> delegate) {
17+
public NRFunction3Wrapper(Function3<A,B,C,D> delegate, String phase, String pipelineName) {
1518
this.delegate = delegate;
19+
this.phase = phase;
20+
this.pipelineName = pipelineName;
1621
if(!isTransformed) {
1722
AgentBridge.instrumentation.retransformUninstrumentedClass(getClass());
1823
isTransformed = true;
@@ -22,7 +27,10 @@ public NRFunction3Wrapper(Function3<A,B,C,D> delegate) {
2227
@Override
2328
@Trace(dispatcher = true)
2429
public D invoke(A a, B b, C c) {
25-
NewRelic.getAgent().getTracedMethod().addCustomAttribute("Delegate", delegate.getClass().getName());
30+
TracedMethod tracedMethod = NewRelic.getAgent().getTracedMethod();
31+
tracedMethod.setMetricName("Custom","Ktor-Client","Pipeline-Interceptor",pipelineName, phase);
32+
33+
tracedMethod.addCustomAttribute("Delegate", delegate.getClass().getName());
2634
return delegate.invoke(a, b, c);
2735
}
2836
}

ktor-client-core-3.3.0/src/main/java/io/ktor/client/engine/HttpClientEngineKt_Instrumentation.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.newrelic.api.agent.weaver.Weave;
44
import com.newrelic.api.agent.weaver.Weaver;
5-
import com.newrelic.instrumentation.labs.ktor.client.InstrumentationUtils;
65
import kotlin.coroutines.Continuation;
76
import kotlin.coroutines.CoroutineContext;
87
import kotlinx.coroutines.Job;
@@ -11,12 +10,7 @@
1110
public class HttpClientEngineKt_Instrumentation {
1211

1312
public static Object createCallContext(HttpClientEngine engine, Job job, Continuation<? super CoroutineContext> continuation) {
14-
Object ctx = Weaver.callOriginal();
15-
// if(ctx instanceof CoroutineContext) {
16-
// CoroutineContext coroutineContext = (CoroutineContext) ctx;
17-
// InstrumentationUtils.setToken(coroutineContext);
18-
// }
19-
return ctx;
13+
return Weaver.callOriginal();
2014
};
2115

2216
}

ktor-client-core-3.3.0/src/main/java/io/ktor/client/request/BuildersJvmKt_Instrumentation.java

Lines changed: 11 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -12,79 +12,50 @@
1212
import kotlin.jvm.functions.Function1;
1313
import kotlin.coroutines.Continuation;
1414
import java.net.URL;
15+
import java.util.logging.Level;
1516

1617
@Weave(originalName = "io.ktor.client.request.BuildersJvmKt")
1718
public class BuildersJvmKt_Instrumentation {
1819

19-
@Trace(dispatcher = true)
20+
@Trace
2021
public static Object request(HttpClient client, URL url, Function1<? super HttpRequestBuilder, Unit> function1, Continuation<? super HttpResponse> continuation) {
21-
TracedMethod traced = NewRelic.getAgent().getTracedMethod();
22-
traced.setMetricName(new String[] {"Custom","KtorClient","request"});
23-
traced.addCustomAttribute("Method", "Request");
24-
traced.addCustomAttribute("URL", url.toString());
22+
NewRelic.getAgent().getLogger().log(Level.FINE,"Call to BuildersJvmKt.request({0},{1},{2}",url,function1,continuation);
2523
return Weaver.callOriginal();
2624
}
2725

28-
@Trace(dispatcher = true)
26+
@Trace
2927
public static Object get(HttpClient client, URL url, Function1<? super HttpRequestBuilder, kotlin.Unit> function1, Continuation<? super HttpResponse> continuation) {
30-
TracedMethod traced = NewRelic.getAgent().getTracedMethod();
31-
traced.setMetricName(new String[] {"Custom","KtorClient","get"});
32-
traced.addCustomAttribute("Method", "Get");
33-
traced.addCustomAttribute("URL", url.toString());
28+
NewRelic.getAgent().getLogger().log(Level.FINE,"Call to BuildersJvmKt.get({0},{1},{2}",url,function1,continuation);
3429
return Weaver.callOriginal();
3530
}
3631

37-
@Trace(dispatcher = true)
3832
public static Object post(HttpClient client, URL url, Function1<? super HttpRequestBuilder, kotlin.Unit> function1, Continuation<? super HttpResponse> continuation) {
39-
TracedMethod traced = NewRelic.getAgent().getTracedMethod();
40-
traced.setMetricName(new String[] {"Custom","KtorClient","post"});
41-
traced.addCustomAttribute("Method", "Post");
42-
traced.addCustomAttribute("URL", url.toString());
33+
NewRelic.getAgent().getLogger().log(Level.FINE,"Call to BuildersJvmKt.post({0},{1},{2}",url,function1,continuation);
4334
return Weaver.callOriginal();
4435
}
4536

46-
@Trace(dispatcher = true)
4737
public static Object put(HttpClient client, URL url, Function1<? super HttpRequestBuilder, kotlin.Unit> function1, Continuation<? super HttpResponse> continuation ) {
48-
TracedMethod traced = NewRelic.getAgent().getTracedMethod();
49-
traced.setMetricName(new String[] {"Custom","KtorClient","put"});
50-
traced.addCustomAttribute("Method", "Put");
51-
traced.addCustomAttribute("URL", url.toString());
38+
NewRelic.getAgent().getLogger().log(Level.FINE,"Call to BuildersJvmKt.put({0},{1},{2}",url,function1,continuation);
5239
return Weaver.callOriginal();
5340
}
5441

55-
@Trace(dispatcher = true)
5642
public static Object patch(HttpClient client, URL url, Function1<? super HttpRequestBuilder, kotlin.Unit> function1, Continuation<? super HttpResponse> continuation) {
57-
TracedMethod traced = NewRelic.getAgent().getTracedMethod();
58-
traced.setMetricName(new String[] {"Custom","KtorClient","patch"});
59-
traced.addCustomAttribute("Method", "Patch");
60-
traced.addCustomAttribute("URL", url.toString());
43+
NewRelic.getAgent().getLogger().log(Level.FINE,"Call to BuildersJvmKt.patch({0},{1},{2}",url,function1,continuation);
6144
return Weaver.callOriginal();
6245
}
6346

64-
@Trace(dispatcher = true)
6547
public static Object options(HttpClient client, URL url, Function1<? super HttpRequestBuilder, kotlin.Unit> function1, Continuation<? super HttpResponse> continuation) {
66-
TracedMethod traced = NewRelic.getAgent().getTracedMethod();
67-
traced.setMetricName(new String[] {"Custom","KtorClient","options"});
68-
traced.addCustomAttribute("Method", "Options");
69-
traced.addCustomAttribute("URL", url.toString());
48+
NewRelic.getAgent().getLogger().log(Level.FINE,"Call to BuildersJvmKt.options({0},{1},{2}",url,function1,continuation);
7049
return Weaver.callOriginal();
7150
}
7251

73-
@Trace(dispatcher = true)
7452
public static Object head(HttpClient client, URL url, Function1<? super HttpRequestBuilder, kotlin.Unit> function1, Continuation<? super HttpResponse> continuation) {
75-
TracedMethod traced = NewRelic.getAgent().getTracedMethod();
76-
traced.setMetricName(new String[] {"Custom","KtorClient","head"});
77-
traced.addCustomAttribute("Method", "Head");
78-
traced.addCustomAttribute("URL", url.toString());
53+
NewRelic.getAgent().getLogger().log(Level.FINE,"Call to BuildersJvmKt.head({0},{1},{2}",url,function1,continuation);
7954
return Weaver.callOriginal();
8055
}
8156

82-
@Trace(dispatcher = true)
8357
public static Object delete(HttpClient client, URL url, Function1<? super HttpRequestBuilder, kotlin.Unit> function1, Continuation<? super HttpResponse> continuation) {
84-
TracedMethod traced = NewRelic.getAgent().getTracedMethod();
85-
traced.setMetricName(new String[] {"Custom","KtorClient","delete"});
86-
traced.addCustomAttribute("Method", "Delete");
87-
traced.addCustomAttribute("URL", url.toString());
58+
NewRelic.getAgent().getLogger().log(Level.FINE,"Call to BuildersJvmKt.delete({0},{1},{2}",url,function1,continuation);
8859
return Weaver.callOriginal();
8960
}
9061

0 commit comments

Comments
 (0)