Skip to content

Commit e84cdb9

Browse files
asvanbergtrask
andauthored
Improve span naming when serving a resource (Wicket) (open-telemetry#18312)
Co-authored-by: Trask Stalnaker <trask.stalnaker@gmail.com>
1 parent a27236f commit e84cdb9

5 files changed

Lines changed: 65 additions & 0 deletions

File tree

instrumentation/wicket-8.0/common-testing/src/main/java/hello/HelloApplication.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ protected void init() {
2020
super.init();
2121

2222
mountPage("/exception", ExceptionPage.class);
23+
mountResource("/resource", new HelloResource());
2324
}
2425

2526
@Override
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package hello;
7+
8+
import org.apache.wicket.request.resource.CharSequenceResource;
9+
import org.apache.wicket.request.resource.IResource;
10+
import org.apache.wicket.request.resource.ResourceReference;
11+
12+
public class HelloResource extends ResourceReference {
13+
private static final long serialVersionUID = 1L;
14+
15+
public HelloResource() {
16+
super("hello-resource");
17+
}
18+
19+
@Override
20+
public IResource getResource() {
21+
return new CharSequenceResource("text/plain", "hello resource");
22+
}
23+
}

instrumentation/wicket-8.0/common-testing/src/main/java/io/opentelemetry/javaagent/instrumentation/wicket/v8_0/AbstractWicketTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,4 +76,21 @@ void testException() {
7676
.hasStatus(StatusData.error())
7777
.hasException(new Exception("test exception"))));
7878
}
79+
80+
@Test
81+
void testResource() {
82+
AggregatedHttpResponse response =
83+
client.get(address.resolve("wicket-test/resource").toString()).aggregate().join();
84+
85+
assertThat(response.status().code()).isEqualTo(200);
86+
assertThat(response.contentUtf8()).isEqualTo("hello resource");
87+
88+
testing.waitAndAssertTraces(
89+
trace ->
90+
trace.hasSpansSatisfyingExactly(
91+
span ->
92+
span.hasName("GET " + getContextPath() + "/wicket-test/hello.HelloResource")
93+
.hasKind(SpanKind.SERVER)
94+
.hasNoParent()));
95+
}
7996
}

instrumentation/wicket-8.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/wicket/v8_0/RequestHandlerExecutorInstrumentation.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import net.bytebuddy.matcher.ElementMatcher;
1919
import org.apache.wicket.core.request.handler.IPageClassRequestHandler;
2020
import org.apache.wicket.request.IRequestHandler;
21+
import org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandler;
2122

2223
class RequestHandlerExecutorInstrumentation implements TypeInstrumentation {
2324

@@ -45,6 +46,13 @@ public static void onEnter(@Advice.Argument(0) IRequestHandler handler) {
4546
WicketServerSpanNaming.getServerSpanName(),
4647
(IPageClassRequestHandler) handler);
4748
}
49+
if (handler instanceof ResourceReferenceRequestHandler) {
50+
HttpServerRoute.update(
51+
Java8BytecodeBridge.currentContext(),
52+
CONTROLLER,
53+
WicketServerSpanNaming.getServerSpanNameResource(),
54+
(ResourceReferenceRequestHandler) handler);
55+
}
4856
}
4957
}
5058
}

instrumentation/wicket-8.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/wicket/v8_0/WicketServerSpanNaming.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
1010
import org.apache.wicket.core.request.handler.IPageClassRequestHandler;
1111
import org.apache.wicket.request.cycle.RequestCycle;
12+
import org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandler;
1213

1314
public class WicketServerSpanNaming {
1415

@@ -22,9 +23,24 @@ public class WicketServerSpanNaming {
2223
return ServletContextPath.prepend(context, filterPath + "/" + pageName);
2324
};
2425

26+
private static final HttpServerRouteGetter<ResourceReferenceRequestHandler>
27+
serverSpanNameResource =
28+
(context, handler) -> {
29+
// using class name as page name
30+
String resourceName = handler.getResourceReference().getClass().getName();
31+
// wicket filter mapping without wildcard, if wicket filter is mapped to /*
32+
// this will be an empty string
33+
String filterPath = RequestCycle.get().getRequest().getFilterPath();
34+
return ServletContextPath.prepend(context, filterPath + "/" + resourceName);
35+
};
36+
2537
public static HttpServerRouteGetter<IPageClassRequestHandler> getServerSpanName() {
2638
return serverSpanName;
2739
}
2840

41+
public static HttpServerRouteGetter<ResourceReferenceRequestHandler> getServerSpanNameResource() {
42+
return serverSpanNameResource;
43+
}
44+
2945
private WicketServerSpanNaming() {}
3046
}

0 commit comments

Comments
 (0)