package com.pojosontheweb.selenium;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.util.EntityUtils;
import org.openqa.grid.common.RegistrationRequest;
import org.openqa.grid.internal.Registry;
import org.openqa.grid.internal.TestSession;
import org.openqa.selenium.remote.internal.HttpClientFactory;
import java.util.logging.Logger;
public class NodeProxy extends org.openqa.grid.selenium.proxy.DefaultRemoteProxy {
private static final Logger log = Logger.getLogger(NodeProxy.class.getName());
private final HttpClient client;
private final HttpHost remoteHost;
private final String serviceUrl;
public NodeProxy(RegistrationRequest request, Registry registry) {
super(request, registry);
remoteHost = new HttpHost(getRemoteHost().getHost(), getRemoteHost().getPort());
HttpClientFactory httpClientFactory = new HttpClientFactory();
client = httpClientFactory.getHttpClient();
serviceUrl = getRemoteHost() + "/extra/RecorderServlet";
}
@Override
public void beforeSession(TestSession session) {
super.beforeSession(session);
HttpPost r = new HttpPost(serviceUrl + "?command=start");
try {
HttpResponse response = client.execute(remoteHost, r);
if(response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
log.warning("Could not start video reporting: " + EntityUtils.toString(response.getEntity()));
return;
}
log.info("Started recording for new session on node: " + getId());
} catch (Exception e) {
log.warning("Could not start video reporting due to exception: " + e.getMessage());
e.printStackTrace();
}
finally {
r.releaseConnection();
}
}
@Override
public void afterSession(TestSession session) {
super.afterSession(session);
HttpPost r = new HttpPost(serviceUrl + "?command=stop");
try {
HttpResponse response = client.execute(remoteHost, r);
if(response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
log.warning("Could not stop video reporting: " + EntityUtils.toString(response.getEntity()));
return;
}
log.info("Stopped recording for new session on node: " + getId());
} catch (Exception e) {
log.warning("Could not stop video reporting due to exception: " + e.getMessage());
e.printStackTrace();
}
finally {
r.releaseConnection();
}
}
}