[rhmessaging-commits] rhmessaging commits: r2310 - mgmt/trunk/cumin/python/cumin.

rhmessaging-commits at lists.jboss.org rhmessaging-commits at lists.jboss.org
Thu Aug 14 14:50:27 EDT 2008


Author: eallen
Date: 2008-08-14 14:50:27 -0400 (Thu, 14 Aug 2008)
New Revision: 2310

Modified:
   mgmt/trunk/cumin/python/cumin/brokerlink.py
   mgmt/trunk/cumin/python/cumin/brokerlink.strings
   mgmt/trunk/cumin/python/cumin/model.py
Log:
Added Route (bridge) remove
Changed PeerRouteSet from a PaginatedItemSet to an SQLTable to allow for selecting multiple routes, filtering, and sorting

Modified: mgmt/trunk/cumin/python/cumin/brokerlink.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/brokerlink.py	2008-08-14 18:46:21 UTC (rev 2309)
+++ mgmt/trunk/cumin/python/cumin/brokerlink.py	2008-08-14 18:50:27 UTC (rev 2310)
@@ -18,9 +18,12 @@
     def __init__(self, app, name):
         super(PeerSet, self).__init__(app, name)
 
-        self.ids = CheckboxIdColumn(app, "id", self)
+        self.ids = FilteredCheckboxIdColumn(app, "id", self, callback=self.disable_closed)
         self.add_column(self.ids)
 
+        #self.ids = CheckboxIdColumn(app, "id", self)
+        #self.add_column(self.ids)
+
         col = self.AddressColumn(app, "addr")
         self.add_column(col)
 
@@ -61,6 +64,9 @@
     def get_sql_values(self, session, vhost):
         return {"vhost_id": vhost.id}
 
+    def disable_closed(self, session, data):
+        return data["state"] == "Closed"
+        
     class AddressColumn(SqlTableColumn):
         def render_title(self, session, data):
             return "Address"
@@ -115,6 +121,96 @@
             frame.ids.set(branch, ids)
             self.page.set_redirect_url(session, branch.marshal())
 
+class PeerRouteSet(CuminTable, Form):
+    def __init__(self, app, name):
+        super(PeerRouteSet, self).__init__(app, name)
+
+        self.ids = CheckboxIdColumn(app, "id", self)
+        self.add_column(self.ids)
+
+        #col = self.SourceColumn(app, "source")
+        #self.add_column(col)
+
+        #col = self.DestinationColumn(app, "managed_broker")
+        #self.add_column(col)
+
+        col = self.ExchangeColumn(app, "exchange")
+        self.add_column(col)
+
+        col = self.KeyColumn(app, "key")
+        self.add_column(col)
+        
+        col = self.TagColumn(app, "tag")
+        self.add_column(col)
+        
+        col = self.ExcludesColumn(app, "excludes")
+        self.add_column(col)
+
+        self.__remove = self.Remove(app, "remove", self)
+        self.add_child(self.__remove)
+
+    def get_args(self, session):
+        return self.frame.get_args(session)
+
+    def render_title(self, session, link):
+        count = self.get_item_count(session, link)
+        return "Link Routes %s" % fmt_count(count)
+
+    def render_sql_where(self, session, link):
+        return "where l.id = %(link_id)r and b.deletion_time is null"
+    
+    def get_sql_values(self, session, link):
+        return {"link_id": link.id}
+
+    def render_add_bridge_url(self, session, route):
+        branch = session.branch()
+        self.frame.show_bridge_add(branch)
+        return branch.marshal()
+        
+    class SourceColumn(SqlTableColumn):
+        def render_title(self, session, data):
+            return "Source"
+
+        def render_content(self, session, data):
+            return "%s:%i" % (data["host"], data["port"])
+
+        def get_orderby_sql(self, session):
+            dir = self.parent.is_reversed(session) and "desc" or "asc"
+            return "order by l.host, l.port %s" % dir
+
+    class DestinationColumn(SqlTableColumn):
+        def render_title(self, session, data):
+            return "Destination"
+
+    class ExchangeColumn(SqlTableColumn):
+        def render_title(self, session, data):
+            return "Exchange"
+
+    class KeyColumn(SqlTableColumn):
+        def render_title(self, session, data):
+            return "Routing Key"
+
+    class TagColumn(SqlTableColumn):
+        def render_title(self, session, data):
+            return "Tag"
+
+    class ExcludesColumn(SqlTableColumn):
+        def render_title(self, session, data):
+            return "Excludes"
+
+    class Remove(FormButton):
+        def render_content(self, session):
+            return "Remove"
+
+        def process_submit(self, session):
+            ids = self.parent.ids.get(session)
+            self.parent.ids.clear(session)
+
+            branch = session.branch()
+            frame = self.frame.show_routes_close(branch)
+            frame.ids.set(branch, ids)
+            self.page.set_redirect_url(session, branch.marshal())
+
 class PeerFrame(CuminFrame):
     def __init__(self, app, name):
         super(PeerFrame, self).__init__(app, name)
@@ -132,6 +228,10 @@
         
         self.__bridge_add = BridgeAdd(app, "bridgeadd")
         self.add_mode(self.__bridge_add)
+        
+        self.__routes_close = PeerRouteSetClose(app, "routesclose")
+        self.add_mode(self.__routes_close)
+        
 
     def render_title(self, session, peer):
         return super(PeerFrame, self).render_title(session, peer)
@@ -140,6 +240,10 @@
         self.page.set_current_frame(session, self.__bridge_add)
         return self.show_mode(session, self.__bridge_add) 
 
+    def show_routes_close(self, session):
+        self.page.set_current_frame(session, self.__routes_close)
+        return self.show_mode(session, self.__routes_close)
+
 class LinkRemove(CuminConfirmForm):
     def get_args(self, session):
         return self.frame.get_args(session)
@@ -209,38 +313,6 @@
         data = "model.xml?class=peer;id=%i" % peer.id
         return "wooly.setIntervalUpdate('%s', updatePeer, 3000)" % data
 
-class PeerRouteSet(PaginatedItemSet):
-    def get_args(self, session):
-        return self.frame.get_args(session)
-
-    def render_title(self, session, peer):
-        return "Link Routes %s" % \
-            fmt_count(self.get_item_count(session, peer))
-
-    def get_item_count(self, session, peer):
-        return peer.bridges.count()
-
-    def do_get_items(self, session, peer):
-        start, end = self.get_bounds(session)
-        return peer.bridges[start:end]
-
-    def render_add_bridge_url(self, session, route):
-        branch = session.branch()
-        self.frame.show_bridge_add(branch)
-        return branch.marshal()
-        
-    def render_item_destination(self, session, route):
-        return route.link.managedBroker
-    
-    def render_item_src(self, session, route):
-        return "%s:%d" % (route.link.host, route.link.port)
-    
-    def render_item_exchange(self, session, route):
-        return route.dest
-    
-    def render_item_routing_key(self, session, route):
-        return route.key
-
 class PeerStats(TabbedModeSet):
     def __init__(self, app, name):
         super(PeerStats, self).__init__(app, name)
@@ -541,10 +613,33 @@
         return "Close Broker Link"
     
     def render_form_heading(self, session, *args):
-        return "Close Link to:"
+        return "Close Link to"
 
     def render_item_content(self, session, id):
         link = Link.get(id)
         return "Broker: %s:%d" % (link.host, link.port)
 
-    
\ No newline at end of file
+class PeerRouteSetClose(CuminBulkActionForm):
+    def process_return(self, session):
+        branch = session.branch()
+        self.frame.show_view(branch)
+        self.page.set_current_frame(branch, self.frame)
+        self.page.set_redirect_url(session, branch.marshal())
+
+    def process_item(self, session, id):
+        bridge = Bridge.get(id)
+        action = self.app.model.route.remove
+        action.invoke(bridge)
+
+    def render_title(self, session):
+        link = self.parent.get_object(session)
+        return "Remove Route from %s:%i" % (link.host, link.port)
+    
+    def render_form_heading(self, session, *args):
+        return "Remove Route"
+
+    def render_item_content(self, session, id):
+        bridge = Bridge.get(id)
+        return "<td>%s</td><td>%s</td>" % (bridge.dest, bridge.key)
+
+       
\ No newline at end of file

Modified: mgmt/trunk/cumin/python/cumin/brokerlink.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/brokerlink.strings	2008-08-14 18:46:21 UTC (rev 2309)
+++ mgmt/trunk/cumin/python/cumin/brokerlink.strings	2008-08-14 18:50:27 UTC (rev 2310)
@@ -47,33 +47,58 @@
   <div>{hidden_inputs}</div>
 </form>
 
+[PeerRouteSet.sql]
+select
+  b.id,
+  b.src,
+  b.dest as exchange,
+  b.key,
+  b.tag,
+  b.excludes,
+  l.host,
+  l.port,
+  l.managed_broker
+from bridge as b
+join link as l on l.id = b.link_id
+left outer join bridge_stats as c on c.id = b.stats_curr_id
+left outer join bridge_stats as p on p.id = b.stats_prev_id
+{sql_where}
+{sql_orderby}
+{sql_limit}
+
+[PeerRouteSet.count_sql]
+select count(*)
+from bridge as b
+join link as l on l.id = b.link_id
+{sql_where}
+
 [PeerRouteSet.html]
+<form id="{id}" method="post" action="?">
+
   <ul class="actions">
   	<li><a class="nav" href="{add_bridge_url}">Add Route</a></li>
   </ul>
 
-<div class="rfloat">{page}</div>
-<ul class="radiotabs">&nbsp;</ul>
+  <div class="sactions">
+    <h2>Act on Selected Routes:</h2>
+    {remove}
+  </div>
 
-<table class="ExchangeBindingSet mobjects">
-  <tr>
-    <th>Source</th>
-    <th>Destination</th>
-    <th>Exchange</th>
-    <th>Routing Key</th>
-  </tr>
+  <table class="mobjects">
+    <thead>
+      <tr>
+        <th class="setnav" colspan="{column_count}">
+          <div class="rfloat">{page}</div>
+          {count}
+        </th>
+      </tr>
+      <tr>{headers}</tr>
+    </thead>
+    <tbody>{items}</tbody>
+  </table>
+  <div>{hidden_inputs}</div>
+</form>
 
-  {items}
-</table>
-
-[PeerRouteSet.item_html]
-<tr>
-  <td>{item_src}</td>
-  <td>{item_destination}</a></td>
-  <td>{item_exchange}</td>
-  <td>{item_routing_key}</td>
-</tr>
-
 [BrokerLinkAdd.css]
 div.field div.input_prompt {
 	width: 5em;
@@ -169,3 +194,34 @@
 	  {exchanges}
     </fieldset>
 
+[PeerRouteSetClose.html]
+<form id="{id}" class="mform" method="post" action="?">
+  <div class="head">
+    <h1>{title}</h1>
+  </div>
+  <div class="body">
+    <span class="legend">{form_heading}</span>
+	  <table class="mobjects">
+	    <thead>
+	      <tr>
+	      	<th>Exchange</th>
+	      	<th>Key</th>
+	      </tr>
+	    </thead>
+	    <tbody>{items}</tbody>
+	  </table>
+    {hidden_inputs}
+  </div>
+  <div class="foot">
+    {help}
+    {submit}
+    {cancel}
+  </div>
+</form>
+<script type="text/javascript">
+  wooly.doc().elembyid("{id}").node.elements[0].focus();
+</script>
+
+[PeerRouteSetClose.item_html]
+<tr>{item_content}</tr>
+

Modified: mgmt/trunk/cumin/python/cumin/model.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/model.py	2008-08-14 18:46:21 UTC (rev 2309)
+++ mgmt/trunk/cumin/python/cumin/model.py	2008-08-14 18:50:27 UTC (rev 2310)
@@ -1016,8 +1016,23 @@
         super(CuminRoute, self).__init__(model, "route",
                                            Bridge, BridgeStats)
 
-        prop = CuminProperty(self, "routeKey")
+        prop = CuminProperty(self, "key")
         prop.title = "Route Key"
+        
+        prop = CuminProperty(self, "tag")
+        prop.title = "Tag"
+        
+        prop = CuminProperty(self, "excludes")
+        prop.title = "Excludes"
+         
+        prop = CuminProperty(self, "durable")
+        prop.title = "Durable"
+        
+        prop = CuminProperty(self, "dest")
+        prop.title = "Exchange"
+         
+        action = self.Remove(self, "remove")
+        #action.summary = True
 
     def get_title(self, session):
         return "Route"
@@ -1025,6 +1040,18 @@
     def get_object_name(self, route):
         return route.src
     
+    class Remove(CuminAction):
+        def get_title(self, session):
+            return "Remove"
+        
+        def show(self, session, peer):
+            frame = self.cumin_class.show_object(session, peer)
+            frame = frame.show_peer(session, peer)
+            return frame.show_remove(session)
+        
+        def do_invoke(self, bridge, args, completion):
+            bridge.close(self.cumin_model.data, completion)
+    
 class CuminConnection(RemoteClass):
     def __init__(self, model):
         super(CuminConnection, self).__init__(model, "connection",
@@ -1179,9 +1206,11 @@
 
         prop = CuminProperty(self, "useSsl")
         prop.title = "Use SSL"
+        prop.summary = True
 
         prop = CuminProperty(self, "durable")
         prop.title = "Durable"
+        prop.summary = True
 
         stat = CuminStat(self, "closing")
         stat.title = "Closing Down"




More information about the rhmessaging-commits mailing list