summaryrefslogtreecommitdiff
path: root/python/commands
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2008-10-31 18:56:24 +0000
committerTed Ross <tross@apache.org>2008-10-31 18:56:24 +0000
commite18637a56ae0e3a70f7003512944c3f7b5c5fd0e (patch)
treeacf7562d563fe715b6d23f54cd3c03509be10807 /python/commands
parent4cbbb2a935e2eda7aa8d79fd6d5764cbbfb2010a (diff)
downloadqpid-python-e18637a56ae0e3a70f7003512944c3f7b5c5fd0e.tar.gz
Federation enhancements and bug fixes:
qmfconsole.py - minor fixes, make sure object-dereference only queries one broker Bridge.cpp - Added channel-id to queue name to avoid collisions qpid-route - Added link-map feature for viewing the entire federated topology git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@709532 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'python/commands')
-rwxr-xr-xpython/commands/qpid-route102
1 files changed, 101 insertions, 1 deletions
diff --git a/python/commands/qpid-route b/python/commands/qpid-route
index 7d6d3e333e..47eeef3ff2 100755
--- a/python/commands/qpid-route
+++ b/python/commands/qpid-route
@@ -29,6 +29,7 @@ def Usage ():
print "Usage: qpid-route [OPTIONS] link add <dest-broker> <src-broker>"
print " qpid-route [OPTIONS] link del <dest-broker> <src-broker>"
print " qpid-route [OPTIONS] link list [<dest-broker>]"
+ print " qpid-route [OPTIONS] link map [<broker>]"
print
print " qpid-route [OPTIONS] route add <dest-broker> <src-broker> <exchange> <routing-key> [tag] [exclude-list]"
print " qpid-route [OPTIONS] route del <dest-broker> <src-broker> <exchange> <routing-key>"
@@ -120,6 +121,80 @@ class RouteManager:
print "%-16s%-8d %c %-18s%s" % \
(link.host, link.port, YN(link.durable), link.state, link.lastError)
+ def MapLinks(self):
+ qmf = self.qmf
+ print
+ print "Finding Linked Brokers:"
+
+ brokerList = {}
+ brokerList[self.dest.name()] = self.broker
+ print " %s... Ok" % self.dest
+
+ added = True
+ while added:
+ added = False
+ links = qmf.getObjects(_class="link")
+ for link in links:
+ url = qmfconsole.BrokerURL("%s:%d" % (link.host, link.port))
+ if url.name() not in brokerList:
+ print " %s..." % url.name(),
+ try:
+ b = qmf.addBroker("%s:%d" % (link.host, link.port))
+ brokerList[url.name()] = b
+ added = True
+ print "Ok"
+ except Exception, e:
+ print e
+
+ print
+ print "Dynamic Routes:"
+ bridges = qmf.getObjects(_class="bridge", dynamic=True)
+ fedExchanges = []
+ for bridge in bridges:
+ if bridge.src not in fedExchanges:
+ fedExchanges.append(bridge.src)
+ if len(fedExchanges) == 0:
+ print " none found"
+ else:
+ print
+
+ for ex in fedExchanges:
+ print " Exchange %s:" % ex
+ pairs = []
+ for bridge in bridges:
+ if bridge.src == ex:
+ link = bridge._linkRef_
+ fromUrl = "%s:%s" % (link.host, link.port)
+ toUrl = bridge.getBroker().getUrl()
+ found = False
+ for pair in pairs:
+ if pair.matches(fromUrl, toUrl):
+ found = True
+ if not found:
+ pairs.append(RoutePair(fromUrl, toUrl))
+ for pair in pairs:
+ print " %s" % pair
+ print
+
+ print "Static Routes:"
+ bridges = qmf.getObjects(_class="bridge", dynamic=False)
+ if len(bridges) == 0:
+ print " none found"
+ else:
+ print
+
+ for bridge in bridges:
+ link = bridge._linkRef_
+ fromUrl = "%s:%s" % (link.host, link.port)
+ toUrl = bridge.getBroker().getUrl()
+ print " %s(%s) <= %s(%s) key=%s" % (toUrl, bridge.dest, fromUrl, bridge.src, bridge.key)
+ print
+
+ for broker in brokerList:
+ if broker != self.dest.name():
+ qmf.delBroker(brokerList[broker])
+
+
def AddRoute (self, srcBroker, exchange, routingKey, tag, excludes, dynamic=False):
self.src = qmfconsole.BrokerURL(srcBroker)
if self.dest.match(self.src.host, self.src.port):
@@ -240,6 +315,28 @@ class RouteManager:
elif _verbose:
print "Ok"
+class RoutePair:
+ def __init__(self, fromUrl, toUrl):
+ self.fromUrl = fromUrl
+ self.toUrl = toUrl
+ self.bidir = False
+
+ def __repr__(self):
+ if self.bidir:
+ delimit = "<=>"
+ else:
+ delimit = " =>"
+ return "%s %s %s" % (self.fromUrl, delimit, self.toUrl)
+
+ def matches(self, fromUrl, toUrl):
+ if fromUrl == self.fromUrl and toUrl == self.toUrl:
+ return True
+ if toUrl == self.fromUrl and fromUrl == self.toUrl:
+ self.bidir = True
+ return True
+ return False
+
+
def YN(val):
if val == 1:
return 'Y'
@@ -290,7 +387,9 @@ try:
Usage()
rm.DelLink (cargs[3])
elif cmd == "list":
- rm.ListLinks ()
+ rm.ListLinks()
+ elif cmd == "map":
+ rm.MapLinks()
elif group == "dynamic":
if cmd == "add":
@@ -330,6 +429,7 @@ try:
rm.ClearAllRoutes ()
else:
Usage ()
+
except Exception,e:
print "Failed:", e.args[0]
sys.exit(1)