Java 类org.openqa.selenium.remote.server.log.PerSessionLogHandler 实例源码

项目:grid-refactor-remote-server    文件:DeleteSession.java   
@Override
public Void call() throws Exception {

  WebDriver driver = getDriver();
  if (driver == null) {
    return null;
  }

  try {
    LoggingManager.perSessionLogHandler().fetchAndStoreLogsFromDriver(getSessionId(), driver);
  } catch (Throwable ignored) {
    // A failure to retrieve logs should not cause a test to fail.
    // Silently ignore this exception.
  }

  driver.quit();

  // Yes, this is funky. See javadocs on PerSessionLogHandler#clearThreadTempLogs for details.
  final PerSessionLogHandler logHandler = LoggingManager.perSessionLogHandler();
    /*
        We may be storing logging information on 2 different threads, the servlet container
        thread and the thread executing commands
        All this ugliness would go away if we just handled create and delete of sessions fully
        inside ResultConfig because then we could avoid switching threads and there will
        not be logevents that do not have a session present
        Additionally; if we ever get non-session bound logging here, it will come in
        the incorrect order. But that should only happen on create/delete, right ?
     */
  logHandler.transferThreadTempLogsToSessionLogs(getSessionId());
  return null;
}
项目:grid-refactor-remote-server    文件:SessionCleaner.java   
void checkExpiry() {
  for (SessionId sessionId : driverSessions.getSessions()) {
    Session session = driverSessions.get(sessionId);
    if (session != null) {
      boolean useDeleteSession = false;
      boolean killed = false;

      boolean inUse = session.isInUse();
      if (!inUse && session.isTimedOut(clientGoneTimeout)) {
        useDeleteSession = true;
        log.info("Session " + session.getSessionId() + " deleted due to client timeout");
      }
      if (inUse && session.isTimedOut(insideBrowserTimeout)) {
        WebDriver driver = session.getDriver();
        if (driver instanceof EventFiringWebDriver){
          driver = ((EventFiringWebDriver)driver).getWrappedDriver();
        }
        if (driver instanceof Killable) {
          //session.interrupt();
          ((Killable) driver).kill();
          killed = true;
          log.warning("Browser killed and session " + session.getSessionId() + " terminated due to in-browser timeout.");
        } else {
          useDeleteSession = true;
          log.warning("Session " + session.getSessionId() + " deleted due to in-browser timeout. " +
                      "Terminating driver with DeleteSession since it does not support Killable, "
                      + "the driver in question does not support selenium-server timeouts fully");
        }
      }

      if (useDeleteSession) {
        DeleteSession deleteSession = new DeleteSession(session);
        try {
          deleteSession.call();
        } catch (Exception e) {
          throw new RuntimeException(e);
        }
      }

      if (useDeleteSession || killed) {
        driverSessions.deleteSession(sessionId);
        final PerSessionLogHandler logHandler = LoggingManager.perSessionLogHandler();
        logHandler.transferThreadTempLogsToSessionLogs(sessionId);
        logHandler.removeSessionLogs(sessionId);
      }
    }
  }
}