Skip to content

Commit 342382f

Browse files
author
Adrian Cole
committed
Implements parsing of http route and uses it by default for span name
1 parent 7696082 commit 342382f

File tree

18 files changed

+784
-33
lines changed

18 files changed

+784
-33
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
package brave.jersey.server;
2+
3+
import java.net.URI;
4+
import java.util.List;
5+
import java.util.regex.MatchResult;
6+
import javax.ws.rs.core.MultivaluedMap;
7+
import javax.ws.rs.core.PathSegment;
8+
import javax.ws.rs.core.UriBuilder;
9+
import org.glassfish.jersey.server.ExtendedUriInfo;
10+
import org.glassfish.jersey.server.model.Resource;
11+
import org.glassfish.jersey.server.model.ResourceMethod;
12+
import org.glassfish.jersey.server.model.RuntimeResource;
13+
import org.glassfish.jersey.uri.UriTemplate;
14+
15+
class FakeExtendedUriInfo implements ExtendedUriInfo {
16+
final URI baseURI;
17+
final List<UriTemplate> matchedTemplates;
18+
19+
FakeExtendedUriInfo(URI baseURI, List<UriTemplate> matchedTemplates) {
20+
this.baseURI = baseURI;
21+
this.matchedTemplates = matchedTemplates;
22+
}
23+
24+
@Override public Throwable getMappedThrowable() {
25+
return null;
26+
}
27+
28+
@Override public List<MatchResult> getMatchedResults() {
29+
return null;
30+
}
31+
32+
@Override public List<UriTemplate> getMatchedTemplates() {
33+
return matchedTemplates;
34+
}
35+
36+
@Override public List<PathSegment> getPathSegments(String name) {
37+
return null;
38+
}
39+
40+
@Override public List<PathSegment> getPathSegments(String name, boolean decode) {
41+
return null;
42+
}
43+
44+
@Override public List<RuntimeResource> getMatchedRuntimeResources() {
45+
return null;
46+
}
47+
48+
@Override public ResourceMethod getMatchedResourceMethod() {
49+
return null;
50+
}
51+
52+
@Override public Resource getMatchedModelResource() {
53+
return null;
54+
}
55+
56+
@Override public List<ResourceMethod> getMatchedResourceLocators() {
57+
return null;
58+
}
59+
60+
@Override public List<Resource> getLocatorSubResources() {
61+
return null;
62+
}
63+
64+
@Override public String getPath() {
65+
return null;
66+
}
67+
68+
@Override public String getPath(boolean decode) {
69+
return null;
70+
}
71+
72+
@Override public List<PathSegment> getPathSegments() {
73+
return null;
74+
}
75+
76+
@Override public List<PathSegment> getPathSegments(boolean decode) {
77+
return null;
78+
}
79+
80+
@Override public URI getRequestUri() {
81+
return null;
82+
}
83+
84+
@Override public UriBuilder getRequestUriBuilder() {
85+
return null;
86+
}
87+
88+
@Override public URI getAbsolutePath() {
89+
return null;
90+
}
91+
92+
@Override public UriBuilder getAbsolutePathBuilder() {
93+
return null;
94+
}
95+
96+
@Override public URI getBaseUri() {
97+
return baseURI;
98+
}
99+
100+
@Override public UriBuilder getBaseUriBuilder() {
101+
return null;
102+
}
103+
104+
@Override public MultivaluedMap<String, String> getPathParameters() {
105+
return null;
106+
}
107+
108+
@Override public MultivaluedMap<String, String> getPathParameters(boolean decode) {
109+
return null;
110+
}
111+
112+
@Override public MultivaluedMap<String, String> getQueryParameters() {
113+
return null;
114+
}
115+
116+
@Override public MultivaluedMap<String, String> getQueryParameters(boolean decode) {
117+
return null;
118+
}
119+
120+
@Override public List<String> getMatchedURIs() {
121+
return null;
122+
}
123+
124+
@Override public List<String> getMatchedURIs(boolean decode) {
125+
return null;
126+
}
127+
128+
@Override public List<Object> getMatchedResources() {
129+
return null;
130+
}
131+
132+
@Override public URI resolve(URI uri) {
133+
return null;
134+
}
135+
136+
@Override public URI relativize(URI uri) {
137+
return null;
138+
}
139+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
/**
2+
* Copyright 2015-2016 The OpenZipkin Authors
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5+
* in compliance with the License. You may obtain a copy of the License at
6+
*
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
*
9+
* Unless required by applicable law or agreed to in writing, software distributed under the License
10+
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11+
* or implied. See the License for the specific language governing permissions and limitations under
12+
* the License.
13+
*/
14+
package brave.jersey.server;
15+
16+
import java.net.URI;
17+
import java.util.Arrays;
18+
import java.util.concurrent.TimeUnit;
19+
import org.glassfish.jersey.internal.MapPropertiesDelegate;
20+
import org.glassfish.jersey.server.ContainerRequest;
21+
import org.glassfish.jersey.server.ContainerResponse;
22+
import org.glassfish.jersey.server.ExtendedUriInfo;
23+
import org.glassfish.jersey.uri.PathTemplate;
24+
import org.jboss.resteasy.core.ServerResponse;
25+
import org.openjdk.jmh.annotations.Benchmark;
26+
import org.openjdk.jmh.annotations.BenchmarkMode;
27+
import org.openjdk.jmh.annotations.Fork;
28+
import org.openjdk.jmh.annotations.Measurement;
29+
import org.openjdk.jmh.annotations.Mode;
30+
import org.openjdk.jmh.annotations.OutputTimeUnit;
31+
import org.openjdk.jmh.annotations.Scope;
32+
import org.openjdk.jmh.annotations.State;
33+
import org.openjdk.jmh.annotations.Warmup;
34+
import org.openjdk.jmh.runner.Runner;
35+
import org.openjdk.jmh.runner.RunnerException;
36+
import org.openjdk.jmh.runner.options.Options;
37+
import org.openjdk.jmh.runner.options.OptionsBuilder;
38+
39+
@Measurement(iterations = 5, time = 1)
40+
@Warmup(iterations = 10, time = 1)
41+
@Fork(3)
42+
@BenchmarkMode(Mode.Throughput)
43+
@OutputTimeUnit(TimeUnit.MICROSECONDS)
44+
@State(Scope.Thread)
45+
public class TracingApplicationEventListenerAdapterBenchmarks {
46+
FakeExtendedUriInfo uriInfo = new FakeExtendedUriInfo(URI.create("/"),
47+
Arrays.asList(
48+
new PathTemplate("/"),
49+
new PathTemplate("/items/{itemId}")
50+
)
51+
);
52+
ContainerResponse response = new ContainerResponse(
53+
new ContainerRequest(
54+
URI.create("/"), null, null, null, new MapPropertiesDelegate()
55+
) {
56+
@Override public ExtendedUriInfo getUriInfo() {
57+
return uriInfo;
58+
}
59+
}, new ServerResponse());
60+
61+
FakeExtendedUriInfo nestedUriInfo = new FakeExtendedUriInfo(URI.create("/"),
62+
Arrays.asList(
63+
new PathTemplate("/"),
64+
new PathTemplate("/items/{itemId}"),
65+
new PathTemplate("/"),
66+
new PathTemplate("/nested")
67+
)
68+
);
69+
ContainerResponse nestedResponse = new ContainerResponse(
70+
new ContainerRequest(
71+
URI.create("/"), null, null, null, new MapPropertiesDelegate()
72+
) {
73+
@Override public ExtendedUriInfo getUriInfo() {
74+
return nestedUriInfo;
75+
}
76+
}, new ServerResponse());
77+
78+
TracingApplicationEventListener.Adapter adapter = new TracingApplicationEventListener.Adapter();
79+
80+
@Benchmark public String parseRoute() {
81+
return adapter.route(response);
82+
}
83+
84+
@Benchmark public String parseRoute_nested() {
85+
return adapter.route(nestedResponse);
86+
}
87+
88+
// Convenience main entry-point
89+
public static void main(String[] args) throws RunnerException {
90+
Options opt = new OptionsBuilder()
91+
.include(".*" + TracingApplicationEventListenerAdapterBenchmarks.class.getSimpleName())
92+
.build();
93+
94+
new Runner(opt).run();
95+
}
96+
}

0 commit comments

Comments
 (0)