Author: rgodfrey
Date: Fri Mar 23 19:55:33 2012
New Revision: 1304575

URL: http://svn.apache.org/viewvc?rev=1304575&view=rev
Log:
NO-JIRA : [Java Config] more work on queue presentation

Added:
    
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/BindingServlet.java
      - copied, changed from r1304245, 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/QueueServlet.java
    
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/queue.css
      - copied, changed from r1304245, 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/broker.css
Modified:
    
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/Management.java
    
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/QueueServlet.java
    
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/broker.js
    
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/queue.js
    
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/queue.html
    
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java
    
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueue.java
    
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java
    
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java
    
qpid/branches/java-config-and-management/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/MockAMQQueue.java

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/Management.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/Management.java?rev=1304575&r1=1304574&r2=1304575&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/Management.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/Management.java
 Fri Mar 23 19:55:33 2012
@@ -25,6 +25,7 @@ import org.apache.qpid.server.management
 import org.apache.qpid.server.management.plugin.servlet.FileServlet;
 import org.apache.qpid.server.management.plugin.servlet.api.ExchangesServlet;
 import org.apache.qpid.server.management.plugin.servlet.api.VhostsServlet;
+import org.apache.qpid.server.management.plugin.servlet.rest.BindingServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.ConnectionServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.ExchangeServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.QueueServlet;
@@ -67,6 +68,7 @@ public class Management
             root.addServlet(new ServletHolder(new ExchangeServlet(_broker)), 
"/rest/exchange/*");
             root.addServlet(new ServletHolder(new QueueServlet(_broker)), 
"/rest/queue/*");
             root.addServlet(new ServletHolder(new ConnectionServlet(_broker)), 
"/rest/connection/*");
+            root.addServlet(new ServletHolder(new BindingServlet(_broker)), 
"/rest/binding/*");
 
             root.addServlet(new ServletHolder(new 
DefinedFileServlet("queue.html")),"/queue");
             root.addServlet(new ServletHolder(new 
DefinedFileServlet("exchange.html")),"/exchange");

Copied: 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/BindingServlet.java
 (from r1304245, 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/QueueServlet.java)
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/BindingServlet.java?p2=qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/BindingServlet.java&p1=qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/QueueServlet.java&r1=1304245&r2=1304575&rev=1304575&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/QueueServlet.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/BindingServlet.java
 Fri Mar 23 19:55:33 2012
@@ -20,23 +20,6 @@
  */
 package org.apache.qpid.server.management.plugin.servlet.rest;
 
-import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.map.SerializationConfig;
-
-import org.apache.qpid.server.model.Binding;
-import org.apache.qpid.server.model.Broker;
-import org.apache.qpid.server.model.ConfiguredObject;
-import org.apache.qpid.server.model.Consumer;
-import org.apache.qpid.server.model.LifetimePolicy;
-import org.apache.qpid.server.model.Queue;
-import org.apache.qpid.server.model.State;
-import org.apache.qpid.server.model.Statistics;
-import org.apache.qpid.server.model.VirtualHost;
-import org.apache.qpid.server.queue.AMQQueue;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.ArrayList;
@@ -47,8 +30,23 @@ import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.qpid.server.model.Binding;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.Consumer;
+import org.apache.qpid.server.model.LifetimePolicy;
+import org.apache.qpid.server.model.Queue;
+import org.apache.qpid.server.model.State;
+import org.apache.qpid.server.model.Statistics;
+import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.queue.AMQQueue;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.map.SerializationConfig;
 
-public class QueueServlet extends AbstractServlet
+public class BindingServlet extends AbstractServlet
 {
 
 
@@ -56,7 +54,7 @@ public class QueueServlet extends Abstra
     private static final Comparator DEFAULT_COMPARATOR = new 
KeyComparator("name");
 
 
-    public QueueServlet(Broker broker)
+    public BindingServlet(Broker broker)
     {
         _broker = broker;
     }
@@ -86,8 +84,10 @@ public class QueueServlet extends Abstra
 
         ObjectMapper mapper = new ObjectMapper();
         mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
+        
         String vhostName = null;
         String queueName = null;
+        String exchangeName = null;
 
         if(request.getPathInfo() != null && request.getPathInfo().length()>0)
         {
@@ -96,7 +96,11 @@ public class QueueServlet extends Abstra
             vhostName = parts.length == 0 ? "" : parts[0];
             if(parts.length > 1)
             {
-                queueName = parts[1];
+                exchangeName = parts[1];
+                if(parts.length > 2)
+                {
+                    queueName = parts[2];
+                }
             }
         }
 
@@ -104,17 +108,29 @@ public class QueueServlet extends Abstra
         {
             if(vhostName == null || vhostName.equals(vhost.getName()))
             {
-                for(Queue queue : vhost.getQueues())
+                if(exchangeName == null || exchangeName.equals("*"))
                 {
-                    if(queueName == null || queueName.equals(queue.getName()))
+                    for(Queue queue : vhost.getQueues())
                     {
-                        outputObject.add(convertToObject(queue));
-                        if(queueName != null)
+                        if(queueName == null || 
queueName.equals(queue.getName()))
                         {
-                            break;
+                            for(Binding binding : queue.getBindings())
+                            {
+                                outputObject.add(convertObjectToMap(binding));
+                            }
+
+                            if(queueName != null)
+                            {
+                                break;
+                            }
                         }
-                    }
+                    }    
+                }
+                else
+                {
+                    // TODO
                 }
+                
                 if(vhostName != null)
                 {
                     break;

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/QueueServlet.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/QueueServlet.java?rev=1304575&r1=1304574&r2=1304575&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/QueueServlet.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/QueueServlet.java
 Fri Mar 23 19:55:33 2012
@@ -66,6 +66,10 @@ public class QueueServlet extends Abstra
         response.setContentType("application/json");
         response.setStatus(HttpServletResponse.SC_OK);
 
+        response.setHeader("Cache-Control","no-cache");
+        response.setHeader("Pragma","no-cache");
+        response.setDateHeader ("Expires", 0);
+
         String[] sortKeys = request.getParameterValues("sort");
         Comparator comparator;
         if(sortKeys == null || sortKeys.length == 0)

Copied: 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/queue.css
 (from r1304245, 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/broker.css)
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/queue.css?p2=qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/queue.css&p1=qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/broker.css&r1=1304245&r2=1304575&rev=1304575&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/broker.css
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/queue.css
 Fri Mar 23 19:55:33 2012
@@ -1,16 +1,10 @@
-#virtualHosts {
+
+#bindings {
        width: 560px;
-       height: 110px;
+       height: 100px;
 }
-#exchanges {
+
+#consumers {
        width: 560px;
-       height: 250px;
-}
-#queues {
-       width: 560px;
-       height: 200px;
-}
-#connections {
-       width: 560px;
-       height: 200px;
+       height: 100px;
 }

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/broker.js
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/broker.js?rev=1304575&r1=1304574&r2=1304575&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/broker.js
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/broker.js
 Fri Mar 23 19:55:33 2012
@@ -98,12 +98,12 @@ require(["dojo/store/JsonRest",
          };
 
          exchangeTuple = new UpdatableStore("/rest/exchange", "exchanges",
-                                            [ { name: "Name",        field: 
"name",          width: "190px"},
-                                              { name: "Type",        field: 
"type",          width: "90px"},
-                                              { name: "Durable",     field: 
"durable",       width: "80px"},
-                                              { name: "Auto-Delete", field: 
"auto-delete",   width: "100px"},
-                                              { name: "Bindings",    field: 
"binding-count", width: "80px"}
-                                              ]);
+                                                     [ { name: "Name",        
field: "name",          width: "190px"},
+                                                       { name: "Type",        
field: "type",          width: "90px"},
+                                                       { name: "Durable",     
field: "durable",       width: "80px"},
+                                                       { name: "Auto-Delete", 
field: "auto-delete",   width: "100px"},
+                                                       { name: "Bindings",    
field: "binding-count", width: "80px"}
+                                                       ]);
          queueTuple = new UpdatableStore("/rest/queue", "queues",
                                             [ { name: "Name",        field: 
"name",          width: "240px"},
                                               { name: "Durable",     field: 
"durable",       width: "100px"},

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/queue.js
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/queue.js?rev=1304575&r1=1304574&r2=1304575&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/queue.js
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/queue.js
 Fri Mar 23 19:55:33 2012
@@ -1,7 +1,5 @@
-var vhostGrid, dataStore, store, vhostStore;
-var exchangeGrid, exchangeStore, exchangeDataStore;
 var updateList = new Array();
-var vhostTuple, exchangesTuple;
+var bindingsTuple;
 
 
 require(["dojo/store/JsonRest",
@@ -18,133 +16,249 @@ require(["dojo/store/JsonRest",
             {
 
 
-         function UpdatableStore( query, divName, structure, func ) {
+             function UpdatableStore( data, divName, structure, func )
+             {
 
 
-             this.query = query;
 
-             var thisObj = this;
+                 var thisObj = this;
 
-             xhr.get({url: query, handleAs: "json"}).then(function(data)
-                             {
-                             thisObj.store = Observable(Memory({data: data, 
idProperty: "id"}));
-                             thisObj.dataStore = ObjectStore({objectStore: 
thisObj.store});
-                             thisObj.grid = new DataGrid({
-                                         store: thisObj.dataStore,
-                                         structure: structure,
-                                                               }, divName);
 
-                             // since we created this grid programmatically, 
call startup to render it
-                             thisObj.grid.startup();
+                 thisObj.store = Observable(Memory({data: data, idProperty: 
"id"}));
+                 thisObj.dataStore = ObjectStore({objectStore: thisObj.store});
+                 thisObj.grid = new DataGrid({
+                             store: thisObj.dataStore,
+                             structure: structure,
+                                    }, divName);
 
-                             updateList.push( thisObj );
-                             if( func )
-                             {
-                                 func(thisObj);
-                             }
-                             });
+                 // since we created this grid programmatically, call startup 
to render it
+                 thisObj.grid.startup();
 
 
-         }
+                 if( func )
+                 {
+                     func(thisObj);
+                 }
 
-         UpdatableStore.prototype.update = function() {
-             var store = this.store;
+             }
 
+            UpdatableStore.prototype.update = function(bindingData)
+            {
+                 data = bindingData;
+                 var store = this.store;
 
-             xhr.get({url: this.query, handleAs: "json"}).then(function(data)
-                 {
-                     // handle deletes
-                     // iterate over existing store... if not in new data then 
remove
-                     store.query({ }).forEach(function(object)
+
+                 // handle deletes
+                 // iterate over existing store... if not in new data then 
remove
+                 store.query({ }).forEach(function(object)
+                     {
+                         for(var i=0; i < data.length; i++)
                          {
-                             for(var i=0; i < data.length; i++)
+                             if(data[i].id == object.id)
                              {
-                                 if(data[i].id == object.id)
-                                 {
-                                     return;
-                                 }
+                                 return;
                              }
-                             store.remove(object.id);
-                             //store.notify(null, object.id);
-                         });
+                         }
+                         store.remove(object.id);
+                         //store.notify(null, object.id);
+                     });
 
-                     // iterate over data...
-                     for(var i=0; i < data.length; i++)
+                 // iterate over data...
+                 for(var i=0; i < data.length; i++)
+                 {
+                     if(item = store.get(data[i].id))
                      {
-                         if(item = store.get(data[i].id))
+                         var modified;
+                         for(var propName in data[i])
                          {
-                             var modified;
-                             for(var propName in data[i])
+                             if(item[ propName ] != data[i][ propName ])
                              {
-                                 if(item[ propName ] != data[i][ propName ])
-                                 {
-                                     item[ propName ] = data[i][ propName ];
-                                     modified = true;
-                                 }
-                             }
-                             if(modified)
-                             {
-                                 // ... check attributes for updates
-                                 store.notify(item, data[i].id);
+                                 item[ propName ] = data[i][ propName ];
+                                 modified = true;
                              }
                          }
-                         else
+                         if(modified)
                          {
-                             // ,,, if not in the store then add
-                             store.put(data[i]);
+                             // ... check attributes for updates
+                             store.notify(item, data[i].id);
                          }
                      }
-                 });
-         };
+                     else
+                     {
+                         // ,,, if not in the store then add
+                         store.put(data[i]);
+                     }
+                 }
+
+            };
 
 
-         queueUpdater = new Object();
 
          function formatBytes(amount)
          {
-            this.units = "bytes";
+            this.units = "B";
             this.value = 0;
 
             if(amount < 1000)
             {
-                this.units = "bytes";
+                this.units = "B";
                 this.value = amount;
             }
             else if(amount < 1000 * 1024)
             {
-                this.units = "Kb";
+                this.units = "KB";
                 this.value = amount / 1024
                 this.value = this.value.toPrecision(3);
             }
             else if(amount < 1000 * 1024 * 1024)
             {
-                this.units = "Mb";
+                this.units = "MB";
                 this.value = amount / (1024 * 1024)
                 this.value = this.value.toPrecision(3);
             }
+            else if(amount < 1000 * 1024 * 1024 * 1024)
+            {
+                this.units = "GB";
+                this.value = amount / (1024 * 1024 * 1024)
+                this.value = this.value.toPrecision(3);
+            }
 
          }
 
-         queueUpdater.update = function() {
+
+         function QueueUpdater()
+         {
+            this.name = dom.byId("name");
+            this.state = dom.byId("state");
+            this.durable = dom.byId("durable");
+            this.lifetimePolicy = dom.byId("lifetimePolicy");
+            this.queueDepthMessages = dom.byId("queueDepthMessages");
+            this.queueDepthBytes = dom.byId("queueDepthBytes");
+            this.queueDepthBytesUnits = dom.byId("queueDepthBytesUnits");
+            this.unacknowledgedMessages = dom.byId("unacknowledgedMessages");
+            this.unacknowledgedBytes = dom.byId("unacknowledgedBytes");
+            this.unacknowledgedBytesUnits = 
dom.byId("unacknowledgedBytesUnits");
+
+            var thisObj = this;
+
+            xhr.get({url: "/rest/queue/test/queue", handleAs: 
"json"}).then(function(data)
+                             {
+                                thisObj.queueData = data[0];
+                                var stats = thisObj.queueData[ "statistics" ];
+
+                                // flatten statistics into attributes
+                                for(var propName in stats)
+                                {
+                                    thisObj.queueData[ propName ] = stats[ 
propName ];
+                                }
+
+                                thisObj.updateHeader();
+                                thisObj.bindingsGrid = new 
UpdatableStore(thisObj.queueData.bindings, "bindings",
+                                                         [ { name: "Exchange", 
   field: "exchange",      width: "90px"},
+                                                           { name: "Binding 
Key", field: "name",          width: "120px"},
+                                                           { name: 
"Arguments",   field: "arguments",     width: "200px"}
+                                                         ]);
+
+                                thisObj.consumersGrid = new 
UpdatableStore(thisObj.queueData.consumers, "consumers",
+                                                         [ { name: "Name",    
field: "name",      width: "120px"},
+                                                           { name: "Mode", 
field: "distributionMode",          width: "120px"}
+                                                         ]);
+
+
+
+                             });
+
+         }
+
+         QueueUpdater.prototype.updateHeader = function()
+         {
+            this.name.innerHTML = this.queueData[ "name" ];
+            this.state.innerHTML = this.queueData[ "state" ];
+            this.durable.innerHTML = this.queueData[ "durable" ];
+            this.lifetimePolicy.innerHTML = this.queueData[ "lifetimePolicy" ];
+
+            this.queueDepthMessages.innerHTML = 
this.queueData["queueDepthMessages"];
+            bytesDepth = new formatBytes( this.queueData["queueDepthBytes"] );
+            this.queueDepthBytes.innerHTML = "(" + bytesDepth.value;
+            this.queueDepthBytesUnits.innerHTML = bytesDepth.units + ")"
+
+            this.unacknowledgedMessages.innerHTML = 
this.queueData["unacknowledgedMessages"];
+            bytesDepth = new formatBytes( 
this.queueData["unacknowledgedBytes"] );
+            this.unacknowledgedBytes.innerHTML = "(" + bytesDepth.value;
+            this.unacknowledgedBytesUnits.innerHTML = bytesDepth.units + ")"
+
+         }
+
+         QueueUpdater.prototype.update = function()
+         {
+
+            var thisObj = this;
+
             xhr.get({url: "/rest/queue/test/queue", handleAs: 
"json"}).then(function(data)
                  {
+                    thisObj.queueData = data[0];
+                    var stats = thisObj.queueData[ "statistics" ];
+
+                    // flatten statistics into attributes
+                    for(var propName in stats)
+                    {
+                        thisObj.queueData[ propName ] = stats[ propName ];
+                    }
+
+                    var bindings = thisObj.queueData[ "bindings" ];
+                    for(var i=0; i < bindings.length; i++)
+                    {
+                        bindings[i].arguments = 
dojo.toJson(bindings[i].arguments);
+
+                    }
+
+                    thisObj.updateHeader();
 
                     queueData = data[0];
                     stats = queueData[ "statistics" ];
-                    dom.byId("name").innerHTML = queueData[ "name" ];
-                    dom.byId("state").innerHTML = queueData[ "state" ];
-                    dom.byId("durable").innerHTML = queueData[ "durable" ];
-                    dom.byId("lifetimePolicy").innerHTML = queueData[ 
"lifetimePolicy" ];
-
-                    dom.byId("queueDepthMessages").innerHTML = 
stats["queueDepthMessages"];
-                    bytesDepth = new formatBytes( stats["queueDepthBytes"] );
-                    dom.byId("queueDepthBytes").innerHTML = "(" + 
bytesDepth.value;
-                    dom.byId("queueDepthBytesUnits").innerHTML = 
bytesDepth.units + ")"
+
+                    var sampleTime = new Date();
+                    var messageIn = stats["totalEnqueuedMessages"];
+                    var bytesIn = stats["totalEnqueuedBytes"];
+                    var messageOut = stats["totalDequeuedMessages"];
+                    var bytesOut = stats["totalDequeuedBytes"];
+
+                    if(thisObj.sampleTime)
+                    {
+                        var samplePeriod = sampleTime.getTime() - 
thisObj.sampleTime.getTime();
+
+                        var msgInRate = (1000 * (messageIn - 
thisObj.messageIn)) / samplePeriod;
+                        var msgOutRate = (1000 * (messageOut - 
thisObj.messageOut)) / samplePeriod;
+                        var bytesInRate = (1000 * (bytesIn - thisObj.bytesIn)) 
/ samplePeriod;
+                        var bytesOutRate = (1000 * (bytesOut - 
thisObj.bytesOut)) / samplePeriod;
+
+                        dom.byId("msgInRate").innerHTML = msgInRate.toFixed(0);
+                        bytesInFormat = new formatBytes( bytesInRate );
+                        dom.byId("bytesInRate").innerHTML = "(" + 
bytesInFormat.value;
+                        dom.byId("bytesInRateUnits").innerHTML = 
bytesInFormat.units + "/s)"
+
+                        dom.byId("msgOutRate").innerHTML = 
msgOutRate.toFixed(0);
+                        bytesOutFormat = new formatBytes( bytesOutRate );
+                        dom.byId("bytesOutRate").innerHTML = "(" + 
bytesOutFormat.value;
+                        dom.byId("bytesOutRateUnits").innerHTML = 
bytesOutFormat.units + "/s)"
+
+                    }
+
+                    thisObj.sampleTime = sampleTime;
+                    thisObj.messageIn = messageIn;
+                    thisObj.bytesIn = bytesIn;
+                    thisObj.messageOut = messageOut;
+                    thisObj.bytesOut = bytesOut;
+
+                    thisObj.bindingsGrid.update(thisObj.queueData.bindings)
+                    thisObj.consumersGrid.update(thisObj.queueData.consumers)
 
 
                  });
          };
 
+         queueUpdater = new QueueUpdater();
+
          updateList.push( queueUpdater );
 
          queueUpdater.update();

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/queue.html
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/queue.html?rev=1304575&r1=1304574&r2=1304575&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/queue.html
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/queue.html
 Fri Mar 23 19:55:33 2012
@@ -10,6 +10,7 @@
         <link rel="stylesheet" 
href="http://ajax.googleapis.com/ajax/libs/dojo/1.7.1/dijit/themes/claro/claro.css";>
         <link rel="stylesheet" 
href="http://ajax.googleapis.com/ajax/libs/dojo/1.7.1/dojox/grid/resources/claroGrid.css";>
 
+        <link rel="stylesheet" href="../css/queue.css" media="screen">
 
                <link rel="stylesheet" href="css/common.css" media="screen">
 
@@ -46,36 +47,36 @@
             <br/>
             <span style="">State:</span><span id="state" 
style="position:absolute; left:6em"></span>
             <span style="position:absolute; left:26em">Pre-fetched:</span>
-            <span id="unack-count" style="position:absolute; 
right:9.5em">500</span>
+            <span id="unacknowledgedMessages" style="position:absolute; 
right:9.5em">500</span>
             <span style="position:absolute; right: 5em; width: 4em"> 
msgs</span>
-            <span style="position:absolute; right: 3.3em">(256</span>
-            <span style="position:absolute; right: 0em; width: 3em">Kb)</span>
+            <span id="unacknowledgedBytes" style="position:absolute; right: 
3.3em">(256</span>
+            <span id="unacknowledgedBytesUnits" style="position:absolute; 
right: 0em; width: 3em">Kb)</span>
             <br/>
             <span style="">Durable:</span><span id="durable" 
style="position:absolute; left:6em"></span>
             <span style="position:absolute; left:26em">Inbound:</span>
-            <span id="inbound-rate-msg" style="position:absolute; 
right:9.5em">347</span>
+            <span id="msgInRate" style="position:absolute; right:9.5em"></span>
             <span style="position:absolute; right: 5em; width: 4em"> 
msg/s</span>
-            <span style="position:absolute; right: 3.3em">(132</span>
-            <span style="position:absolute; right: 0em; width: 
3em">Kb/s)</span>
+            <span id="bytesInRate" style="position:absolute; right: 
3.3em"></span>
+            <span id="bytesInRateUnits" style="position:absolute; right: 0em; 
width: 3em"></span>
             <br/>
             <span style="">Lifespan:</span><span style="position:absolute; 
left:6em" id="lifetimePolicy"></span>
             <span style="position:absolute; left:26em">Outbound:</span>
-            <span id="outbound-rate-msg" style="position:absolute; 
right:9.5em">823</span>
+            <span id="msgOutRate" style="position:absolute; 
right:9.5em"></span>
             <span style="position:absolute; right: 5em; width: 4em"> 
msg/s</span>
-            <span style="position:absolute; right: 3.3em">(0.92</span>
-            <span style="position:absolute; right: 0em; width: 
3em">Mb/s)</span>
+            <span id="bytesOutRate" style="position:absolute; right: 
3.3em"></span>
+            <span id="bytesOutRateUnits" style="position:absolute; right: 0em; 
width: 3em"></span>
             <br/>
             <br/>
             <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 
'Bindings'">
-                I'm pane #1
+                <div id="bindings"></div>
             </div>
             <br/>
             <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 
'Consumers'">
-                I'm pane #2
+                <div id="consumers"></div>
             </div>
             <br/>
             <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 
'Alerting Thresholds'">
-                I'm pane #3
+                TODO
             </div>
         </div>
         <!--<div data-dojo-type="dijit.layout.ContentPane" 
data-dojo-props="region:'trailing'">Trailing pane</div>-->

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java?rev=1304575&r1=1304574&r2=1304575&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java
 Fri Mar 23 19:55:33 2012
@@ -368,7 +368,7 @@ final class QueueAdapter extends Abstrac
         }
         else if(STATE.equals(name))
         {
-            // TODO
+            return State.ACTIVE; // TODO
         }
         else if(TIME_TO_LIVE.equals(name))
         {
@@ -524,19 +524,19 @@ final class QueueAdapter extends Abstrac
             }
             else if(TOTAL_DEQUEUED_MESSAGES.equals(name))
             {
-                return null; // TODO
+                return _queue.getTotalDequeueCount();
             }
             else if(TOTAL_ENQUEUED_BYTES.equals(name))
             {
-                _queue.getTotalEnqueueSize();
+                return _queue.getTotalEnqueueSize();
             }
             else if(TOTAL_ENQUEUED_MESSAGES.equals(name))
             {
-                return null; // TODO
+                return _queue.getTotalEnqueueCount();
             }
             else if(UNACKNOWLEDGED_BYTES.equals(name))
             {
-                return null; // TODO
+                return _queue.getUnackedMessageBytes();
             }
             else if(UNACKNOWLEDGED_MESSAGES.equals(name))
             {

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueue.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueue.java?rev=1304575&r1=1304574&r2=1304575&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueue.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueue.java
 Fri Mar 23 19:55:33 2012
@@ -58,6 +58,12 @@ public interface AMQQueue extends Managa
 
     LogSubject getLogSubject();
 
+    long getUnackedMessageBytes();
+
+    long getTotalDequeueCount();
+
+    long getTotalEnqueueCount();
+
     public interface Context
     {
         QueueEntry getLastSeenEntry();
@@ -121,7 +127,7 @@ public interface AMQQueue extends Managa
 
     void dequeue(QueueEntry entry, Subscription sub);
 
-    void decrementUnackedMsgCount();
+    void decrementUnackedMsgCount(QueueEntry queueEntry);
 
     boolean resend(final QueueEntry entry, final Subscription subscription) 
throws AMQException;
 

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java?rev=1304575&r1=1304574&r2=1304575&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java
 Fri Mar 23 19:55:33 2012
@@ -232,7 +232,7 @@ public abstract class QueueEntryImpl imp
         {
             if(state instanceof SubscriptionAcquiredState)
             {
-                getQueue().decrementUnackedMsgCount();
+                getQueue().decrementUnackedMsgCount(this);
                 Subscription subscription = 
((SubscriptionAcquiredState)state).getSubscription();
                 if (subscription != null)
                 {
@@ -368,7 +368,7 @@ public abstract class QueueEntryImpl imp
             Subscription s = null;
             if (state instanceof SubscriptionAcquiredState)
             {
-                getQueue().decrementUnackedMsgCount();
+                getQueue().decrementUnackedMsgCount(this);
                 s = ((SubscriptionAcquiredState) state).getSubscription();
                 s.onDequeue(this);
             }

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java?rev=1304575&r1=1304574&r2=1304575&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java
 Fri Mar 23 19:55:33 2012
@@ -120,6 +120,7 @@ public class SimpleAMQQueue implements A
 
     private final AtomicLong _dequeueCount = new AtomicLong();
     private final AtomicLong _dequeueSize = new AtomicLong();
+    private final AtomicLong _enqueueCount = new AtomicLong();
     private final AtomicLong _enqueueSize = new AtomicLong();
     private final AtomicLong _persistentMessageEnqueueSize = new AtomicLong();
     private final AtomicLong _persistentMessageDequeueSize = new AtomicLong();
@@ -132,6 +133,7 @@ public class SimpleAMQQueue implements A
     private final AtomicLong _byteTxnDequeues = new AtomicLong(0);
     private final AtomicLong _unackedMsgCount = new AtomicLong(0);
     private final AtomicLong _unackedMsgCountHigh = new AtomicLong(0);
+    private final AtomicLong _unackedMsgBytes = new AtomicLong();
 
     private final AtomicInteger _bindingCountHigh = new AtomicInteger();
 
@@ -196,6 +198,7 @@ public class SimpleAMQQueue implements A
     private final Collection<SubscriptionRegistrationListener> 
_subscriptionListeners =
             new ArrayList<SubscriptionRegistrationListener>();
 
+
     protected SimpleAMQQueue(AMQShortString name, boolean durable, 
AMQShortString owner, boolean autoDelete, boolean exclusive, VirtualHost 
virtualHost, Map<String,Object> arguments)
     {
         this(name, durable, owner, autoDelete, exclusive, virtualHost,new 
SimpleQueueEntryList.Factory(), arguments);
@@ -838,6 +841,7 @@ public class SimpleAMQQueue implements A
     {
         long size = message.getSize();
         getAtomicQueueSize().addAndGet(size);
+        _enqueueCount.incrementAndGet();
         _enqueueSize.addAndGet(size);
         if(message.isPersistent() && isDurable())
         {
@@ -846,6 +850,16 @@ public class SimpleAMQQueue implements A
         }
     }
 
+    public long getTotalDequeueCount()
+    {
+        return _dequeueCount.get();
+    }
+
+    public long getTotalEnqueueCount()
+    {
+        return _enqueueCount.get();
+    }
+
     private void incrementQueueCount()
     {
         getAtomicQueueCount().incrementAndGet();
@@ -869,7 +883,7 @@ public class SimpleAMQQueue implements A
         setLastSeenEntry(sub, entry);
 
         _deliveredMessages.incrementAndGet();
-        incrementUnackedMsgCount();
+        incrementUnackedMsgCount(entry);
 
         sub.send(entry, batch);
     }
@@ -2467,14 +2481,21 @@ public class SimpleAMQQueue implements A
         return _unackedMsgCount.get();
     }
 
-    public void decrementUnackedMsgCount()
+    public long getUnackedMessageBytes()
+    {
+        return _unackedMsgBytes.get();
+    }
+
+    public void decrementUnackedMsgCount(QueueEntry queueEntry)
     {
         _unackedMsgCount.decrementAndGet();
+        _unackedMsgBytes.addAndGet(-queueEntry.getSize());
     }
 
-    private void incrementUnackedMsgCount()
+    private void incrementUnackedMsgCount(QueueEntry entry)
     {
         long unackedMsgCount = _unackedMsgCount.incrementAndGet();
+        _unackedMsgBytes.addAndGet(entry.getSize());
 
         long unackedMsgCountHigh;
         while(unackedMsgCount > (unackedMsgCountHigh = 
_unackedMsgCountHigh.get()))

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/MockAMQQueue.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/MockAMQQueue.java?rev=1304575&r1=1304574&r2=1304575&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/MockAMQQueue.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/MockAMQQueue.java
 Fri Mar 23 19:55:33 2012
@@ -103,6 +103,11 @@ public class MockAMQQueue implements AMQ
         };
     }
 
+    public long getUnackedMessageBytes()
+    {
+        return 0;
+    }
+
     public ConfigStore getConfigStore()
     {
         return getVirtualHost().getConfigStore();
@@ -123,6 +128,16 @@ public class MockAMQQueue implements AMQ
         return 0;
     }
 
+    public long getTotalDequeueCount()
+    {
+        return 0;
+    }
+
+    public long getTotalEnqueueCount()
+    {
+        return 0;
+    }
+
     public int getBindingCountHigh()
     {
         return 0;
@@ -599,7 +614,7 @@ public class MockAMQQueue implements AMQ
         return 0;
     }
 
-    public void decrementUnackedMsgCount()
+    public void decrementUnackedMsgCount(QueueEntry queueEntry)
     {
 
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to