You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2007/06/17 13:28:39 UTC

svn commit: r548031 - in /jakarta/httpcomponents/httpcore/trunk: module-main/src/main/java/org/apache/http/ module-main/src/main/java/org/apache/http/impl/ module-main/src/test/java/org/apache/http/impl/ module-main/src/test/java/org/apache/http/mockup...

Author: olegk
Date: Sun Jun 17 04:28:38 2007
New Revision: 548031

URL: http://svn.apache.org/viewvc?view=rev&rev=548031
Log:
HTTPCORE-21: Implemented HttpConnectionMetrics for blocking HTTP connections

Modified:
    jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/HttpConnection.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpClientConnection.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpServerConnection.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/HttpConnectionMetricsImpl.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/impl/TestDefaultConnectionReuseStrategy.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/mockup/HttpConnectionMockup.java
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/NHttpConnectionBase.java

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/HttpConnection.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/HttpConnection.java?view=diff&rev=548031&r1=548030&r2=548031
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/HttpConnection.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/HttpConnection.java Sun Jun 17 04:28:38 2007
@@ -100,4 +100,11 @@
      * internal buffer prior to closing the underlying socket.
      */
     public void shutdown() throws IOException;
+    
+    /**
+     * Returns a collection of connection metrcis
+     * @return HttpConnectionMetrics
+     */
+    HttpConnectionMetrics getMetrics();
+    
 }

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpClientConnection.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpClientConnection.java?view=diff&rev=548031&r1=548030&r2=548031
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpClientConnection.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpClientConnection.java Sun Jun 17 04:28:38 2007
@@ -36,6 +36,7 @@
 
 import org.apache.http.Header;
 import org.apache.http.HttpClientConnection;
+import org.apache.http.HttpConnectionMetrics;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpEntityEnclosingRequest;
 import org.apache.http.HttpException;
@@ -85,6 +86,8 @@
     private int maxLineLen = -1;
     private int maxGarbageLines = -1;
 
+    private HttpConnectionMetricsImpl metrics;
+    
     public AbstractHttpClientConnection() {
         super();
         this.buffer = new CharArrayBuffer(128);
@@ -111,6 +114,12 @@
             final HttpDataReceiver datareceiver,
             final HttpDataTransmitter datatransmitter,
             final HttpParams params) {
+        if (datareceiver == null) {
+            throw new IllegalArgumentException("HTTP data receiver may not be null");
+        }
+        if (datatransmitter == null) {
+            throw new IllegalArgumentException("HTTP data transmitter may not be null");
+        }
         this.datareceiver = datareceiver;
         this.datatransmitter = datatransmitter;
         this.maxHeaderCount = params.getIntParameter(
@@ -119,6 +128,9 @@
                 HttpConnectionParams.MAX_LINE_LENGTH, -1);
         this.maxGarbageLines = params.getIntParameter(
                 HttpConnectionParams.MAX_STATUS_LINE_GARBAGE, Integer.MAX_VALUE);
+        this.metrics = new HttpConnectionMetricsImpl(
+                datareceiver.getMetrics(),
+                datatransmitter.getMetrics());
     }
     
     public boolean isResponseAvailable(int timeout) throws IOException {
@@ -134,6 +146,7 @@
         assertOpen();
         sendRequestLine(request);
         sendRequestHeaders(request);
+        this.metrics.incrementRequestCount();
     }
 
     public void sendRequestEntity(final HttpEntityEnclosingRequest request) 
@@ -189,6 +202,7 @@
         assertOpen();
         HttpResponse response = readResponseStatusLine();
         readResponseHeaders(response);
+        this.metrics.incrementResponseCount();
         return response;
     }
     
@@ -267,6 +281,10 @@
         } catch (IOException ex) {
             return true;
         }
+    }
+    
+    public HttpConnectionMetrics getMetrics() {
+        return this.metrics;
     }
 
 }

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpServerConnection.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpServerConnection.java?view=diff&rev=548031&r1=548030&r2=548031
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpServerConnection.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpServerConnection.java Sun Jun 17 04:28:38 2007
@@ -36,6 +36,7 @@
 
 import org.apache.http.ConnectionClosedException;
 import org.apache.http.Header;
+import org.apache.http.HttpConnectionMetrics;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpEntityEnclosingRequest;
 import org.apache.http.HttpException;
@@ -82,6 +83,8 @@
     private int maxHeaderCount = -1;
     private int maxLineLen = -1;
     
+    private HttpConnectionMetricsImpl metrics;
+    
     public AbstractHttpServerConnection() {
         super();
         this.buffer = new CharArrayBuffer(128);
@@ -108,12 +111,21 @@
             final HttpDataReceiver datareceiver,
             final HttpDataTransmitter datatransmitter,
             final HttpParams params) {
+        if (datareceiver == null) {
+            throw new IllegalArgumentException("HTTP data receiver may not be null");
+        }
+        if (datatransmitter == null) {
+            throw new IllegalArgumentException("HTTP data transmitter may not be null");
+        }
         this.datareceiver = datareceiver;
         this.datatransmitter = datatransmitter;
         this.maxHeaderCount = params.getIntParameter(
                 HttpConnectionParams.MAX_HEADER_COUNT, -1);
         this.maxLineLen = params.getIntParameter(
                 HttpConnectionParams.MAX_LINE_LENGTH, -1);
+        this.metrics = new HttpConnectionMetricsImpl(
+                datareceiver.getMetrics(),
+                datatransmitter.getMetrics());
     }
     
     public HttpRequest receiveRequestHeader() 
@@ -218,4 +230,8 @@
         }
     }
     
+    public HttpConnectionMetrics getMetrics() {
+        return this.metrics;
+    }
+
 }

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/HttpConnectionMetricsImpl.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/HttpConnectionMetricsImpl.java?view=diff&rev=548031&r1=548030&r2=548031
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/HttpConnectionMetricsImpl.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/HttpConnectionMetricsImpl.java Sun Jun 17 04:28:38 2007
@@ -33,6 +33,7 @@
 
 import java.util.HashMap;
 import org.apache.http.HttpConnectionMetrics;
+import org.apache.http.io.HttpTransportMetrics;
 
 /**
  * Implementation of the metrics interface.
@@ -44,68 +45,56 @@
     public static final String SENT_BYTES_COUNT = "http.sent-bytes-count";
     public static final String RECEIVED_BYTES_COUNT = "http.received-bytes-count";
     
+    private final HttpTransportMetrics inTransportMetric;
+    private final HttpTransportMetrics outTransportMetric;
     private long requestCount = 0;
     private long responseCount = 0;
-    private long sentBytesCount = 0;
-    private long receivedBytesCount = 0;
     
     /**
      * The cache map for all metrics values.
      */
     private HashMap metricsCache;
     
-    public HttpConnectionMetricsImpl() {
+    public HttpConnectionMetricsImpl(
+            final HttpTransportMetrics inTransportMetric,
+            final HttpTransportMetrics outTransportMetric) {
         super();
+        this.inTransportMetric = inTransportMetric;
+        this.outTransportMetric = outTransportMetric;
     }
     
     /* ------------------  Public interface method -------------------------- */
 
-    public long getRequestCount() {
-        return requestCount;
-    }
-    
-    public void setRequestCount(long count) {
-        requestCount = count;
-    }
-    
-    public void incrementRequestCount(long count) {
-        requestCount += count;
-    }
-    
-    public long getResponseCount() {
-        return responseCount;
-    }
-    
-    public void setResponseCount(long count) {
-        responseCount = count;
-    }
-    
-    public void incrementResponseCount(long count) {
-        responseCount += count;
+    public long getReceivedBytesCount() {
+        if (this.inTransportMetric != null) {
+            return this.inTransportMetric.getBytesTransferred();
+        } else {
+            return -1;
+        }
     }
-    
+
     public long getSentBytesCount() {
-        return sentBytesCount;
+        if (this.outTransportMetric != null) {
+            return this.outTransportMetric.getBytesTransferred();
+        } else {
+            return -1;
+        }
     }
     
-    public void setSentBytesCount(long count) {
-        sentBytesCount = count;
+    public long getRequestCount() {
+        return this.requestCount;
     }
     
-    public void incrementSentBytesCount(long count) {
-        sentBytesCount += count;
+    public void incrementRequestCount() {
+        this.requestCount++;
     }
     
-    public long getReceivedBytesCount() {
-        return receivedBytesCount;
-    }
-    
-    public void setReceivedBytesCount(long count) {
-        receivedBytesCount = count;
+    public long getResponseCount() {
+        return this.responseCount;
     }
     
-    public void incrementReceivedBytesCount(long count) {
-        receivedBytesCount += count;
+    public void incrementResponseCount() {
+        this.responseCount++;
     }
     
     public Object getMetric(final String metricName) {
@@ -119,9 +108,17 @@
             } else if (RESPONSE_COUNT.equals(metricName)) {
                 value = new Long(responseCount);
             } else if (RECEIVED_BYTES_COUNT.equals(metricName)) {
-                value = new Long(receivedBytesCount);
+                if (this.inTransportMetric != null) {
+                    return new Long(this.inTransportMetric.getBytesTransferred());
+                } else {
+                    return null;
+                }
             } else if (SENT_BYTES_COUNT.equals(metricName)) {
-                value = new Long(sentBytesCount);
+                if (this.outTransportMetric != null) {
+                    return new Long(this.outTransportMetric.getBytesTransferred());
+                } else {
+                    return null;
+                }
             }
         }
         return value;
@@ -135,11 +132,15 @@
     }
     
     public void reset() {
-        requestCount = 0;
-        responseCount = 0;
-        sentBytesCount = 0;
-        receivedBytesCount = 0;
+        if (this.outTransportMetric != null) {
+            this.outTransportMetric.reset();
+        }
+        if (this.inTransportMetric != null) {
+            this.inTransportMetric.reset();
+        }
+        this.requestCount = 0;
+        this.responseCount = 0;
         this.metricsCache = null;
     }
-    
+
 }

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/impl/TestDefaultConnectionReuseStrategy.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/impl/TestDefaultConnectionReuseStrategy.java?view=diff&rev=548031&r1=548030&r2=548031
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/impl/TestDefaultConnectionReuseStrategy.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/impl/TestDefaultConnectionReuseStrategy.java Sun Jun 17 04:28:38 2007
@@ -32,6 +32,7 @@
 
 import org.apache.http.ConnectionReuseStrategy;
 import org.apache.http.HttpConnection;
+import org.apache.http.HttpConnectionMetrics;
 import org.apache.http.HttpResponse;
 import org.apache.http.HttpVersion;
 import org.apache.http.StatusLine;
@@ -311,6 +312,10 @@
         public final void shutdown() {
             throw new UnsupportedOperationException
                 ("connection state must not be modified");
+        }
+
+        public HttpConnectionMetrics getMetrics() {
+            return null;
         }
         
     } // class MockConnection

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/mockup/HttpConnectionMockup.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/mockup/HttpConnectionMockup.java?view=diff&rev=548031&r1=548030&r2=548031
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/mockup/HttpConnectionMockup.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/mockup/HttpConnectionMockup.java Sun Jun 17 04:28:38 2007
@@ -34,6 +34,7 @@
 import java.io.IOException;
 
 import org.apache.http.HttpConnection;
+import org.apache.http.HttpConnectionMetrics;
 
 /**
  * {@link HttpConnection} mockup implementation.
@@ -69,6 +70,10 @@
     
     public boolean isStale() {
         return false;
+    }
+    
+    public HttpConnectionMetrics getMetrics() {
+        return null;
     }
 
 }

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/NHttpConnectionBase.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/NHttpConnectionBase.java?view=diff&rev=548031&r1=548030&r2=548031
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/NHttpConnectionBase.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/NHttpConnectionBase.java Sun Jun 17 04:28:38 2007
@@ -38,6 +38,7 @@
 
 import org.apache.http.ConnectionClosedException;
 import org.apache.http.Header;
+import org.apache.http.HttpConnectionMetrics;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpException;
 import org.apache.http.HttpInetConnection;
@@ -271,6 +272,10 @@
     public void shutdown() throws IOException {
         this.closed = true;
         this.session.shutdown();
+    }
+
+    public HttpConnectionMetrics getMetrics() {
+        return null;
     }
     
 }