Skip to content

Commit 68b1be3

Browse files
committed
[grid] Adding a field to GraphQL to retrieve all sessions
1 parent 227c682 commit 68b1be3

File tree

4 files changed

+49
-29
lines changed

4 files changed

+49
-29
lines changed

java/server/src/org/openqa/selenium/grid/graphql/GraphqlHandler.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,10 @@
5656
import static org.openqa.selenium.remote.http.Contents.utf8String;
5757
import static org.openqa.selenium.remote.http.HttpMethod.OPTIONS;
5858
import static org.openqa.selenium.remote.tracing.HttpTracing.newSpanAsChildOf;
59-
import static org.openqa.selenium.remote.tracing.Tags.HTTP_RESPONSE;
60-
import static org.openqa.selenium.remote.tracing.Tags.HTTP_RESPONSE_EVENT;
6159
import static org.openqa.selenium.remote.tracing.Tags.HTTP_REQUEST;
6260
import static org.openqa.selenium.remote.tracing.Tags.HTTP_REQUEST_EVENT;
61+
import static org.openqa.selenium.remote.tracing.Tags.HTTP_RESPONSE;
62+
import static org.openqa.selenium.remote.tracing.Tags.HTTP_RESPONSE_EVENT;
6363

6464
public class GraphqlHandler implements HttpHandler {
6565

@@ -177,12 +177,12 @@ private RuntimeWiring buildRuntimeWiring() {
177177
.scalar(Types.Uri)
178178
.scalar(Types.Url)
179179
.type("GridQuery", typeWiring -> typeWiring
180-
.dataFetcher("grid", new GridData(
181-
distributor,
182-
newSessionQueuer,
183-
publicUri,
184-
version))
185-
.dataFetcher("session", new SessionData(distributor)))
180+
.dataFetcher("grid", new GridData(
181+
distributor,
182+
newSessionQueuer,
183+
publicUri,
184+
version))
185+
.dataFetcher("session", new SessionData(distributor)))
186186
.build();
187187
}
188188

java/server/src/org/openqa/selenium/grid/graphql/Grid.java

+23
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.openqa.selenium.json.Json;
3030

3131
import java.net.URI;
32+
import java.util.ArrayList;
3233
import java.util.Collection;
3334
import java.util.HashMap;
3435
import java.util.List;
@@ -127,4 +128,26 @@ public List<String> getSessionQueueRequests() {
127128
.collect(Collectors.toList());
128129
}
129130

131+
public List<Session> getSessions() {
132+
List<Session> sessions = new ArrayList<>();
133+
for (NodeStatus status : distributorStatus.get().getNodes()) {
134+
for (Slot slot : status.getSlots()) {
135+
if (slot.getSession().isPresent()) {
136+
org.openqa.selenium.grid.data.Session session = slot.getSession().get();
137+
sessions.add(
138+
new org.openqa.selenium.grid.graphql.Session(
139+
session.getId().toString(),
140+
session.getCapabilities(),
141+
session.getStartTime(),
142+
session.getUri(),
143+
status.getId().toString(),
144+
status.getUri(),
145+
slot)
146+
);
147+
}
148+
}
149+
}
150+
return sessions;
151+
}
152+
130153
}

java/server/src/org/openqa/selenium/grid/graphql/SessionData.java

+17-21
Original file line numberDiff line numberDiff line change
@@ -18,40 +18,24 @@
1818
package org.openqa.selenium.grid.graphql;
1919

2020
import com.google.common.base.Suppliers;
21-
2221
import graphql.schema.DataFetcher;
2322
import graphql.schema.DataFetchingEnvironment;
24-
25-
import java.util.Optional;
26-
import java.util.Set;
27-
import java.util.function.Supplier;
28-
2923
import org.openqa.selenium.grid.data.DistributorStatus;
3024
import org.openqa.selenium.grid.data.NodeStatus;
3125
import org.openqa.selenium.grid.data.Slot;
3226
import org.openqa.selenium.grid.distributor.Distributor;
3327
import org.openqa.selenium.internal.Require;
3428

29+
import java.util.Optional;
30+
import java.util.Set;
31+
import java.util.function.Supplier;
32+
3533
public class SessionData implements DataFetcher {
3634

37-
private final Distributor distributor;
3835
private final Supplier<DistributorStatus> distributorStatus;
3936

4037
public SessionData(Distributor distributor) {
41-
this.distributor = Require.nonNull("Distributor", distributor);
42-
distributorStatus = Suppliers.memoize(distributor::getStatus);
43-
}
44-
45-
private static class SessionInSlot {
46-
private final org.openqa.selenium.grid.data.Session session;
47-
private final NodeStatus node;
48-
private final Slot slot;
49-
50-
SessionInSlot(org.openqa.selenium.grid.data.Session session, NodeStatus node, Slot slot) {
51-
this.session = session;
52-
this.node = node;
53-
this.slot = slot;
54-
}
38+
distributorStatus = Suppliers.memoize(Require.nonNull("Distributor", distributor)::getStatus);
5539
}
5640

5741
@Override
@@ -95,4 +79,16 @@ private SessionInSlot findSession(String sessionId, Set<NodeStatus> nodeStatuses
9579
}
9680
return null;
9781
}
82+
83+
private static class SessionInSlot {
84+
private final org.openqa.selenium.grid.data.Session session;
85+
private final NodeStatus node;
86+
private final Slot slot;
87+
88+
SessionInSlot(org.openqa.selenium.grid.data.Session session, NodeStatus node, Slot slot) {
89+
this.session = session;
90+
this.node = node;
91+
this.slot = slot;
92+
}
93+
}
9894
}

java/server/src/org/openqa/selenium/grid/graphql/selenium-grid-schema.graphqls

+1
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,5 @@ type Grid {
6060
version: String!
6161
sessionQueueSize: Int!
6262
sessionQueueRequests: [String]!
63+
sessions: [Session]!
6364
}

0 commit comments

Comments
 (0)