You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@jakarta.apache.org by se...@apache.org on 2011/04/11 02:19:18 UTC
svn commit: r1090914 -
/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java
Author: sebb
Date: Mon Apr 11 00:19:17 2011
New Revision: 1090914
URL: http://svn.apache.org/viewvc?rev=1090914&view=rev
Log:
Add metrics to get header and body sizes
Modified:
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java
Modified: jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java?rev=1090914&r1=1090913&r2=1090914&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java (original)
+++ jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java Mon Apr 11 00:19:17 2011
@@ -36,10 +36,14 @@ import java.util.List;
import java.util.Map;
import org.apache.http.Header;
+import org.apache.http.HttpConnection;
+import org.apache.http.HttpConnectionMetrics;
import org.apache.http.HttpEntity;
+import org.apache.http.HttpException;
import org.apache.http.HttpHost;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
+import org.apache.http.HttpResponseInterceptor;
import org.apache.http.NameValuePair;
import org.apache.http.StatusLine;
import org.apache.http.auth.AuthScope;
@@ -110,6 +114,17 @@ public class HTTPHC4Impl extends HTTPHCA
private static final long serialVersionUID = 240L;
+ private static final String CONTEXT_METRICS = "jmeter_metrics"; // TODO hack, to be removed later
+
+ private static final HttpResponseInterceptor METRICS_SAVER = new HttpResponseInterceptor(){
+ public void process(HttpResponse response, HttpContext context)
+ throws HttpException, IOException {
+ HttpConnection conn = (HttpConnection) context.getAttribute(ExecutionContext.HTTP_CONNECTION);
+ HttpConnectionMetrics metrics = conn.getMetrics();
+ context.setAttribute(CONTEXT_METRICS, metrics);
+ }
+ };
+
private static final ThreadLocal<Map<HttpClientKey, HttpClient>> HTTPCLIENTS =
new ThreadLocal<Map<HttpClientKey, HttpClient>>(){
@Override
@@ -251,6 +266,14 @@ public class HTTPHC4Impl extends HTTPHCA
// Needs to be done after execute to pick up all the headers
res.setRequestHeaders(getConnectionHeaders((HttpRequest) localContext.getAttribute(ExecutionContext.HTTP_REQUEST)));
+ // Fetch the metrics now, so we can get the header count
+
+// HttpConnection conn = (HttpConnection) localContext.getAttribute(ExecutionContext.HTTP_REQUEST); // this works
+// HttpConnectionMetrics metrics = conn.getMetrics(); // this fails on http core 4.1 with a HEAD request
+ // alternate hack to be removed when httpcore fixed
+ HttpConnectionMetrics metrics = (HttpConnectionMetrics) localContext.getAttribute(CONTEXT_METRICS);
+ long headerBytes = metrics.getReceivedBytesCount();
+
HttpEntity entity = httpResponse.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
@@ -283,15 +306,14 @@ public class HTTPHC4Impl extends HTTPHCA
}
// record some sizes to allow HTTPSampleResult.getBytes() with different options
- res.setContentLength((int) entity.getContentLength());
- res.setHeadersSize(res.getResponseHeaders().length() // condensed length
- +httpResponse.getAllHeaders().length+1 // Add \r for each header and initial header
- +2); // final \r\n before data
+ long totalBytes = metrics.getReceivedBytesCount();
+ res.setHeadersSize((int) headerBytes);
+ res.setContentLength((int)(totalBytes - headerBytes));
if (log.isDebugEnabled()) {
log.debug("ResponseHeadersSize=" + res.getHeadersSize() + " Content-Length=" + res.getContentLength()
+ " Total=" + (res.getHeadersSize() + res.getContentLength()));
}
-
+
// If we redirected automatically, the URL may have changed
if (getAutoRedirects()){
HttpUriRequest req = (HttpUriRequest) localContext.getAttribute(ExecutionContext.HTTP_REQUEST);
@@ -320,6 +342,11 @@ public class HTTPHC4Impl extends HTTPHCA
HTTPSampleResult err = errorResult(e, res);
err.setSampleLabel("Error: " + url.toString());
return err;
+ } catch (RuntimeException e) {
+ res.sampleEnd();
+ HTTPSampleResult err = errorResult(e, res);
+ err.setSampleLabel("Error: " + url.toString());
+ return err;
} finally {
currentRequest = null;
}
@@ -428,6 +455,7 @@ public class HTTPHC4Impl extends HTTPHCA
httpClient = new DefaultHttpClient(clientParams);
((AbstractHttpClient) httpClient).addResponseInterceptor(new ResponseContentEncoding());
+ ((AbstractHttpClient) httpClient).addResponseInterceptor(METRICS_SAVER); // HACK
SchemeRegistry schemeRegistry = httpClient.getConnectionManager().getSchemeRegistry();
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@jakarta.apache.org
For additional commands, e-mail: notifications-help@jakarta.apache.org