summaryrefslogtreecommitdiff
path: root/qpid/python/commands
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2008-04-11 10:02:49 +0000
committerGordon Sim <gsim@apache.org>2008-04-11 10:02:49 +0000
commit32863060c89c7101f5db7d962ee3f689fd38323a (patch)
tree44760ad0d155634e94c8de7d79277534ab9463fa /qpid/python/commands
parent407e277c2dffa27f832dc8f9ce7fc184c9508715 (diff)
downloadqpid-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-route4
-rw-r--r--qpid/python/commands/qpid-tool179
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)