Skip to content

Commit 7c27774

Browse files
committed
[tracing] Add basic tracing to the session map
1 parent 895f0c2 commit 7c27774

File tree

20 files changed

+153
-54
lines changed

20 files changed

+153
-54
lines changed

java/server/src/org/openqa/selenium/grid/commands/Hub.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public Executable configure(String... args) {
106106

107107
CombinedHandler handler = new CombinedHandler();
108108

109-
SessionMap sessions = new LocalSessionMap(bus);
109+
SessionMap sessions = new LocalSessionMap(tracer, bus);
110110
handler.addHandler(sessions);
111111

112112
BaseServerOptions serverOptions = new BaseServerOptions(config);

java/server/src/org/openqa/selenium/grid/commands/Standalone.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ public Executable configure(String... args) {
144144
combinedHandler,
145145
HttpClient.Factory.createDefault()));
146146

147-
SessionMap sessions = new LocalSessionMap(bus);
147+
SessionMap sessions = new LocalSessionMap(tracer, bus);
148148
combinedHandler.addHandler(sessions);
149149
Distributor distributor = new LocalDistributor(tracer, bus, clientFactory, sessions);
150150
combinedHandler.addHandler(distributor);

java/server/src/org/openqa/selenium/grid/distributor/httpd/DistributorServer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public Executable configure(String... args) {
111111

112112
HttpClient.Factory clientFactory = new TracedHttpClient.Factory(tracer, HttpClient.Factory.createDefault());
113113

114-
SessionMap sessions = new SessionMapOptions(config).getSessionMap(clientFactory);
114+
SessionMap sessions = new SessionMapOptions(config).getSessionMap(tracer, clientFactory);
115115

116116
Distributor distributor = new LocalDistributor(
117117
tracer,

java/server/src/org/openqa/selenium/grid/router/httpd/RouterServer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public Executable configure(String... args) {
105105
HttpClient.Factory clientFactory = new TracedHttpClient.Factory(tracer, HttpClient.Factory.createDefault());
106106

107107
SessionMapOptions sessionsOptions = new SessionMapOptions(config);
108-
SessionMap sessions = sessionsOptions.getSessionMap(clientFactory);
108+
SessionMap sessions = sessionsOptions.getSessionMap(tracer, clientFactory);
109109

110110
BaseServerOptions serverOptions = new BaseServerOptions(config);
111111

java/server/src/org/openqa/selenium/grid/sessionmap/AddToSessionMap.java

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,34 +18,59 @@
1818
package org.openqa.selenium.grid.sessionmap;
1919

2020
import com.google.common.collect.ImmutableMap;
21+
import io.opentracing.Span;
22+
import io.opentracing.SpanContext;
23+
import io.opentracing.Tracer;
24+
import io.opentracing.tag.Tags;
2125
import org.openqa.selenium.grid.data.Session;
2226
import org.openqa.selenium.json.Json;
2327
import org.openqa.selenium.remote.http.HttpHandler;
2428
import org.openqa.selenium.remote.http.HttpRequest;
2529
import org.openqa.selenium.remote.http.HttpResponse;
30+
import org.openqa.selenium.remote.tracing.HttpTracing;
2631

2732
import java.util.Objects;
2833

34+
import static io.opentracing.tag.Tags.HTTP_METHOD;
35+
import static io.opentracing.tag.Tags.HTTP_URL;
2936
import static org.openqa.selenium.remote.http.Contents.string;
3037
import static org.openqa.selenium.remote.http.Contents.utf8String;
3138

3239
class AddToSessionMap implements HttpHandler {
3340

41+
private final Tracer tracer;
3442
private final Json json;
3543
private final SessionMap sessions;
3644

37-
AddToSessionMap(Json json, SessionMap sessions) {
45+
AddToSessionMap(Tracer tracer, Json json, SessionMap sessions) {
46+
this.tracer = tracer;
3847
this.json = Objects.requireNonNull(json);
3948
this.sessions = Objects.requireNonNull(sessions);
4049
}
4150

4251
@Override
4352
public HttpResponse execute(HttpRequest req) {
44-
Session session = json.toType(string(req), Session.class);
45-
Objects.requireNonNull(session, "Session to add must be set");
53+
SpanContext parent = HttpTracing.extract(tracer, req);
54+
Span current = tracer.scopeManager().activeSpan();
55+
Span span = tracer.buildSpan("sessions.add_session").asChildOf(parent).start();
56+
tracer.scopeManager().activate(span);
57+
try {
58+
HTTP_METHOD.set(span, req.getMethod().toString());
59+
HTTP_URL.set(span, req.getUri());
4660

47-
sessions.add(session);
61+
Session session = json.toType(string(req), Session.class);
62+
Objects.requireNonNull(session, "Session to add must be set");
4863

49-
return new HttpResponse().setContent(utf8String(json.toJson(ImmutableMap.of("value", true))));
64+
span.setTag("session.id", session.getId().toString());
65+
span.setTag("session.capabilities", session.getCapabilities().toString());
66+
span.setTag("session.uri", session.getUri().toString());
67+
68+
sessions.add(session);
69+
70+
return new HttpResponse().setContent(utf8String(json.toJson(ImmutableMap.of("value", true))));
71+
} finally {
72+
span.finish();
73+
tracer.scopeManager().activate(current);
74+
}
5075
}
5176
}

java/server/src/org/openqa/selenium/grid/sessionmap/GetFromSessionMap.java

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,33 +18,58 @@
1818
package org.openqa.selenium.grid.sessionmap;
1919

2020
import com.google.common.collect.ImmutableMap;
21+
import io.opentracing.Span;
22+
import io.opentracing.SpanContext;
23+
import io.opentracing.Tracer;
2124
import org.openqa.selenium.grid.data.Session;
2225
import org.openqa.selenium.json.Json;
2326
import org.openqa.selenium.remote.SessionId;
2427
import org.openqa.selenium.remote.http.HttpHandler;
2528
import org.openqa.selenium.remote.http.HttpRequest;
2629
import org.openqa.selenium.remote.http.HttpResponse;
30+
import org.openqa.selenium.remote.tracing.HttpTracing;
2731

2832
import java.util.Objects;
2933

34+
import static io.opentracing.tag.Tags.HTTP_METHOD;
35+
import static io.opentracing.tag.Tags.HTTP_URL;
3036
import static org.openqa.selenium.remote.http.Contents.utf8String;
3137

3238
class GetFromSessionMap implements HttpHandler {
3339

40+
private final Tracer tracer;
3441
private final Json json;
3542
private final SessionMap sessions;
36-
private SessionId id;
43+
private final SessionId id;
3744

38-
public GetFromSessionMap(Json json, SessionMap sessions, SessionId id) {
45+
public GetFromSessionMap(Tracer tracer, Json json, SessionMap sessions, SessionId id) {
46+
this.tracer = Objects.requireNonNull(tracer);
3947
this.json = Objects.requireNonNull(json);
4048
this.sessions = Objects.requireNonNull(sessions);
4149
this.id = Objects.requireNonNull(id);
4250
}
4351

4452
@Override
4553
public HttpResponse execute(HttpRequest req) {
46-
Session session = sessions.get(id);
54+
SpanContext parent = HttpTracing.extract(tracer, req);
55+
Span current = tracer.scopeManager().activeSpan();
56+
Span span = tracer.buildSpan("sessions.get_session").asChildOf(parent).start();
57+
tracer.scopeManager().activate(span);
4758

48-
return new HttpResponse().setContent(utf8String(json.toJson(ImmutableMap.of("value", session))));
59+
try {
60+
HTTP_METHOD.set(span, req.getMethod().toString());
61+
HTTP_URL.set(span, req.getUri());
62+
63+
Session session = sessions.get(id);
64+
65+
span.setTag("session.id", session.getId().toString());
66+
span.setTag("session.capabilities", session.getCapabilities().toString());
67+
span.setTag("session.uri", session.getUri().toString());
68+
69+
return new HttpResponse().setContent(utf8String(json.toJson(ImmutableMap.of("value", session))));
70+
} finally {
71+
span.finish();
72+
tracer.scopeManager().activate(current);
73+
}
4974
}
5075
}

java/server/src/org/openqa/selenium/grid/sessionmap/RemoveFromSession.java

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,26 +17,50 @@
1717

1818
package org.openqa.selenium.grid.sessionmap;
1919

20+
import io.opentracing.Span;
21+
import io.opentracing.SpanContext;
22+
import io.opentracing.Tracer;
2023
import org.openqa.selenium.remote.SessionId;
2124
import org.openqa.selenium.remote.http.HttpHandler;
2225
import org.openqa.selenium.remote.http.HttpRequest;
2326
import org.openqa.selenium.remote.http.HttpResponse;
27+
import org.openqa.selenium.remote.tracing.HttpTracing;
2428

2529
import java.util.Objects;
2630

31+
import static io.opentracing.tag.Tags.HTTP_METHOD;
32+
import static io.opentracing.tag.Tags.HTTP_URL;
33+
34+
2735
class RemoveFromSession implements HttpHandler {
2836

37+
private final Tracer tracer;
2938
private final SessionMap sessions;
30-
private SessionId id;
39+
private final SessionId id;
3140

32-
public RemoveFromSession(SessionMap sessions, SessionId id) {
41+
public RemoveFromSession(Tracer tracer, SessionMap sessions, SessionId id) {
42+
this.tracer = Objects.requireNonNull(tracer);
3343
this.sessions = Objects.requireNonNull(sessions);
3444
this.id = Objects.requireNonNull(id);
3545
}
3646

3747
@Override
3848
public HttpResponse execute(HttpRequest req) {
39-
sessions.remove(id);
40-
return new HttpResponse();
49+
SpanContext parent = HttpTracing.extract(tracer, req);
50+
Span current = tracer.scopeManager().activeSpan();
51+
Span span = tracer.buildSpan("sessions.remove_session").asChildOf(parent).start();
52+
tracer.scopeManager().activate(span);
53+
54+
try {
55+
HTTP_METHOD.set(span, req.getMethod().toString());
56+
HTTP_URL.set(span, req.getUri());
57+
span.setTag("session.id", String.valueOf(id));
58+
59+
sessions.remove(id);
60+
return new HttpResponse();
61+
} finally {
62+
span.finish();
63+
tracer.scopeManager().activate(current);
64+
}
4165
}
4266
}

java/server/src/org/openqa/selenium/grid/sessionmap/SessionMap.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
package org.openqa.selenium.grid.sessionmap;
1919

20+
import io.opentracing.Tracer;
2021
import org.openqa.selenium.NoSuchSessionException;
2122
import org.openqa.selenium.grid.data.Session;
2223
import org.openqa.selenium.json.Json;
@@ -28,6 +29,7 @@
2829
import org.openqa.selenium.remote.http.Route;
2930

3031
import java.net.URI;
32+
import java.util.Objects;
3133

3234
import static org.openqa.selenium.remote.http.Route.combine;
3335
import static org.openqa.selenium.remote.http.Route.delete;
@@ -67,6 +69,8 @@
6769
*/
6870
public abstract class SessionMap implements Routable, HttpHandler {
6971

72+
protected final Tracer tracer;
73+
7074
private final Route routes;
7175

7276
public abstract boolean add(Session session);
@@ -75,14 +79,16 @@ public abstract class SessionMap implements Routable, HttpHandler {
7579

7680
public abstract void remove(SessionId id);
7781

78-
public SessionMap() {
82+
public SessionMap(Tracer tracer) {
83+
this.tracer = Objects.requireNonNull(tracer);
84+
7985
Json json = new Json();
8086
routes = combine(
81-
post("/se/grid/session").to(() -> new AddToSessionMap(json, this)),
87+
post("/se/grid/session").to(() -> new AddToSessionMap(tracer, json, this)),
8288
Route.get("/se/grid/session/{sessionId}")
83-
.to((params) -> new GetFromSessionMap(json, this, new SessionId(params.get("sessionId")))),
89+
.to((params) -> new GetFromSessionMap(tracer, json, this, new SessionId(params.get("sessionId")))),
8490
delete("/se/grid/session/{sessionId}")
85-
.to((params) -> new RemoveFromSession(this, new SessionId(params.get("sessionId")))));
91+
.to((params) -> new RemoveFromSession(tracer, this, new SessionId(params.get("sessionId")))));
8692
}
8793

8894
@Override

java/server/src/org/openqa/selenium/grid/sessionmap/config/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@ java_library(
1010
"//java/server/src/org/openqa/selenium/grid/sessionmap",
1111
"//java/server/src/org/openqa/selenium/grid/sessionmap/remote",
1212
"//third_party/java/beust:jcommander",
13+
"//third_party/java/opentracing:opentracing-api",
1314
],
1415
)

java/server/src/org/openqa/selenium/grid/sessionmap/config/SessionMapOptions.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
package org.openqa.selenium.grid.sessionmap.config;
1919

20+
import io.opentracing.Tracer;
2021
import org.openqa.selenium.grid.config.Config;
2122
import org.openqa.selenium.grid.config.ConfigException;
2223
import org.openqa.selenium.grid.sessionmap.SessionMap;
@@ -35,9 +36,9 @@ public SessionMapOptions(Config config) {
3536
this.config = config;
3637
}
3738

38-
public SessionMap getSessionMap(HttpClient.Factory clientFactory) {
39+
public SessionMap getSessionMap(Tracer tracer, HttpClient.Factory clientFactory) {
3940
HttpClient client = clientFactory.createClient(getSessionMapUrl());
40-
return new RemoteSessionMap(client);
41+
return new RemoteSessionMap(tracer, client);
4142
}
4243

4344
private URL getSessionMapUrl() {

0 commit comments

Comments
 (0)