diff options
| author | Gordon Sim <gsim@apache.org> | 2008-04-11 10:02:49 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2008-04-11 10:02:49 +0000 |
| commit | 32863060c89c7101f5db7d962ee3f689fd38323a (patch) | |
| tree | 44760ad0d155634e94c8de7d79277534ab9463fa /qpid/python/commands | |
| parent | 407e277c2dffa27f832dc8f9ce7fc184c9508715 (diff) | |
| download | qpid-python-32863060c89c7101f5db7d962ee3f689fd38323a.tar.gz | |
QPID-913: committed patch from tross@redhat.com
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@647099 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/python/commands')
| -rw-r--r-- | qpid/python/commands/qpid-route | 4 | ||||
| -rw-r--r-- | qpid/python/commands/qpid-tool | 179 |
2 files changed, 183 insertions, 0 deletions
diff --git a/qpid/python/commands/qpid-route b/qpid/python/commands/qpid-route index c69ca6204f..0db28c791b 100644 --- a/qpid/python/commands/qpid-route +++ b/qpid/python/commands/qpid-route @@ -160,6 +160,9 @@ class RouteManager: print "Error closing bridge: %d - %s" % (res.status, res.statusText) sys.exit (1) if len (bridges) == 1: + link = self.getLink () + if link == None: + sys.exit (0) if _verbose: print "Last bridge on link, closing link..." res = mc.syncCallMethod (self.mch, link.id, link.classKey, "close") @@ -208,6 +211,7 @@ class RouteManager: elif _verbose: print "Ok" + links = mc.syncGetObjects (self.mch, "link") for link in links: if _verbose: print "Deleting Link: %s... " % link.address, diff --git a/qpid/python/commands/qpid-tool b/qpid/python/commands/qpid-tool new file mode 100644 index 0000000000..0983e1b8af --- /dev/null +++ b/qpid/python/commands/qpid-tool @@ -0,0 +1,179 @@ +#!/usr/bin/env python + +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +import os +import getopt +import sys +import socket +from cmd import Cmd +from qpid.managementdata import ManagementData +from shlex import split +from qpid.disp import Display +from qpid.peer import Closed + +class Mcli (Cmd): + """ Management Command Interpreter """ + prompt = "qpid: " + + def __init__ (self, dataObject, dispObject): + Cmd.__init__ (self) + self.dataObject = dataObject + self.dispObject = dispObject + + def emptyline (self): + pass + + def do_help (self, data): + print "Management Tool for QPID" + print + print "Commands:" + print " list - Print summary of existing objects by class" + print " list <className> - Print list of objects of the specified class" + print " list <className> all - Print contents of all objects of specified class" + print " list <className> active - Print contents of all non-deleted objects of specified class" + print " list <list-of-IDs> - Print contents of one or more objects (infer className)" + print " list <className> <list-of-IDs> - Print contents of one or more objects" + print " list is space-separated, ranges may be specified (i.e. 1004-1010)" + print " call <ID> <methodName> [<args>] - Invoke a method on an object" + print " schema - Print summary of object classes seen on the target" + print " schema <className> - Print details of an object class" + print " set time-format short - Select short timestamp format (default)" + print " set time-format long - Select long timestamp format" + print " quit or ^D - Exit the program" + print + + def complete_set (self, text, line, begidx, endidx): + """ Command completion for the 'set' command """ + tokens = split (line) + if len (tokens) < 2: + return ["time-format "] + elif tokens[1] == "time-format": + if len (tokens) == 2: + return ["long", "short"] + elif len (tokens) == 3: + if "long".find (text) == 0: + return ["long"] + elif "short".find (text) == 0: + return ["short"] + elif "time-format".find (text) == 0: + return ["time-format "] + return [] + + def do_set (self, data): + tokens = split (data) + try: + if tokens[0] == "time-format": + self.dispObject.do_setTimeFormat (tokens[1]) + except: + pass + + def complete_schema (self, text, line, begidx, endidx): + tokens = split (line) + if len (tokens) > 2: + return [] + return self.dataObject.classCompletions (text) + + def do_schema (self, data): + self.dataObject.do_schema (data) + + def complete_list (self, text, line, begidx, endidx): + tokens = split (line) + if len (tokens) > 2: + return [] + return self.dataObject.classCompletions (text) + + def do_list (self, data): + self.dataObject.do_list (data) + + def do_call (self, data): + try: + self.dataObject.do_call (data) + except ValueError, e: + print "ValueError:", e + + def do_EOF (self, data): + print "quit" + return True + + def do_quit (self, data): + return True + + def postcmd (self, stop, line): + return stop + + def postloop (self): + print "Exiting..." + self.dataObject.close () + +def Usage (): + print "Usage:", sys.argv[0], "[OPTIONS] [<target-host[:<tcp-port>]]" + print + print "Options:" + print " -s [ --spec-file ] PATH (/usr/share/amqp/amqp.0-10-preview.xml)" + print + sys.exit (1) + +#========================================================= +# Main Program +#========================================================= + +# Get host name and port if specified on the command line +try: + longOpts = ("spec-file=") + (optlist, cargs) = getopt.gnu_getopt (sys.argv[1:], 's:', longOpts) +except: + Usage () + sys.exit (1) + +_specpath = "/usr/share/amqp/amqp.0-10-preview.xml" +_host = "localhost" + +for opt in optlist: + if opt[0] == "-s" or opt[0] == "--spec-file": + _specpath = opt[1] + +if len (cargs) > 0: + _host = cargs[0] + +disp = Display () + +# Attempt to make a connection to the target broker +try: + data = ManagementData (disp, _host, specfile=_specpath) +except socket.error, e: + print "Socket Error (%s):" % _host, e[1] + sys.exit (1) +except Closed, e: + if str(e).find ("Exchange not found") != -1: + print "Management not enabled on broker: Use '-m yes' option on broker startup." + sys.exit (1) +except IOError, e: + print "IOError: %d - %s: %s" % (e.errno, e.strerror, e.filename) + sys.exit (1) + +# Instantiate the CLI interpreter and launch it. +cli = Mcli (data, disp) +print ("Management Tool for QPID") +try: + cli.cmdloop () +except Closed, e: + print "Connection to Broker Lost:", e + sys.exit (1) |
