Author: hiranya
Date: Mon Jul 19 07:31:10 2010
New Revision: 965374

URL: http://svn.apache.org/viewvc?rev=965374&view=rev
Log:
Adding the thread view monitor to the NHTTP transport. Refactored the latency 
view. Related to SYNAPSE-669


Modified:
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerHandler.java
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/LatencyView.java

Modified: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java?rev=965374&r1=965373&r2=965374&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java
 (original)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java
 Mon Jul 19 07:31:10 2010
@@ -57,6 +57,7 @@ import org.apache.http.params.DefaultedH
 import org.apache.http.params.HttpParams;
 import org.apache.http.protocol.*;
 import org.apache.synapse.transport.nhttp.debug.ClientConnectionDebug;
+import org.apache.synapse.commons.jmx.ThreadingView;
 
 import java.io.IOException;
 import java.util.Map;
@@ -100,6 +101,8 @@ public class ClientHandler implements NH
     /** lock to update the connection counts in a thread safe way */
     private Lock lock = new ReentrantLock();
 
+    private ThreadingView threadingView = null;
+
     /** A map for holding the number of open connections for a host:port pair 
*/
     private Map<String, AtomicInteger> openConnections = new HashMap<String, 
AtomicInteger>();
 
@@ -131,6 +134,7 @@ public class ClientHandler implements NH
         this.connStrategy = new DefaultConnectionReuseStrategy();
         this.metrics = metrics;
         this.allocator = new HeapByteBufferAllocator();
+        this.threadingView = new ThreadingView("HttpClientWorker", true, 50);
 
         this.cfg = NHttpConfiguration.getInstance();
         workerPool = WorkerPoolFactory.getWorkerPool(
@@ -1045,6 +1049,8 @@ public class ClientHandler implements NH
     }
         
     public void stop() {
+        threadingView.destroy();
+
         try {
             workerPool.shutdown(1000);
         } catch (InterruptedException ignore) {}

Modified: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerHandler.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerHandler.java?rev=965374&r1=965373&r2=965374&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerHandler.java
 (original)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerHandler.java
 Mon Jul 19 07:31:10 2010
@@ -48,6 +48,7 @@ import org.apache.commons.logging.LogFac
 import org.apache.synapse.commons.evaluators.Parser;
 import org.apache.synapse.commons.evaluators.EvaluatorContext;
 import org.apache.synapse.commons.executors.PriorityExecutor;
+import org.apache.synapse.commons.jmx.ThreadingView;
 import org.apache.synapse.transport.nhttp.debug.ServerConnectionDebug;
 import org.apache.synapse.transport.nhttp.util.LatencyView;
 
@@ -99,6 +100,7 @@ public class ServerHandler implements NH
     private PriorityExecutor executor = null;
 
     private LatencyView latencyView = null;
+    private ThreadingView threadingView = null;
 
     public static final String REQUEST_SINK_BUFFER = 
"synapse.request-sink-buffer";
     public static final String RESPONSE_SOURCE_BUFFER = 
"synapse.response-source-buffer";
@@ -119,9 +121,10 @@ public class ServerHandler implements NH
         this.allocator = new HeapByteBufferAllocator();
         this.activeConnections = new ArrayList<NHttpServerConnection>();
         this.latencyView = new LatencyView(isHttps);
+        this.threadingView = new ThreadingView("HttpServerWorker", true, 50);
 
         this.cfg = NHttpConfiguration.getInstance();
-       if (executor == null)  {
+        if (executor == null)  {
             this.workerPool = WorkerPoolFactory.getWorkerPool(
                 cfg.getServerCoreThreads(),
                 cfg.getServerMaxThreads(),
@@ -572,6 +575,7 @@ public class ServerHandler implements NH
 
     public void stop() {
         latencyView.destroy();
+        threadingView.destroy();
 
         try {
             if (workerPool != null) {

Modified: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/LatencyView.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/LatencyView.java?rev=965374&r1=965373&r2=965374&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/LatencyView.java
 (original)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/LatencyView.java
 Mon Jul 19 07:31:10 2010
@@ -54,7 +54,7 @@ import java.util.Calendar;
  */
 public class LatencyView implements LatencyViewMBean {
 
-    private static final String NHTTP_LATENCY_VIEW = "NHTTPLatencyView";
+    private static final String NHTTP_LATENCY_VIEW = "NhttpTransportLatency";
 
     private static final int SMALL_DATA_COLLECTION_PERIOD = 5;
     private static final int LARGE_DATA_COLLECTION_PERIOD = 5 * 60;
@@ -93,11 +93,9 @@ public class LatencyView implements Late
 
     public LatencyView(boolean isHttps) {
         name = "nio-http" + (isHttps ? "s" : "");
-        Runnable shortTermDataCollector = getShortTermDataCollector();
-        Runnable longTermDataCollector = getLongTermDataCollector();
-        scheduler.scheduleAtFixedRate(shortTermDataCollector, 
SMALL_DATA_COLLECTION_PERIOD,
+        scheduler.scheduleAtFixedRate(new ShortTermDataCollector(), 
SMALL_DATA_COLLECTION_PERIOD,
                 SMALL_DATA_COLLECTION_PERIOD, TimeUnit.SECONDS);
-        scheduler.scheduleAtFixedRate(longTermDataCollector, 
LARGE_DATA_COLLECTION_PERIOD,
+        scheduler.scheduleAtFixedRate(new LongTermDataCollector(), 
LARGE_DATA_COLLECTION_PERIOD,
                 LARGE_DATA_COLLECTION_PERIOD, TimeUnit.SECONDS);
         MBeanRegistrar.getInstance().registerMBean(this, NHTTP_LATENCY_VIEW, 
name);
     }
@@ -213,49 +211,45 @@ public class LatencyView implements Late
         return sum/samples;
     }
 
-    private Runnable getShortTermDataCollector() {
-        return new Runnable() {
-            public void run() {
-                long latency = lastLatency.get();
-
-                // calculate all time average latency
-                int size = latencyDataQueue.size();
-                if (size > 0) {
-                    long sum = 0;
-                    for (int i = 0; i < size; i++) {
-                        sum += latencyDataQueue.poll();
-                    }
-                    allTimeAvgLatency = (allTimeAvgLatency * count + 
sum)/(count + size);
-                    count = count + size;
+    private class ShortTermDataCollector implements Runnable {
+        public void run() {
+            long latency = lastLatency.get();
+
+            // calculate all time average latency
+            int size = latencyDataQueue.size();
+            if (size > 0) {
+                long sum = 0;
+                for (int i = 0; i < size; i++) {
+                    sum += latencyDataQueue.poll();
                 }
+                allTimeAvgLatency = (allTimeAvgLatency * count + sum)/(count + 
size);
+                count = count + size;
+            }
 
-                if (shortTermLatencyDataQueue.size() == 0 && latency == 0) {
-                    // we haven't started collecting data yet - skip ahead...
-                    return;
-                }
+            if (shortTermLatencyDataQueue.size() == 0 && latency == 0) {
+                // we haven't started collecting data yet - skip ahead...
+                return;
+            }
 
-                // take a sample for the short term latency calculation
-                if (shortTermLatencyDataQueue.size() == SAMPLES_PER_MINUTE * 
15) {
-                    shortTermLatencyDataQueue.remove();
-                }
-                shortTermLatencyDataQueue.offer(latency);
+            // take a sample for the short term latency calculation
+            if (shortTermLatencyDataQueue.size() == SAMPLES_PER_MINUTE * 15) {
+                shortTermLatencyDataQueue.remove();
             }
-        };
+            shortTermLatencyDataQueue.offer(latency);
+        }
     }
 
-    private Runnable getLongTermDataCollector() {
-        return new Runnable() {
-            public void run() {
-                long latency = lastLatency.get();
-                if (longTermLatencyDataQueue.size() == 0 && latency == 0) {
-                    return;
-                }
+    private class LongTermDataCollector implements Runnable {
+        public void run() {
+            long latency = lastLatency.get();
+            if (longTermLatencyDataQueue.size() == 0 && latency == 0) {
+                return;
+            }
 
-                if (longTermLatencyDataQueue.size() == SAMPLES_PER_HOUR * 24) {
-                    longTermLatencyDataQueue.remove();
-                }
-                longTermLatencyDataQueue.offer(latency);
+            if (longTermLatencyDataQueue.size() == SAMPLES_PER_HOUR * 24) {
+                longTermLatencyDataQueue.remove();
             }
-        };
+            longTermLatencyDataQueue.offer(latency);
+        }
     }
 }


Reply via email to