A simple router that is aware of the selenium-protocol.
| 37 | |
| 38 | /** A simple router that is aware of the selenium-protocol. */ |
| 39 | public class Router implements HasReadyState, Routable, Closeable { |
| 40 | |
| 41 | private final Routable routes; |
| 42 | private final SessionMap sessions; |
| 43 | private final Distributor distributor; |
| 44 | private final NewSessionQueue queue; |
| 45 | private final HandleSession sessionHandler; |
| 46 | |
| 47 | public Router( |
| 48 | Tracer tracer, |
| 49 | HttpClient.Factory clientFactory, |
| 50 | SessionMap sessions, |
| 51 | NewSessionQueue queue, |
| 52 | Distributor distributor) { |
| 53 | Require.nonNull("Tracer to use", tracer); |
| 54 | Require.nonNull("HTTP client factory", clientFactory); |
| 55 | |
| 56 | this.sessions = Require.nonNull("Session map", sessions); |
| 57 | this.queue = Require.nonNull("New Session Request Queue", queue); |
| 58 | this.distributor = Require.nonNull("Distributor", distributor); |
| 59 | |
| 60 | this.sessionHandler = new HandleSession(tracer, clientFactory, sessions); |
| 61 | |
| 62 | routes = |
| 63 | combine( |
| 64 | get("/status").to(() -> new GridStatusHandler(tracer, distributor)), |
| 65 | sessions.with(new SpanDecorator(tracer, req -> "session_map")), |
| 66 | queue.with(new SpanDecorator(tracer, req -> "session_queue")), |
| 67 | distributor.with(new SpanDecorator(tracer, req -> "distributor")), |
| 68 | matching(req -> req.getUri().startsWith("/session/")).to(() -> sessionHandler)); |
| 69 | } |
| 70 | |
| 71 | @Override |
| 72 | public boolean isReady() { |
| 73 | try { |
| 74 | return Set.of(distributor, sessions, queue).parallelStream() |
| 75 | .map(HasReadyState::isReady) |
| 76 | .reduce(true, Boolean::logicalAnd); |
| 77 | } catch (RuntimeException e) { |
| 78 | return false; |
| 79 | } |
| 80 | } |
| 81 | |
| 82 | @Override |
| 83 | public boolean matches(HttpRequest req) { |
| 84 | return routes.matches(req); |
| 85 | } |
| 86 | |
| 87 | @Override |
| 88 | public HttpResponse execute(HttpRequest req) { |
| 89 | return routes.execute(req); |
| 90 | } |
| 91 | |
| 92 | @Override |
| 93 | public void close() { |
| 94 | sessionHandler.close(); |
| 95 | } |
| 96 | } |
nothing calls this directly
no outgoing calls
no test coverage detected