You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2012/03/01 00:37:48 UTC

svn commit: r1295338 - in /qpid/trunk/qpid/tools/src/py: qpid-ha qpidtoollibs/broker.py

Author: aconway
Date: Wed Feb 29 23:37:48 2012
New Revision: 1295338

URL: http://svn.apache.org/viewvc?rev=1295338&view=rev
Log:
QPID-3603: updated qpid-ha to use qpidtoollibs library.

Modified:
    qpid/trunk/qpid/tools/src/py/qpid-ha
    qpid/trunk/qpid/tools/src/py/qpidtoollibs/broker.py

Modified: qpid/trunk/qpid/tools/src/py/qpid-ha
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/py/qpid-ha?rev=1295338&r1=1295337&r2=1295338&view=diff
==============================================================================
--- qpid/trunk/qpid/tools/src/py/qpid-ha (original)
+++ qpid/trunk/qpid/tools/src/py/qpid-ha Wed Feb 29 23:37:48 2012
@@ -23,117 +23,13 @@ import qmf.console, optparse, sys
 from qpid.management import managementChannel, managementClient
 from qpid.messaging import Connection
 from qpid.messaging import Message as QpidMessage
+from qpidtoollibs.broker import BrokerAgent
 try:
     from uuid import uuid4
 except ImportError:
     from qpid.datatypes import uuid4
 
-# Utility for doing fast qmf2 operations on a broker.
-class QmfBroker(object):
-    def __init__(self, conn):
-        self.conn = conn
-        self.sess = self.conn.session()
-        self.reply_to = "qmf.default.topic/direct.%s;{node:{type:topic}, link:{x-declare:{auto-delete:True,exclusive:True}}}" % \
-            str(uuid4())
-        self.reply_rx = self.sess.receiver(self.reply_to)
-        self.reply_rx.capacity = 10
-        self.tx = self.sess.sender("qmf.default.direct/broker")
-        self.next_correlator = 1
-
-    def close(self):
-        self.conn.close()
-
-    def __repr__(self):
-        return "Qpid Broker: %s" % self.url
-
-    def _method(self, method, arguments, addr="org.apache.qpid.broker:broker:amqp-broker"):
-        props = {'method'             : 'request',
-                 'qmf.opcode'         : '_method_request',
-                 'x-amqp-0-10.app-id' : 'qmf2'}
-        correlator = str(self.next_correlator)
-        self.next_correlator += 1
-
-        content = {'_object_id'   : {'_object_name' : addr},
-                   '_method_name' : method,
-                   '_arguments'   : arguments}
-
-        message = QpidMessage(content, reply_to=self.reply_to, correlation_id=correlator,
-                              properties=props, subject="broker")
-        self.tx.send(message)
-        response = self.reply_rx.fetch(10)
-        if response.properties['qmf.opcode'] == '_exception':
-            raise Exception("Exception from Agent: %r" % response.content['_values'])
-        if response.properties['qmf.opcode'] != '_method_response':
-            raise Exception("bad response: %r" % response.properties)
-        return response.content['_arguments']
-
-    def _sendRequest(self, opcode, content):
-        props = {'method'             : 'request',
-                 'qmf.opcode'         : opcode,
-                 'x-amqp-0-10.app-id' : 'qmf2'}
-        correlator = str(self.next_correlator)
-        self.next_correlator += 1
-        message = QpidMessage(content, reply_to=self.reply_to, correlation_id=correlator,
-                              properties=props, subject="broker")
-        self.tx.send(message)
-        return correlator
-
-    def _doClassQuery(self, class_name):
-        query = {'_what'      : 'OBJECT',
-                 '_schema_id' : {'_class_name' : class_name}}
-        correlator = self._sendRequest('_query_request', query)
-        response = self.reply_rx.fetch(10)
-        if response.properties['qmf.opcode'] != '_query_response':
-            raise Exception("bad response")
-        items = []
-        done = False
-        while not done:
-            for item in response.content:
-                items.append(item['_values'])
-            if 'partial' in response.properties:
-                response = self.reply_rx.fetch(10)
-            else:
-                done = True
-        return items
-
-    def _doNameQuery(self, class_name, object_name, package_name='org.apache.qpid.broker'):
-        query = {'_what'      : 'OBJECT',
-                 '_object_id' : {'_object_name' : "%s:%s:%s" % (package_name, class_name, object_name)}}
-        correlator = self._sendRequest('_query_request', query)
-        response = self.reply_rx.fetch(10)
-        if response.properties['qmf.opcode'] != '_query_response':
-            raise Exception("bad response")
-        items = []
-        done = False
-        while not done:
-            for item in response.content:
-                items.append(item['_values'])
-            if 'partial' in response.properties:
-                response = self.reply_rx.fetch(10)
-            else:
-                done = True
-        if len(items) == 1:
-            return items[0]
-        return None
-
-    def _getAllBrokerObjects(self, cls):
-        items = self._doClassQuery(cls.__name__.lower())
-        objs = []
-        for item in items:
-            objs.append(cls(self, item))
-        return objs
-
-    def _getBrokerObject(self, cls, name):
-        obj = self._doNameQuery(cls.__name__.lower(), name)
-        if obj:
-            return cls(self, obj)
-        return None
-
-    def get_ha_broker(self):
-        ha_brokers = self._doClassQuery("habroker")
-        if (not ha_brokers): raise Exception("Broker does not have HA enabled.")
-        return ha_brokers[0]
-
+# QMF address for the HA broker object.
 HA_BROKER = "org.apache.qpid.ha:habroker:ha-broker"
 
 class Command:
@@ -155,9 +51,8 @@ class Command:
             print "Error: wrong number of arguments"
             return
         broker = opts.broker or "localhost:5672"
-        # FIXME aconway 2012-02-23: enforce not doing primary-only operations on a backup & vice versa
         connection = Connection.establish(broker, client_properties={"qpid.ha-admin":1})
-        try: self.do_execute(QmfBroker(connection), opts, args)
+        try: self.do_execute(BrokerAgent(connection), opts, args)
         finally: connection.close()
 
     def do_execute(self, qmf_broker, opts, args):
@@ -211,11 +106,11 @@ class QueryCmd(Command):
         Command.__init__(self, "query", "Print HA configuration settings")
 
     def do_execute(self, qmf_broker, opts, args):
-        hb = qmf_broker.get_ha_broker()
-        for x in [("Status:", "status"),
-                  ("Brokers URL:", "brokers"),
-                  ("Public URL:", "publicBrokers")]:
-            print "%-16s%s"%(x[0], hb[x[1]])
+        hb = qmf_broker.getHaBroker()
+        for x in [("Status:", hb.status),
+                  ("Brokers URL:", hb.brokers),
+                  ("Public URL:", hb.publicBrokers)]:
+            print "%-16s%s"%(x[0], x[1])
 
 QueryCmd()
 

Modified: qpid/trunk/qpid/tools/src/py/qpidtoollibs/broker.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/py/qpidtoollibs/broker.py?rev=1295338&r1=1295337&r2=1295338&view=diff
==============================================================================
--- qpid/trunk/qpid/tools/src/py/qpidtoollibs/broker.py (original)
+++ qpid/trunk/qpid/tools/src/py/qpidtoollibs/broker.py Wed Feb 29 23:37:48 2012
@@ -129,12 +129,6 @@ class BrokerAgent(object):
       return cls(self, obj)
     return None
 
-  def getCluster(self):
-    """
-    Get the broker's Cluster object.
-    """
-    return self._getAllBrokerObjects(Cluster)
-
   def getBroker(self):
     """
     Get the Broker object that contains broker-scope statistics and operations.
@@ -149,8 +143,11 @@ class BrokerAgent(object):
       return brokers[0]
     return None
 
-  def getMemory(self):
-    return self._getAllBrokerObjects(Memory)[0]
+  def getCluster(self):
+    return self._getAllBrokerObjects(Cluster)[0]
+
+  def getHaBroker(self):
+    return self._getAllBrokerObjects(HaBroker)[0]
 
   def getAllConnections(self):
     return self._getAllBrokerObjects(Connection)
@@ -332,6 +329,14 @@ class Broker(BrokerObject):
   def __init__(self, broker, values):
     BrokerObject.__init__(self, broker, values)
 
+class Cluster(BrokerObject):
+  def __init__(self, broker, values):
+    BrokerObject.__init__(self, broker, values)
+
+class HaBroker(BrokerObject):
+  def __init__(self, broker, values):
+    BrokerObject.__init__(self, broker, values)
+
 class Memory(BrokerObject):
   def __init__(self, broker, values):
     BrokerObject.__init__(self, broker, values)



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org