diff options
| author | Ted Ross <tross@apache.org> | 2008-10-31 18:56:24 +0000 |
|---|---|---|
| committer | Ted Ross <tross@apache.org> | 2008-10-31 18:56:24 +0000 |
| commit | e18637a56ae0e3a70f7003512944c3f7b5c5fd0e (patch) | |
| tree | acf7562d563fe715b6d23f54cd3c03509be10807 /python/commands | |
| parent | 4cbbb2a935e2eda7aa8d79fd6d5764cbbfb2010a (diff) | |
| download | qpid-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-x | python/commands/qpid-route | 102 |
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) |
