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

rhmessaging-commits at lists.jboss.org rhmessaging-commits at lists.jboss.org
Tue Aug 12 14:12:20 EDT 2008


Author: eallen
Date: 2008-08-12 14:12:20 -0400 (Tue, 12 Aug 2008)
New Revision: 2283

Modified:
   mgmt/trunk/cumin/python/cumin/broker.py
   mgmt/trunk/cumin/python/cumin/brokerlink.py
   mgmt/trunk/cumin/python/cumin/brokerlink.strings
   mgmt/trunk/cumin/python/cumin/model.py
Log:
Added Broker Link actions: 
- Add
- Close multiple
- Close one

Modified: mgmt/trunk/cumin/python/cumin/broker.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/broker.py	2008-08-12 17:33:40 UTC (rev 2282)
+++ mgmt/trunk/cumin/python/cumin/broker.py	2008-08-12 18:12:20 UTC (rev 2283)
@@ -170,12 +170,18 @@
         
         self.__peer = PeerFrame(app, "peer")
         self.add_mode(self.__peer)
+        
+        self.__broker_add = BrokerLinkAdd(app, "brokeradd")
+        self.add_mode(self.__broker_add)
 
         self.__conn = ConnectionFrame(app, "conn")
         self.add_mode(self.__conn)
 
         self.__conns_close = ConnectionSetClose(app, "connsclose")
         self.add_mode(self.__conns_close)
+        
+        self.__broker_links_close = BrokerSetClose(app, "brokersclose")
+        self.add_mode(self.__broker_links_close)
 
     def show_queue(self, session, queue):
         self.__queue.set_object(session, queue)
@@ -221,6 +227,14 @@
         self.page.set_current_frame(session, self.__peer)
         return self.show_mode(session, self.__peer)
 
+    def show_broker_link_add(self, session):
+        self.page.set_current_frame(session, self.__broker_add)
+        return self.show_mode(session, self.__broker_add) 
+
+    def show_broker_links_close(self, session):
+        self.page.set_current_frame(session, self.__broker_links_close)
+        return self.show_mode(session, self.__broker_links_close)
+    
     def show_connection(self, session, conn):
         self.__conn.set_object(session, conn)
         self.page.set_current_frame(session, self.__conn)

Modified: mgmt/trunk/cumin/python/cumin/brokerlink.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/brokerlink.py	2008-08-12 17:33:40 UTC (rev 2282)
+++ mgmt/trunk/cumin/python/cumin/brokerlink.py	2008-08-12 18:12:20 UTC (rev 2283)
@@ -12,10 +12,13 @@
 
 strings = StringCatalog(__file__)
 
-class PeerSet(CuminTable):
+class PeerSet(CuminTable, Form):
     def __init__(self, app, name):
         super(PeerSet, self).__init__(app, name)
 
+        self.ids = CheckboxIdColumn(app, "id", self)
+        self.add_column(self.ids)
+
         col = self.AddressColumn(app, "addr")
         self.add_column(col)
 
@@ -33,7 +36,15 @@
 
         #col = self.ToPeerColumn(app, "to_peer")
         #self.add_column(col)
+        
+        self.__close = self.Close(app, "close", self)
+        self.add_child(self.__close)
 
+    def render_add_broker_link_url(self, session, vhost):
+        branch = session.branch()
+        self.frame.show_broker_link_add(branch)
+        return branch.marshal()
+    
     def get_args(self, session):
         reg = self.frame.get_object(session)
         return (reg.getDefaultVhost(),)
@@ -89,6 +100,19 @@
         def render_value(self, session, value):
             return fmt_rate(value)
 
+    class Close(FormButton):
+        def render_content(self, session):
+            return "Close"
+
+        def process_submit(self, session):
+            ids = self.parent.ids.get(session)
+            self.parent.ids.clear(session)
+
+            branch = session.branch()
+            frame = self.frame.show_broker_links_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)
@@ -99,10 +123,40 @@
         view = PeerView(app, "view")
         self.add_mode(view)
         self.set_view_mode(view)
-        
+
+        remove = LinkRemove(app, "remove")
+        self.add_mode(remove)
+        self.set_remove_mode(remove)
+
     def render_title(self, session, peer):
         return super(PeerFrame, self).render_title(session, peer)
 
+class LinkRemove(CuminConfirmForm):
+    def get_args(self, session):
+        return self.frame.get_args(session)
+
+    def process_cancel(self, session, link):
+        branch = session.branch()
+        self.frame.show_view(branch)
+        self.page.set_redirect_url(session, branch.marshal())
+
+    def process_submit(self, session, link):
+        action = self.app.model.link.close
+        action.invoke(link)
+
+        branch = session.branch()
+        self.frame.frame.show_view(branch)
+        self.page.set_redirect_url(session, branch.marshal())
+
+    def render_title(self, session, link):
+        return "Close Broker Link '%s:%d'" % (link.host, link.port)
+
+    def render_submit_content(self, session, link):
+        return "Yes, Close Broker Link"
+
+    def render_cancel_content(self, session, link):
+        return "No, Cancel"
+
 class PeerStatus(CuminStatus):
     def render_messages_received(self, session, peer):
         return self.app.model.exchange.msgReceives.rate_html(peer)
@@ -201,3 +255,144 @@
         def render_title(self, session, exchange):
             return "Messages Received, Routed, and Dropped"
 
+class BrokerLinkAdd(CuminFieldForm):
+    def __init__(self, app, name):
+        super(BrokerLinkAdd, self).__init__(app, name)
+
+        self.host = DictParameter(app, "host")
+        self.add_parameter(self.host)
+        self.add_form_parameter(self.host)
+
+        self.durable = DurabilityField(app, "durable", self)
+        self.add_field(self.durable)
+        
+        self.errors = dict()
+
+    def render_title(self, session, *args):
+        reg = self.frame.get_object(session)
+        return "Add Broker Link to '%s'" % reg.name
+
+    def render_broker_name_path(self, session, *args):
+        return "_".join((self.host.path, "name"))
+        
+    def render_broker_port_path(self, session, *args):
+        return "_".join((self.host.path, "port"))
+        
+    def render_broker_name_value(self, session, *args):
+        host = self.host.get(session)
+        if "name" in host:
+            return host["name"]
+
+    def render_broker_port_value(self, session, *args):
+        host = self.host.get(session)
+        if "port" in host:
+            return host["port"]
+        
+    def render_broker_username_path(self, session, *args):
+        return "_".join((self.host.path, "username"))
+        
+    def render_broker_password_path(self, session, *args):
+        return "_".join((self.host.path, "password"))
+        
+    def render_broker_username_value(self, session, *args):
+        host = self.host.get(session)
+        if "username" in host:
+            return host["username"]
+
+    def render_broker_password_value(self, session, *args):
+        host = self.host.get(session)
+        if "password" in host:
+            return host["password"]
+        
+    def render_broker_name_error(self, session, *args):
+        if "name" in self.errors:
+            return "<ul class=\"errors\" style=\"float:left;\"><li>%s</li></ul>" % \
+                self.errors["name"]
+        
+    def render_broker_port_error(self, session, *args):
+        if "port" in self.errors:
+            return "<ul class=\"errors\" style=\"float:left;\"><li>%s</li></ul>" % \
+                self.errors["port"]
+        
+    def process_cancel(self, session):
+        self.host.clear(session)
+        branch = session.branch()
+        self.frame.show_view(branch)
+        self.page.set_redirect_url(session, branch.marshal())
+
+    def validate(self, session):
+        self.errors = dict()
+
+        host = self.host.get(session)
+        if not "name" in host:
+            self.errors["name"] = "Host name is required"
+        if "port" in host:
+            port = host["port"]
+            try:
+                # ensure a number and remove surrounding spaces
+                port = str(int(port))
+            except:
+                self.errors["port"] = "Port must be a number"
+        
+        return not len(self.errors)
+
+    def process_submit(self, session):
+        
+        super_error = super(BrokerLinkAdd, self).validate(session)
+        
+        if self.validate(session) and not super_error:
+            host = self.host.get(session)
+            username = "anonymous"
+            password = ""
+            port = 5672
+            addr = host["name"]
+
+            if "port" in host:
+                port = int(host["port"])
+
+            durable = self.durable.get(session)
+            if "username" in host:
+                username = host["username"]
+                if "password" in host:
+                    password = host["password"]
+
+            link = Link()
+            link.host = addr
+            link.port = port
+            link.useSsl = False
+            link.durable = (durable == "durable")
+            reg = self.frame.get_object(session)
+
+            args = {"reg": reg,
+                    "username": username,
+                    "password": password}
+            
+            action = self.app.model.broker.add_link
+            action.invoke(link, args)
+            
+            # navigate back to main queue frame
+            self.process_cancel(session)
+
+class BrokerSetClose(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):
+        link = Link.get(id)
+        action = self.app.model.link.close
+        action.invoke(link)
+
+    def render_title(self, session):
+        return "Close Broker Link"
+    
+    def render_form_heading(self, session, *args):
+        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

Modified: mgmt/trunk/cumin/python/cumin/brokerlink.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/brokerlink.strings	2008-08-12 17:33:40 UTC (rev 2282)
+++ mgmt/trunk/cumin/python/cumin/brokerlink.strings	2008-08-12 18:12:20 UTC (rev 2283)
@@ -20,6 +20,33 @@
 join vhost as v on v.id = l.vhost_id
 {sql_where}
 
+[PeerSet.html]
+<form id="{id}" method="post" action="?">
+
+  <ul class="actions">
+  	<li><a class="nav" href="{add_broker_link_url}">Add Broker Link</a></li>
+  </ul>
+
+  <div class="sactions">
+    <h2>Act on Selected Broker Links:</h2>
+    {close}
+  </div>
+
+  <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>
+
 [PeerRouteSet.html]
 <div class="rfloat">{page}</div>
 <ul class="radiotabs">&nbsp;</ul>
@@ -42,3 +69,59 @@
   <td>{item_exchange}</td>
   <td>{item_routing_key}</td>
 </tr>
+
+[BrokerLinkAdd.css]
+div.field div.input_prompt {
+	width: 5em;
+	padding-right: 1em;
+	float:left;
+}
+
+div.multiple div.inputs {
+	margin-bottom: 0.25em;
+}
+
+div.multiple div.field {
+	margin-bottom: 1em;
+}
+
+div.field div.input_prompt:after {
+  content: ":";
+}
+
+div.field div.inputs input {
+	float:left;
+}
+div.field div.inputs:after {
+    content: ".";
+    display: block;
+    height: 0;
+    clear: left;
+    visibility: hidden;
+}
+
+[BrokerLinkAdd.html]
+<form id="{id}" class="mform" method="post" action="?">
+  <div class="head">{title}</div>
+  <div class="body multiple">
+ 	<div class="field">
+	  <div class="title">Source Broker</div>
+	  <div class="inputs"><div class="input_prompt">Address</div><input type="text" name="{broker_name_path}" value="{broker_name_value}" tabindex="100"  size="32"/>{broker_name_error}</div>
+	  <div class="inputs"><div class="input_prompt">Port</div><input type="text" name="{broker_port_path}" value="{broker_port_value}" tabindex="100"  size="5"/>{broker_port_error}</div>
+	  <div class="inputs"><div class="input_prompt">Username</div><input type="text" name="{broker_username_path}" value="{broker_username_value}" tabindex="100" size="32"/></div>
+	  <div class="inputs"><div class="input_prompt">Password</div><input type="text" name="{broker_password_path}" value="{broker_password_value}" tabindex="100" size="32"/></div>
+	</div> 
+  {fields}
+  </div>
+  {form_error}
+  <div class="foot">
+  	{help}
+    {submit}
+    {cancel}
+  </div>
+  <div>{hidden_inputs}</div>
+</form>
+<script type="text/javascript">
+  wooly.doc().elembyid("{id}").node.elements[0].focus();
+</script>
+

Modified: mgmt/trunk/cumin/python/cumin/model.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/model.py	2008-08-12 17:33:40 UTC (rev 2282)
+++ mgmt/trunk/cumin/python/cumin/model.py	2008-08-12 18:12:20 UTC (rev 2283)
@@ -12,7 +12,6 @@
 from parameters import *
 
 
-
 log = getLogger("cumin.model")
 
 class CuminModel(object):
@@ -558,6 +557,9 @@
         action = self.AddExchange(self, "add_exchange")
         action.summary = True
 
+        action = self.AddLink(self, "add_link")
+        action.summary = True
+
         action = self.AddQueue(self, "add_queue")
         action.summary = True
 
@@ -590,6 +592,31 @@
             # raised and we won't get here
             completion("OK")
 
+    class AddLink(CuminAction):
+        def get_title(self, session):
+            return "Add Broker Link"
+
+        def get_verb(self, session):
+            return "Add"
+        
+        def show(self, session, exchange):
+            frame = self.cumin_class.show_object(session, exchange)
+            return frame.show_broker_link_add(session)
+        
+        def do_invoke(self, link, args, completion):
+            reg = args["reg"]
+            username = args["username"]
+            password = args["password"]
+            if username == "anonymous":
+                authMechanism = "ANONYMOUS"
+            else:
+                authMechanism = "PLAIN"
+
+            broker = reg._get_broker()
+            broker.connect(self.cumin_model.data, completion, 
+                        link.host, link.port, link.useSsl, link.durable,
+                        authMechanism, username, password)
+            
     class AddQueue(CuminAction):
         def get_title(self, session):
             return "Add Queue"
@@ -1178,12 +1205,31 @@
         stat.unit = "byte"
         stat.category = "io"
 
+        action = self.Close(self, "close")
+        action.summary = True
+        
     def get_title(self, session):
         return "Broker Link"
 
     def get_object_name(self, link):
         return "%s:%d" % (link.host, link.port)
 
+    def show_object(self, session, link):
+        frame = self.cumin_model.show_main(session)
+        return frame.show_broker(session, link.vhost.broker.registration)
+
+    class Close(CuminAction):
+        def show(self, session, link):
+            frame = self.cumin_class.show_object(session, link)
+            frame = frame.show_peer(session, link)
+            return frame.show_remove(session)
+        
+        def get_title(self, session):
+            return "Close"
+
+        def do_invoke(self, link, args, completion):
+            link.close(self.cumin_model.data, completion)
+
 class CuminStore(RemoteClass):
     def __init__(self, model):
         super(CuminStore, self).__init__(model, "store", Store, StoreStats)




More information about the rhmessaging-commits mailing list