|
17 | 17 |
|
18 | 18 | package org.openqa.selenium.grid.sessionqueue.local;
|
19 | 19 |
|
| 20 | +import com.google.common.collect.ImmutableMap; |
| 21 | +import org.openqa.selenium.Capabilities; |
20 | 22 | import org.openqa.selenium.events.EventBus;
|
21 | 23 | import org.openqa.selenium.grid.config.Config;
|
22 | 24 | import org.openqa.selenium.grid.data.NewSessionErrorResponse;
|
|
28 | 30 | import org.openqa.selenium.grid.sessionqueue.NewSessionQueue;
|
29 | 31 | import org.openqa.selenium.grid.sessionqueue.config.NewSessionQueueOptions;
|
30 | 32 | import org.openqa.selenium.internal.Require;
|
| 33 | +import org.openqa.selenium.remote.NewSessionPayload; |
31 | 34 | import org.openqa.selenium.remote.http.HttpRequest;
|
32 | 35 |
|
33 | 36 | import org.openqa.selenium.remote.server.jmx.JMXHelper;
|
|
40 | 43 | import org.openqa.selenium.remote.tracing.Span;
|
41 | 44 | import org.openqa.selenium.remote.tracing.Tracer;
|
42 | 45 |
|
| 46 | +import java.io.IOException; |
| 47 | +import java.io.Reader; |
43 | 48 | import java.time.Duration;
|
44 | 49 | import java.util.Deque;
|
45 | 50 | import java.util.HashMap;
|
| 51 | +import java.util.List; |
| 52 | +import java.util.Iterator; |
46 | 53 | import java.util.Map;
|
47 | 54 | import java.util.Optional;
|
| 55 | +import java.util.Objects; |
48 | 56 | import java.util.concurrent.ConcurrentLinkedDeque;
|
49 | 57 | import java.util.concurrent.Executors;
|
50 | 58 | import java.util.concurrent.ScheduledExecutorService;
|
|
54 | 62 | import java.util.concurrent.locks.ReentrantReadWriteLock;
|
55 | 63 | import java.util.logging.Level;
|
56 | 64 | import java.util.logging.Logger;
|
| 65 | +import java.util.stream.Collectors; |
| 66 | + |
| 67 | +import static org.openqa.selenium.remote.http.Contents.reader; |
57 | 68 |
|
58 | 69 | @ManagedService(objectName = "org.seleniumhq.grid:type=SessionQueue,name=LocalSessionQueue",
|
59 | 70 | description = "New session queue")
|
@@ -100,6 +111,36 @@ public int getQueueSize() {
|
100 | 111 | }
|
101 | 112 | }
|
102 | 113 |
|
| 114 | + @Override |
| 115 | + public Map<String, Object> getQueueContents() { |
| 116 | + Lock readLock = lock.readLock(); |
| 117 | + readLock.lock(); |
| 118 | + try { |
| 119 | + List<Capabilities> capabilitiesList = sessionRequests.stream() |
| 120 | + .map(SessionRequest::getHttpRequest) |
| 121 | + .map(req -> { |
| 122 | + try ( |
| 123 | + Reader reader = reader(req); |
| 124 | + NewSessionPayload payload = NewSessionPayload.create(reader)) { |
| 125 | + return payload.stream().iterator(); |
| 126 | + } catch (IOException e) { |
| 127 | + LOG.warning("IOException while mapping to capabilities" + e.getMessage()); |
| 128 | + } |
| 129 | + return null; |
| 130 | + }) |
| 131 | + .filter(Objects::nonNull) |
| 132 | + .filter(Iterator::hasNext) |
| 133 | + .map(Iterator::next) |
| 134 | + .collect(Collectors.toList()); |
| 135 | + |
| 136 | + return ImmutableMap.of( |
| 137 | + "request-count", capabilitiesList.size(), |
| 138 | + "request-payloads", capabilitiesList); |
| 139 | + } finally { |
| 140 | + readLock.unlock(); |
| 141 | + } |
| 142 | + } |
| 143 | + |
103 | 144 | @Override
|
104 | 145 | public boolean offerLast(HttpRequest request, RequestId requestId) {
|
105 | 146 | Require.nonNull("New Session request", request);
|
|
0 commit comments