Revision: 688a3f83698e
Author:   emmartins <[email protected]>
Date:     Wed Jan 16 08:50:08 2013
Log:      Fixes issue 20

http://code.google.com/p/jain-slee/source/detail?r=688a3f83698e

Modified:
/container/router/src/main/java/org/mobicents/slee/container/management/jmx/EventRouterStatistics.java /container/router/src/main/java/org/mobicents/slee/container/management/jmx/EventRouterStatisticsMBean.java /container/router/src/main/java/org/mobicents/slee/runtime/eventrouter/EventRouterExecutorImpl.java /container/router/src/main/java/org/mobicents/slee/runtime/eventrouter/stats/EventRouterExecutorStatisticsImpl.java /container/router/src/main/java/org/mobicents/slee/runtime/eventrouter/stats/EventRouterStatisticsImpl.java /container/spi/src/main/java/org/mobicents/slee/container/eventrouter/stats/EventRouterExecutorStatistics.java /container/spi/src/main/java/org/mobicents/slee/container/eventrouter/stats/EventRouterStatistics.java

=======================================
--- /container/router/src/main/java/org/mobicents/slee/container/management/jmx/EventRouterStatistics.java Wed Aug 8 04:59:10 2012 +++ /container/router/src/main/java/org/mobicents/slee/container/management/jmx/EventRouterStatistics.java Wed Jan 16 08:50:08 2013
@@ -224,6 +224,24 @@
                return getEventRouterStatistics().getRoutingTime(executor, 
eventTypeID);
        }

+       /*
+        * (non-Javadoc)
+ * @see org.mobicents.slee.container.management.jmx.EventRouterStatisticsMBean#getWorkingQueueSize()
+        */
+       @Override
+       public int getWorkingQueueSize() throws ManagementException {
+               return getEventRouterStatistics().getWorkingQueueSize();
+       }
+
+       /*
+        * (non-Javadoc)
+ * @see org.mobicents.slee.container.management.jmx.EventRouterStatisticsMBean#getWorkingQueueSize(int)
+        */
+       @Override
+       public int getWorkingQueueSize(int executor) throws ManagementException 
{
+               return getEventRouterStatistics().getWorkingQueueSize(executor);
+       }
+
        /*
         * (non-Javadoc)
* @see org.mobicents.slee.container.management.jmx.EventRouterStatisticsMBean#printAllStats()
=======================================
--- /container/router/src/main/java/org/mobicents/slee/container/management/jmx/EventRouterStatisticsMBean.java Wed Aug 8 04:59:10 2012 +++ /container/router/src/main/java/org/mobicents/slee/container/management/jmx/EventRouterStatisticsMBean.java Wed Jan 16 08:50:08 2013
@@ -91,5 +91,21 @@
         */
public long getRoutingTime(int executor, EventTypeID eventTypeID) throws ManagementException;

+       /**
+        * Retrieves the size of the event router working queue.
+        *
+        * @return
+        */
+       public int getWorkingQueueSize() throws ManagementException;
+
+       /**
+        * Retrieves the size of the specified executor's working queue.
+        *
+        * @param executor
+        *            the executor number
+        * @return
+        */
+       public int getWorkingQueueSize(int executor) throws ManagementException;
+
        public String printAllStats() throws ManagementException;
 }
=======================================
--- /container/router/src/main/java/org/mobicents/slee/runtime/eventrouter/EventRouterExecutorImpl.java Wed Aug 8 04:59:10 2012 +++ /container/router/src/main/java/org/mobicents/slee/runtime/eventrouter/EventRouterExecutorImpl.java Wed Jan 16 08:50:08 2013
@@ -25,9 +25,12 @@
  */
 package org.mobicents.slee.runtime.eventrouter;

+import java.util.Collections;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;

 import org.mobicents.slee.container.SleeContainer;
 import org.mobicents.slee.container.activity.ActivityContextHandle;
@@ -107,8 +110,11 @@
         *
         */
public EventRouterExecutorImpl(boolean collectStats, SleeContainer sleeContainer) {
-               this.executor = Executors.newSingleThreadExecutor();
-               stats = collectStats ? new EventRouterExecutorStatisticsImpl() 
: null;
+ final LinkedBlockingQueue<Runnable> executorQueue = new LinkedBlockingQueue<Runnable>();
+               this.executor = new ThreadPoolExecutor(1, 1,
+                        0L, TimeUnit.MILLISECONDS,
+                        executorQueue);
+ stats = collectStats ? new EventRouterExecutorStatisticsImpl(Collections.unmodifiableCollection(executorQueue)) : null;
                this.sleeContainer = sleeContainer;
        }

=======================================
--- /container/router/src/main/java/org/mobicents/slee/runtime/eventrouter/stats/EventRouterExecutorStatisticsImpl.java Wed Aug 8 04:59:10 2012 +++ /container/router/src/main/java/org/mobicents/slee/runtime/eventrouter/stats/EventRouterExecutorStatisticsImpl.java Wed Jan 16 08:50:08 2013
@@ -25,6 +25,7 @@
  */
 package org.mobicents.slee.runtime.eventrouter.stats;

+import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -59,6 +60,12 @@

        private final long startTime = System.nanoTime();

+       private final Collection<Runnable> executorWorkingQueue;
+
+ public EventRouterExecutorStatisticsImpl(Collection<Runnable> executorWorkingQueue) {
+               this.executorWorkingQueue = executorWorkingQueue;
+       }
+
        private void taskExecuted(long executionTime) {
                tasksExecuted++;
                taskExecutingTime += executionTime;
@@ -259,6 +266,11 @@
                taskExecuted(executionTime);
        }

+       @Override
+       public int getWorkingQueueSize() {
+               return executorWorkingQueue.size();
+       }
+
        /*
         * (non-Javadoc)
         * @see java.lang.Object#toString()
@@ -276,6 +288,7 @@
                sb.append("Idle Time: ").append(getIdleTime()).append('\n');
sb.append("Misc Tasks Executed: ").append(getMiscTasksExecuted()).append('\n'); sb.append("Misc Tasks Executing Time: ").append(getMiscTasksExecutingTime()).append('\n'); + sb.append("Working Queue Size: ").append(getWorkingQueueSize()).append('\n');
                return sb.toString();
        }
 }
=======================================
--- /container/router/src/main/java/org/mobicents/slee/runtime/eventrouter/stats/EventRouterStatisticsImpl.java Wed Aug 8 04:59:10 2012 +++ /container/router/src/main/java/org/mobicents/slee/runtime/eventrouter/stats/EventRouterStatisticsImpl.java Wed Jan 16 08:50:08 2013
@@ -230,6 +230,25 @@
return executorStats == null ? 0 : executorStats.getRoutingTime(eventTypeID);
        }

+       @Override
+       public int getWorkingQueueSize() {
+               int result = 0;
+               for (int i = 0; i < getExecutors().length; i++) {
+                       result += getWorkingQueueSize(i);
+               }
+               return result;
+       }
+
+       /*
+        * (non-Javadoc)
+ * @see org.mobicents.slee.container.eventrouter.stats.EventRouterStatistics#getWorkingQueueSize(int)
+        */
+       @Override
+       public int getWorkingQueueSize(int executor) {
+ final EventRouterExecutorStatistics executorStats = getExecutors()[executor].getStatistics();
+               return executorStats == null ? 0 : 
executorStats.getWorkingQueueSize();
+       }
+
        /*
         * (non-Javadoc)
         * @see java.lang.Object#toString()
@@ -242,6 +261,7 @@
sb.append("\tAverage event routing time: ").append(getAverageEventRoutingTime()).append('\n');
                sb.append("\tExecuted Tasks: 
").append(getExecutedTasks()).append('\n');
sb.append("\tMisc Tasks Executed: ").append(getMiscTasksExecuted()).append('\n'); + sb.append("\tWorking Queue Size: ").append(getWorkingQueueSize()).append('\n'); for (EventTypeID eventTypeID : eventRouter.getSleeContainer().getComponentManagement().getComponentRepository().getEventComponentIDs()) {
                        sb.append('\n');
                        sb.append(eventTypeID).append(" statistics:\n");
=======================================
--- /container/spi/src/main/java/org/mobicents/slee/container/eventrouter/stats/EventRouterExecutorStatistics.java Wed Aug 8 04:59:10 2012 +++ /container/spi/src/main/java/org/mobicents/slee/container/eventrouter/stats/EventRouterExecutorStatistics.java Wed Jan 16 08:50:08 2013
@@ -136,4 +136,11 @@
         * @return
         */
        public long getAverageEventRoutingTime(EventTypeID eventTypeID);
+
+       /**
+        * Retrieves the size of the executor's working queue.
+        * @return
+        */
+       public int getWorkingQueueSize();
+
 }
=======================================
--- /container/spi/src/main/java/org/mobicents/slee/container/eventrouter/stats/EventRouterStatistics.java Wed Aug 8 04:59:10 2012 +++ /container/spi/src/main/java/org/mobicents/slee/container/eventrouter/stats/EventRouterStatistics.java Wed Jan 16 08:50:08 2013
@@ -173,4 +173,20 @@
         * @return
         */
        public long getRoutingTime(int executor, EventTypeID eventTypeID);
+
+       /**
+        * Retrieves the size of the event router working queue.
+        *
+        * @return
+        */
+       public int getWorkingQueueSize();
+
+       /**
+        * Retrieves the size of the specified executor's working queue.
+        *
+        * @param executor
+        *            the executor number
+        * @return
+        */
+       public int getWorkingQueueSize(int executor);
 }

Reply via email to