From 1c8f075b4f4ff2ef2d2fe23bca97f3fa9db4e10c Mon Sep 17 00:00:00 2001 From: Ted Ross Date: Fri, 26 Sep 2008 01:34:52 +0000 Subject: Added property-selector to the console getObjects function git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@699148 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/python/commands/qpid-config | 22 ++++++------- qpid/python/commands/qpid-route | 24 +++++++-------- qpid/python/qpid/qmfconsole.py | 28 ++++++++++++++--- qpid/python/tests_0-10/management.py | 60 ++++++++++++------------------------ 4 files changed, 65 insertions(+), 69 deletions(-) (limited to 'qpid/python') diff --git a/qpid/python/commands/qpid-config b/qpid/python/commands/qpid-config index 0998c58bce..925b54b682 100755 --- a/qpid/python/commands/qpid-config +++ b/qpid/python/commands/qpid-config @@ -82,8 +82,8 @@ class BrokerManager: self.qmf.delBroker(self.broker) def Overview (self): - exchanges = self.qmf.getObjects(name="exchange") - queues = self.qmf.getObjects(name="queue") + exchanges = self.qmf.getObjects(cls="exchange") + queues = self.qmf.getObjects(cls="queue") print "Total Exchanges: %d" % len (exchanges) etype = {} for ex in exchanges: @@ -104,7 +104,7 @@ class BrokerManager: print " non-durable: %d" % (len (queues) - _durable) def ExchangeList (self, filter): - exchanges = self.qmf.getObjects(name="exchange") + exchanges = self.qmf.getObjects(cls="exchange") print "Durable Type Bindings Exchange Name" print "=======================================================" for ex in exchanges: @@ -112,9 +112,9 @@ class BrokerManager: print "%4c %-10s%5d %s" % (YN (ex.durable), ex.type, ex.bindingCount, ex.name) def ExchangeListRecurse (self, filter): - exchanges = self.qmf.getObjects(name="exchange") - bindings = self.qmf.getObjects(name="binding") - queues = self.qmf.getObjects(name="queue") + exchanges = self.qmf.getObjects(cls="exchange") + bindings = self.qmf.getObjects(cls="binding") + queues = self.qmf.getObjects(cls="queue") for ex in exchanges: if self.match (ex.name, filter): print "Exchange '%s' (%s)" % (ex.name, ex.type) @@ -128,8 +128,8 @@ class BrokerManager: def QueueList (self, filter): - queues = self.qmf.getObjects(name="queue") - journals = self.qmf.getObjects(name="journal") + queues = self.qmf.getObjects(cls="queue") + journals = self.qmf.getObjects(cls="journal") print " Store Size" print "Durable AutoDel Excl Bindings (files x file pages) Queue Name" print "===========================================================================================" @@ -149,9 +149,9 @@ class BrokerManager: YN (q.exclusive), q.bindingCount, q.name) def QueueListRecurse (self, filter): - exchanges = self.qmf.getObjects(name="exchange") - bindings = self.qmf.getObjects(name="binding") - queues = self.qmf.getObjects(name="queue") + exchanges = self.qmf.getObjects(cls="exchange") + bindings = self.qmf.getObjects(cls="binding") + queues = self.qmf.getObjects(cls="queue") for queue in queues: if self.match (queue.name, filter): print "Queue '%s'" % queue.name diff --git a/qpid/python/commands/qpid-route b/qpid/python/commands/qpid-route index 8a9522e53a..f9f938cdec 100755 --- a/qpid/python/commands/qpid-route +++ b/qpid/python/commands/qpid-route @@ -62,7 +62,7 @@ class RouteManager: self.qmf.delBroker(self.broker) def getLink (self): - links = self.qmf.getObjects(name="link") + links = self.qmf.getObjects(cls="link") for link in links: if "%s:%d" % (link.host, link.port) == self.src.name (): return link @@ -74,7 +74,7 @@ class RouteManager: print "Linking broker to itself is not permitted" sys.exit(1) - brokers = self.qmf.getObjects(name="broker") + brokers = self.qmf.getObjects(cls="broker") broker = brokers[0] link = self.getLink() if link != None: @@ -92,7 +92,7 @@ class RouteManager: def DelLink (self, srcBroker): self.src = qmfconsole.BrokerURL(srcBroker) - brokers = self.qmf.getObjects(name="broker") + brokers = self.qmf.getObjects(cls="broker") broker = brokers[0] link = self.getLink() if link == None: @@ -103,7 +103,7 @@ class RouteManager: print "Close method returned:", res.status, res.text def ListLinks (self): - links = self.qmf.getObjects(name="link") + links = self.qmf.getObjects(cls="link") if len(links) == 0: print "No Links Found" else: @@ -119,7 +119,7 @@ class RouteManager: if self.dest.name() == self.src.name(): raise Exception("Linking broker to itself is not permitted") - brokers = self.qmf.getObjects(name="broker") + brokers = self.qmf.getObjects(cls="broker") broker = brokers[0] link = self.getLink() @@ -140,7 +140,7 @@ class RouteManager: if link == None: raise Exception("Protocol Error - Missing link ID") - bridges = self.qmf.getObjects(name="bridge") + bridges = self.qmf.getObjects(cls="bridge") for bridge in bridges: if bridge.linkRef == link.getObjectId() and \ bridge.dest == exchange and bridge.key == routingKey: @@ -164,7 +164,7 @@ class RouteManager: raise Exception("No link found from %s to %s" % (self.src.name(), self.dest.name())) sys.exit (0) - bridges = self.qmf.getObjects(name="bridge") + bridges = self.qmf.getObjects(cls="bridge") for bridge in bridges: if bridge.linkRef == link.getObjectId() and bridge.dest == exchange and bridge.key == routingKey: if _verbose: @@ -186,8 +186,8 @@ class RouteManager: raise Exception("Route not found") def ListRoutes (self): - links = self.qmf.getObjects(name="link") - bridges = self.qmf.getObjects(name="bridge") + links = self.qmf.getObjects(cls="link") + bridges = self.qmf.getObjects(cls="bridge") for bridge in bridges: myLink = None @@ -199,8 +199,8 @@ class RouteManager: print "%s %s:%d %s %s" % (self.dest.name(), myLink.host, myLink.port, bridge.dest, bridge.key) def ClearAllRoutes (self): - links = self.qmf.getObjects(name="link") - bridges = self.qmf.getObjects(name="bridge") + links = self.qmf.getObjects(cls="link") + bridges = self.qmf.getObjects(cls="bridge") for bridge in bridges: if _verbose: @@ -218,7 +218,7 @@ class RouteManager: print "Ok" if _dellink: - links = self.qmf.getObjects(name="link") + links = self.qmf.getObjects(cls="link") for link in links: if _verbose: print "Deleting Link: %s:%d... " % (link.host, link.port), diff --git a/qpid/python/qpid/qmfconsole.py b/qpid/python/qpid/qmfconsole.py index 4d06e4a725..3800e54b5b 100644 --- a/qpid/python/qpid/qmfconsole.py +++ b/qpid/python/qpid/qmfconsole.py @@ -139,6 +139,7 @@ class Session: self.cv = Condition() self.syncSequenceList = [] self.getResult = [] + self.getSelect = [] self.error = None self.bindingKeyList = self._bindingKeys(rcvObjects, rcvEvents, rcvHeartbeats) self.manageConnections = manageConnections @@ -157,7 +158,7 @@ class Session: raise Exception(broker.error) self.brokers.append(broker) - self.getObjects(broker=broker, name="agent") + self.getObjects(broker=broker, cls="agent") return broker def delBroker(self, broker): @@ -220,7 +221,7 @@ class Session: schema = - supply a schema object returned from getSchema key = - supply a classKey from the list returned by getClasses - name = - supply a class name as a string + cls = - supply a class name as a string If objects should be obtained from only one agent, use the following argument. Otherwise, the query will go to all agents. @@ -231,6 +232,10 @@ class Session: add the following argument: broker = - supply a broker as returned by addBroker + + If additional arguments are supplied, they are used as property selectors. For example, + if the argument name="test" is supplied, only objects whose "name" property is "test" + will be returned in the result. """ if "broker" in kwargs: brokerList = [] @@ -254,14 +259,19 @@ class Session: cname = None if "schema" in kwargs: pname, cname, hash = kwargs["schema"].getKey() elif "key" in kwargs: pname, cname, hash = kwargs["key"] - elif "name" in kwargs: pname, cname, hash = None, kwargs["name"], None + elif "cls" in kwargs: pname, cname, hash = None, kwargs["cls"], None if cname == None: - raise Exception("No class supplied, use 'schema', 'key', or 'name' argument") + raise Exception("No class supplied, use 'schema', 'key', or 'cls' argument") map = {} map["_class"] = cname if pname != None: map["_package"] = pname if hash != None: map["_hash"] = hash + self.getSelect = [] + for item in kwargs: + if item != "schema" and item != "key" and item != "cls": + self.getSelect.append((item, kwargs[item])) + self.getResult = [] for agent in agentList: broker = agent.broker @@ -453,7 +463,7 @@ class Session: self.cv.acquire() if seq in self.syncSequenceList: - if object.getTimestamps()[2] == 0: + if object.getTimestamps()[2] == 0 and self._selectMatch(object): self.getResult.append(object) self.cv.release() return @@ -471,6 +481,14 @@ class Session: self.syncSequenceList = [] self.cv.notify() self.cv.release() + + def _selectMatch(self, object): + """ Check the object against self.getSelect to check for a match """ + for key, value in self.getSelect: + for prop, propval in object.properties: + if key == prop.name and value != propval: + return False + return True def _decodeValue(self, codec, typecode): """ Decode, from the codec, a value based on its typecode. """ diff --git a/qpid/python/tests_0-10/management.py b/qpid/python/tests_0-10/management.py index 0b83045329..eea1b29404 100644 --- a/qpid/python/tests_0-10/management.py +++ b/qpid/python/tests_0-10/management.py @@ -59,7 +59,7 @@ class ManagementTest (TestBase010): session = self.session self.startQmf() - brokers = self.qmf.getObjects(name="broker") + brokers = self.qmf.getObjects(cls="broker") self.assertEqual (len(brokers), 1) broker = brokers[0] @@ -147,54 +147,44 @@ class ManagementTest (TestBase010): session.queue_declare(queue="dest-queue", exclusive=True, auto_delete=True) session.exchange_bind(queue="dest-queue", exchange="amq.direct") - queues = self.qmf.getObjects(name="queue") + queues = self.qmf.getObjects(cls="queue") "Move 10 messages from src-queue to dest-queue" - result = self.qmf.getObjects(name="broker")[0].queueMoveMessages("src-queue", "dest-queue", 10) + result = self.qmf.getObjects(cls="broker")[0].queueMoveMessages("src-queue", "dest-queue", 10) self.assertEqual (result.status, 0) - queues = self.qmf.getObjects(name="queue") - for q in queues: - if q.name == "src-queue": - sq = q - elif q.name == "dest-queue": - dq = q + sq = self.qmf.getObjects(cls="queue", name="src-queue")[0] + dq = self.qmf.getObjects(cls="queue", name="dest-queue")[0] self.assertEqual (sq.msgDepth,10) self.assertEqual (dq.msgDepth,10) "Move all remaining messages to destination" - result = self.qmf.getObjects(name="broker")[0].queueMoveMessages("src-queue", "dest-queue", 0) + result = self.qmf.getObjects(cls="broker")[0].queueMoveMessages("src-queue", "dest-queue", 0) self.assertEqual (result.status,0) - queues = self.qmf.getObjects(name="queue") - for q in queues: - if q.name == "src-queue": - sq = q - elif q.name == "dest-queue": - dq = q + sq = self.qmf.getObjects(cls="queue", name="src-queue")[0] + dq = self.qmf.getObjects(cls="queue", name="dest-queue")[0] + self.assertEqual (sq.msgDepth,0) self.assertEqual (dq.msgDepth,20) "Use a bad source queue name" - result = self.qmf.getObjects(name="broker")[0].queueMoveMessages("bad-src-queue", "dest-queue", 0) + result = self.qmf.getObjects(cls="broker")[0].queueMoveMessages("bad-src-queue", "dest-queue", 0) self.assertEqual (result.status,4) "Use a bad destination queue name" - result = self.qmf.getObjects(name="broker")[0].queueMoveMessages("src-queue", "bad-dest-queue", 0) + result = self.qmf.getObjects(cls="broker")[0].queueMoveMessages("src-queue", "bad-dest-queue", 0) self.assertEqual (result.status,4) " Use a large qty (40) to move from dest-queue back to " " src-queue- should move all " - result = self.qmf.getObjects(name="broker")[0].queueMoveMessages("dest-queue", "src-queue", 40) + result = self.qmf.getObjects(cls="broker")[0].queueMoveMessages("dest-queue", "src-queue", 40) self.assertEqual (result.status,0) - queues = self.qmf.getObjects(name="queue") - for q in queues: - if q.name == "src-queue": - sq = q - elif q.name == "dest-queue": - dq = q + sq = self.qmf.getObjects(cls="queue", name="src-queue")[0] + dq = self.qmf.getObjects(cls="queue", name="dest-queue")[0] + self.assertEqual (sq.msgDepth,20) self.assertEqual (dq.msgDepth,0) @@ -226,35 +216,23 @@ class ManagementTest (TestBase010): msg = Message(props, body) session.message_transfer(destination="amq.direct", message=msg) - queues = self.qmf.getObjects(name="queue") - for q in queues: - if q.name == "purge-queue": - pq = q + pq = self.qmf.getObjects(cls="queue", name="purge-queue")[0] "Purge top message from purge-queue" result = pq.purge(1) self.assertEqual (result.status, 0) - queues = self.qmf.getObjects(name="queue") - for q in queues: - if q.name == "purge-queue": - pq = q + pq = self.qmf.getObjects(cls="queue", name="purge-queue")[0] self.assertEqual (pq.msgDepth,19) "Purge top 9 messages from purge-queue" result = pq.purge(9) self.assertEqual (result.status, 0) - queues = self.qmf.getObjects(name="queue") - for q in queues: - if q.name == "purge-queue": - pq = q + pq = self.qmf.getObjects(cls="queue", name="purge-queue")[0] self.assertEqual (pq.msgDepth,10) "Purge all messages from purge-queue" result = pq.purge(0) self.assertEqual (result.status, 0) - queues = self.qmf.getObjects(name="queue") - for q in queues: - if q.name == "purge-queue": - pq = q + pq = self.qmf.getObjects(cls="queue", name="purge-queue")[0] self.assertEqual (pq.msgDepth,0) -- cgit v1.2.1