diff --git a/README.md b/README.md index db5d6f485..0580494cf 100644 --- a/README.md +++ b/README.md @@ -395,7 +395,7 @@ When you build the latest code from source, you'll have access to the latest sna net.lightbody.bmp browsermob-core - 2.1.31-SNAPSHOT + 2.1.32-SNAPSHOT test ``` diff --git a/browsermob-core/pom.xml b/browsermob-core/pom.xml index a26765e79..06fb7aab8 100644 --- a/browsermob-core/pom.xml +++ b/browsermob-core/pom.xml @@ -6,7 +6,7 @@ browsermob-proxy net.lightbody.bmp - 2.1.31-SNAPSHOT + 2.1.32-SNAPSHOT 4.0.0 diff --git a/browsermob-core/src/main/java/net/lightbody/bmp/filters/HarCaptureFilter.java b/browsermob-core/src/main/java/net/lightbody/bmp/filters/HarCaptureFilter.java index 1be4b6f12..02d4bbfef 100644 --- a/browsermob-core/src/main/java/net/lightbody/bmp/filters/HarCaptureFilter.java +++ b/browsermob-core/src/main/java/net/lightbody/bmp/filters/HarCaptureFilter.java @@ -165,13 +165,13 @@ public HarCaptureFilter(HttpRequest originalRequest, ChannelHandlerContext ctx, @Override public HttpObject proxyToClientResponse(HttpObject httpObject) { - if (httpObject instanceof LastHttpContent) { + if (httpObject instanceof HttpResponse) { if (harEntry.getResponse().getStatus() == 0) { HarCaptureFilter.logFailedRequestIfRequired(harEntry.getRequest(), harEntry.getResponse()); - createStatsDClient(); - statsDClient.get().increment(getProxyPrefix().concat(prepareMetric(harEntry.getRequest().getUrl())) + StatsDClient client = createStatsDClient(); + client.increment(getProxyPrefix().concat(prepareMetric(harEntry.getRequest().getUrl())) .concat("." + harEntry.getResponse().getStatus()).concat(".request_timeout")); - stopStatsDClient(); + client.stop(); } } @@ -284,10 +284,6 @@ public void serverToProxyResponseTimedOut() { // replace any existing HarResponse that was created if the server sent a partial response HarResponse response = HarCaptureUtil.createHarResponseForFailure(); harEntry.setResponse(response); - createStatsDClient(); - statsDClient.get().increment(getProxyPrefix().concat(prepareMetric(harEntry.getRequest().getUrl())) - .concat("." + harEntry.getResponse().getStatus()).concat(".response_timeout")); - stopStatsDClient(); response.setError(HarCaptureUtil.getResponseTimedOutErrorMessage()); @@ -307,6 +303,12 @@ else if (sendFinishedNanos > 0L && responseReceiveStartedNanos == 0L) { else if (responseReceiveStartedNanos > 0L) { harEntry.getTimings().setReceive(timeoutTimestampNanos - responseReceiveStartedNanos, TimeUnit.NANOSECONDS); } + + StatsDClient client = createStatsDClient(); + client.increment(getProxyPrefix().concat(prepareMetric(harEntry.getRequest().getUrl())) + .concat("." + harEntry.getResponse().getStatus()).concat(".response_timeout")); + client.stop(); + logFailedRequestIfRequired(harEntry.getRequest(), harEntry.getResponse()); } @@ -658,10 +660,6 @@ public InetSocketAddress proxyToServerResolutionStarted(String resolvingServerHo public void proxyToServerResolutionFailed(String hostAndPort) { HarResponse response = HarCaptureUtil.createHarResponseForFailure(); harEntry.setResponse(response); - createStatsDClient(); - statsDClient.get().increment(getProxyPrefix().concat(prepareMetric(harEntry.getRequest().getUrl())) - .concat("." + harEntry.getResponse().getStatus()).concat(".server_resolution_fail")); - stopStatsDClient(); response.setError(HarCaptureUtil.getResolutionFailedErrorMessage(hostAndPort)); @@ -669,6 +667,11 @@ public void proxyToServerResolutionFailed(String hostAndPort) { if (dnsResolutionStartedNanos > 0L) { harEntry.getTimings().setDns(System.nanoTime() - dnsResolutionStartedNanos, TimeUnit.NANOSECONDS); } + + StatsDClient client = createStatsDClient(); + client.increment(getProxyPrefix().concat(prepareMetric(harEntry.getRequest().getUrl())) + .concat("." + harEntry.getResponse().getStatus()).concat(".server_resolution_fail")); + client.stop(); logFailedRequestIfRequired(harEntry.getRequest(), harEntry.getResponse()); } @@ -704,10 +707,7 @@ public void proxyToServerConnectionStarted() { @Override public void proxyToServerConnectionFailed() { HarResponse response = HarCaptureUtil.createHarResponseForFailure(); - createStatsDClient(); - statsDClient.get().increment(getProxyPrefix().concat(prepareMetric(harEntry.getRequest().getUrl())) - .concat("." + harEntry.getResponse().getStatus()).concat(".server_connection_fail")); - stopStatsDClient(); + harEntry.setResponse(response); response.setError(HarCaptureUtil.getConnectionFailedErrorMessage()); @@ -716,6 +716,11 @@ public void proxyToServerConnectionFailed() { if (connectionStartedNanos > 0L) { harEntry.getTimings().setConnect(System.nanoTime() - connectionStartedNanos, TimeUnit.NANOSECONDS); } + + StatsDClient client = createStatsDClient(); + client.increment(getProxyPrefix().concat(prepareMetric(harEntry.getRequest().getUrl())) + .concat("." + harEntry.getResponse().getStatus()).concat(".server_connection_fail")); + client.stop(); } @Override @@ -794,16 +799,7 @@ protected static void logFailedRequestIfRequired(HarRequest request, HarResponse } } - private void createStatsDClient() { - if (statsDClient.get() == null) { - statsDClient.set(new NonBlockingStatsDClient("automated_tests", getStatsDHost(), getStatsDPort())); - } - } - - private void stopStatsDClient() { - if (Objects.nonNull(statsDClient.get())) { - statsDClient.get().stop(); - statsDClient.remove(); - } + private StatsDClient createStatsDClient() { + return new NonBlockingStatsDClient("automated_tests", getStatsDHost(), getStatsDPort()); } } diff --git a/browsermob-core/src/test/java/net/lightbody/bmp/proxy/QuiescenceTest.java b/browsermob-core/src/test/java/net/lightbody/bmp/proxy/QuiescenceTest.java index 60842b0be..cbbe669df 100644 --- a/browsermob-core/src/test/java/net/lightbody/bmp/proxy/QuiescenceTest.java +++ b/browsermob-core/src/test/java/net/lightbody/bmp/proxy/QuiescenceTest.java @@ -19,10 +19,7 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static org.junit.Assert.*; import static org.mockserver.model.HttpRequest.request; import static org.mockserver.model.HttpResponse.response; @@ -218,7 +215,6 @@ public void testWaitForQuiescenceTimeoutLessThanQuietPeriodUnuccessful() throws } @Test - @Ignore //TODO: ignoring this test because it seems to fail on Java 8 under travis-ci. determine if there is an actual code defect, or just a test/environment defect. public void testWaitForQuiescenceInterruptedBySecondRequestSuccessful() throws InterruptedException { mockServer.when( request().withMethod("GET") @@ -235,27 +231,24 @@ public void testWaitForQuiescenceInterruptedBySecondRequestSuccessful() throws I final AtomicBoolean exceptionOccurred = new AtomicBoolean(); - new Thread(new Runnable() { - @Override - public void run() { - try (CloseableHttpClient client = NewProxyServerTestUtil.getNewHttpClient(proxy.getPort())) { - HttpResponse response = client.execute(new HttpGet("http://127.0.0.1:" + mockServerPort + "/successquiesence2s")); - EntityUtils.consumeQuietly(response.getEntity()); - firstRequestStatusCode.set(response.getStatusLine().getStatusCode()); + new Thread(() -> { + try (CloseableHttpClient client = NewProxyServerTestUtil.getNewHttpClient(proxy.getPort())) { + HttpResponse response = client.execute(new HttpGet("http://127.0.0.1:" + mockServerPort + "/successquiesence2s")); + EntityUtils.consumeQuietly(response.getEntity()); + firstRequestStatusCode.set(response.getStatusLine().getStatusCode()); - Thread.sleep(1000); + Thread.sleep(1000); - response = client.execute(new HttpGet("http://127.0.0.1:" + mockServerPort + "/successquiesence2s")); - EntityUtils.consumeQuietly(response.getEntity()); + response = client.execute(new HttpGet("http://127.0.0.1:" + mockServerPort + "/successquiesence2s")); + EntityUtils.consumeQuietly(response.getEntity()); - secondRequestFinished.set(System.nanoTime()); + secondRequestFinished.set(System.nanoTime()); - secondRequestStatusCode.set(response.getStatusLine().getStatusCode()); - } catch (IOException | InterruptedException e) { - exceptionOccurred.set(true); + secondRequestStatusCode.set(response.getStatusLine().getStatusCode()); + } catch (IOException | InterruptedException e) { + exceptionOccurred.set(true); - log.error("Exception occurred while making HTTP request", e); - } + log.error("Exception occurred while making HTTP request", e); } }).start(); diff --git a/browsermob-dist/pom.xml b/browsermob-dist/pom.xml index 1a050954e..49a51910f 100644 --- a/browsermob-dist/pom.xml +++ b/browsermob-dist/pom.xml @@ -4,7 +4,7 @@ browsermob-proxy net.lightbody.bmp - 2.1.31-SNAPSHOT + 2.1.32-SNAPSHOT 4.0.0 diff --git a/browsermob-legacy/pom.xml b/browsermob-legacy/pom.xml index ccef94eeb..92f5ee190 100644 --- a/browsermob-legacy/pom.xml +++ b/browsermob-legacy/pom.xml @@ -6,7 +6,7 @@ browsermob-proxy net.lightbody.bmp - 2.1.31-SNAPSHOT + 2.1.32-SNAPSHOT 4.0.0 diff --git a/browsermob-rest/pom.xml b/browsermob-rest/pom.xml index 6fdf3f486..ee8cbf484 100644 --- a/browsermob-rest/pom.xml +++ b/browsermob-rest/pom.xml @@ -5,7 +5,7 @@ browsermob-proxy net.lightbody.bmp - 2.1.31-SNAPSHOT + 2.1.32-SNAPSHOT 4.0.0 diff --git a/mitm/pom.xml b/mitm/pom.xml index 7c5683965..26befaf58 100644 --- a/mitm/pom.xml +++ b/mitm/pom.xml @@ -4,7 +4,7 @@ browsermob-proxy net.lightbody.bmp - 2.1.31-SNAPSHOT + 2.1.32-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index 227252954..7963fe5fe 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 net.lightbody.bmp browsermob-proxy - 2.1.31-SNAPSHOT + 2.1.32-SNAPSHOT browsermob-core browsermob-legacy