From b57cbea2e80030da1ec46b74ed5c09a7329299c9 Mon Sep 17 00:00:00 2001 From: "Rafael H. Schloming" Date: Sun, 14 Feb 2010 14:59:24 +0000 Subject: moved qpid-* tools out of qpid/python into qpid/tools; moved qmf library into extras/qmf git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@910016 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/tools/src/py/qpid-printevents | 74 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100755 qpid/tools/src/py/qpid-printevents (limited to 'qpid/tools/src/py/qpid-printevents') diff --git a/qpid/tools/src/py/qpid-printevents b/qpid/tools/src/py/qpid-printevents new file mode 100755 index 0000000000..0c1b618a1f --- /dev/null +++ b/qpid/tools/src/py/qpid-printevents @@ -0,0 +1,74 @@ +#!/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 optparse +import sys +import socket +from time import time, strftime, gmtime, sleep +from qmf.console import Console, Session + +class EventConsole(Console): + def event(self, broker, event): + print event + + def brokerConnected(self, broker): + print strftime("%c", gmtime(time())), "NOTIC qpid-printevents:brokerConnected broker=%s" % broker.getUrl() + + def brokerDisconnected(self, broker): + print strftime("%c", gmtime(time())), "NOTIC qpid-printevents:brokerDisconnected broker=%s" % broker.getUrl() + + +## +## Main Program +## +def main(): + _usage = "%prog [options] [broker-addr]..." + _description = \ +"""Collect and print events from one or more Qpid message brokers. If no broker-addr is +supplied, %prog will connect to 'localhost:5672'. +broker-addr is of the form: [username/password@] hostname | ip-address [:] +ex: localhost, 10.1.1.7:10000, broker-host:10000, guest/guest@localhost +""" + p = optparse.OptionParser(usage=_usage, description=_description) + + options, arguments = p.parse_args() + if len(arguments) == 0: + arguments.append("localhost") + + console = EventConsole() + session = Session(console, rcvObjects=False, rcvHeartbeats=False, manageConnections=True) + brokers = [] + for host in arguments: + brokers.append(session.addBroker(host)) + + try: + while (True): + sleep(10) + except KeyboardInterrupt: + for broker in brokers: + session.delBroker(broker) + print + sys.exit(0) + +if __name__ == '__main__': + main() + -- cgit v1.2.1 From 1c0490365610ba8db496847589049c83ddbc36e1 Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Mon, 5 Jul 2010 20:12:08 +0000 Subject: Defer delivery of messages in cluster-unsafe context. Messages enqueued in a cluster-safe context are synchronized across the cluster. However some messages are delivered in a cluster-unsafe context, for example raising a link established event occurs the connection thread of the establishing connection. This fix deferrs such messages by multicasting them so they can be re-delived in a cluster safe context. See https://bugzilla.redhat.com/show_bug.cgi?id=611543 git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@960681 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/tools/src/py/qpid-printevents | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'qpid/tools/src/py/qpid-printevents') diff --git a/qpid/tools/src/py/qpid-printevents b/qpid/tools/src/py/qpid-printevents index 0c1b618a1f..ed2155ad22 100755 --- a/qpid/tools/src/py/qpid-printevents +++ b/qpid/tools/src/py/qpid-printevents @@ -29,13 +29,15 @@ from qmf.console import Console, Session class EventConsole(Console): def event(self, broker, event): print event + sys.stdout.flush() def brokerConnected(self, broker): print strftime("%c", gmtime(time())), "NOTIC qpid-printevents:brokerConnected broker=%s" % broker.getUrl() + sys.stdout.flush() def brokerDisconnected(self, broker): print strftime("%c", gmtime(time())), "NOTIC qpid-printevents:brokerDisconnected broker=%s" % broker.getUrl() - + sys.stdout.flush() ## ## Main Program -- cgit v1.2.1 From c74652e82c60030dd9c0ea20999b5e2bba329491 Mon Sep 17 00:00:00 2001 From: Kenneth Anthony Giusti Date: Thu, 19 Aug 2010 22:12:27 +0000 Subject: QPID-2810: clean up the broker thread properly on shutdown. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@987330 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/tools/src/py/qpid-printevents | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'qpid/tools/src/py/qpid-printevents') diff --git a/qpid/tools/src/py/qpid-printevents b/qpid/tools/src/py/qpid-printevents index ed2155ad22..e14d85e12a 100755 --- a/qpid/tools/src/py/qpid-printevents +++ b/qpid/tools/src/py/qpid-printevents @@ -59,18 +59,20 @@ ex: localhost, 10.1.1.7:10000, broker-host:10000, guest/guest@localhost console = EventConsole() session = Session(console, rcvObjects=False, rcvHeartbeats=False, manageConnections=True) brokers = [] - for host in arguments: - brokers.append(session.addBroker(host)) - try: - while (True): - sleep(10) - except KeyboardInterrupt: - for broker in brokers: - session.delBroker(broker) - print - sys.exit(0) - + for host in arguments: + brokers.append(session.addBroker(host)) + try: + while (True): + sleep(10) + except KeyboardInterrupt: + print + sys.exit(0) + finally: + while len(brokers): + b = brokers.pop() + session.delBroker(b) + if __name__ == '__main__': main() -- cgit v1.2.1 From 91badb44d38b456250c0b4acae2d3df5be0161a4 Mon Sep 17 00:00:00 2001 From: Jonathan Robie Date: Fri, 17 Dec 2010 15:29:41 +0000 Subject: Made qpid-xxx management scripts callable as python functions. Examples (from cli_tests.py): def qpid_config_api(self, arg = ""): script = import_script(checkenv("QPID_CONFIG_EXEC")) broker = ["-a", "localhost:"+str(self.broker.port)] return script.main(broker + arg.split()) def qpid_route_api(self, arg = ""): script = import_script(checkenv("QPID_ROUTE_EXEC")) return script.main(arg.split()) Useful primarily for qpid-config, qpid-route, and qpid-cluster. Probably not useful for qpid-stat, qpid-printevents, qpid-queue-stats, which just create screen output. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1050425 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/tools/src/py/qpid-printevents | 53 +++++++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 15 deletions(-) (limited to 'qpid/tools/src/py/qpid-printevents') diff --git a/qpid/tools/src/py/qpid-printevents b/qpid/tools/src/py/qpid-printevents index e14d85e12a..5da74ca9ef 100755 --- a/qpid/tools/src/py/qpid-printevents +++ b/qpid/tools/src/py/qpid-printevents @@ -20,7 +20,8 @@ # import os -import optparse +import optparse +from optparse import IndentedHelpFormatter import sys import socket from time import time, strftime, gmtime, sleep @@ -39,20 +40,43 @@ class EventConsole(Console): print strftime("%c", gmtime(time())), "NOTIC qpid-printevents:brokerDisconnected broker=%s" % broker.getUrl() sys.stdout.flush() -## -## Main Program -## -def main(): - _usage = "%prog [options] [broker-addr]..." - _description = \ -"""Collect and print events from one or more Qpid message brokers. If no broker-addr is -supplied, %prog will connect to 'localhost:5672'. -broker-addr is of the form: [username/password@] hostname | ip-address [:] -ex: localhost, 10.1.1.7:10000, broker-host:10000, guest/guest@localhost +class JHelpFormatter(IndentedHelpFormatter): + """Format usage and description without stripping newlines from usage strings + """ + + def format_usage(self, usage): + return usage + + def format_description(self, description): + if description: + return description + "\n" + else: + return "" + +_usage = "%prog [options] [broker-addr]..." + +_description = \ +""" +Collect and print events from one or more Qpid message brokers. + +If no broker-addr is supplied, %prog connects to 'localhost:5672'. + +[broker-addr] syntax: + + [username/password@] hostname + ip-address [:] + +Examples: + +$ %prog localhost:5672 +$ %prog 10.1.1.7:10000 +$ %prog guest/guest@broker-host:10000 """ - p = optparse.OptionParser(usage=_usage, description=_description) - options, arguments = p.parse_args() +def main(argv=None): + p = optparse.OptionParser(usage=_usage, description=_description, formatter=JHelpFormatter()) + + options, arguments = p.parse_args(args=argv) if len(arguments) == 0: arguments.append("localhost") @@ -74,5 +98,4 @@ ex: localhost, 10.1.1.7:10000, broker-host:10000, guest/guest@localhost session.delBroker(b) if __name__ == '__main__': - main() - + sys.exit(main()) -- cgit v1.2.1 From 4365a8b0b4a55892262896d52676794d13e2e4b3 Mon Sep 17 00:00:00 2001 From: Jonathan Robie Date: Tue, 21 Dec 2010 23:46:42 +0000 Subject: Allow command line utilities to require a given SASL mechanism. Useful if the client's most secure mechanism is suspect, e.g. if Kerberos configuration problems may exist. Also useful in a variety of test scenarios. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1051700 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/tools/src/py/qpid-printevents | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'qpid/tools/src/py/qpid-printevents') diff --git a/qpid/tools/src/py/qpid-printevents b/qpid/tools/src/py/qpid-printevents index 5da74ca9ef..8c9649c4aa 100755 --- a/qpid/tools/src/py/qpid-printevents +++ b/qpid/tools/src/py/qpid-printevents @@ -27,6 +27,7 @@ import socket from time import time, strftime, gmtime, sleep from qmf.console import Console, Session + class EventConsole(Console): def event(self, broker, event): print event @@ -75,17 +76,19 @@ $ %prog guest/guest@broker-host:10000 def main(argv=None): p = optparse.OptionParser(usage=_usage, description=_description, formatter=JHelpFormatter()) + p.add_option("--heartbeats", action="store_true", default=False, help="Use heartbeats.") + p.add_option("--sasl-mechanism", action="store", choices=["EXTERNAL","ANONYMOUS","PLAIN","CRAM-MD5","DIGEST-MD5","GSSAPI"], metavar="", help="SASL mechanism for authentication. SASL automatically picks the most secure available mechanism - use this option to override.") options, arguments = p.parse_args(args=argv) if len(arguments) == 0: arguments.append("localhost") console = EventConsole() - session = Session(console, rcvObjects=False, rcvHeartbeats=False, manageConnections=True) + session = Session(console, rcvObjects=False, rcvHeartbeats=options.heartbeats, manageConnections=True) brokers = [] try: for host in arguments: - brokers.append(session.addBroker(host)) + brokers.append(session.addBroker(host, None, options.sasl_mechanism)) try: while (True): sleep(10) -- cgit v1.2.1 From f9a0fec8230a3b1f48ff57483c3639d937336114 Mon Sep 17 00:00:00 2001 From: Jonathan Robie Date: Wed, 22 Dec 2010 22:22:13 +0000 Subject: Added logging to QMF console connections. Warning if a broker can not be found, error if SASL authentication fails or other connection errors when connecting to an existing broker. Default log level is ERROR. qpid-printevents allows the log level to be set. It also allows the user to specify that a connection is required, in which case it terminates if a connection can not be established. Examples: $ ./qpid-printevents --sasl-mechanism PLAIN nonexistent-broker => Not an error. Waits for the broker to be started. $ ./qpid-printevents --sasl-mechanism PLAIN localhost 2010-12-22 17:07:18,365 ERROR Could not connect to broker localhost:5672 (None, 'No acceptable SASL authentication mechanism available') => Connection error condition in output - SASL authentication failed because user name and password are not supplied. But qpid-printevents keeps running, waiting for you to start the broker. $ ./qpid-printevents --sasl-mechanism PLAIN --log-level critical => Connection error condition in output - SASL authentication failed because user name and password are not supplied. No output in this case, because the log level has been set to critical. $ ./qpid-printevents --sasl-mechanism PLAIN --require-connection localhost 2010-12-22 17:11:03,791 ERROR Could not connect to broker localhost:5672 (None, 'No acceptable SASL authentication mechanism available') Failed: ConnectionFailed - (None, 'No acceptable SASL authentication mechanism available') => Connection error condition. qpid-printevents terminates because --require-connection was specified. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1052086 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/tools/src/py/qpid-printevents | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) (limited to 'qpid/tools/src/py/qpid-printevents') diff --git a/qpid/tools/src/py/qpid-printevents b/qpid/tools/src/py/qpid-printevents index 8c9649c4aa..4a225c69d8 100755 --- a/qpid/tools/src/py/qpid-printevents +++ b/qpid/tools/src/py/qpid-printevents @@ -26,7 +26,7 @@ import sys import socket from time import time, strftime, gmtime, sleep from qmf.console import Console, Session - +import qpid.log class EventConsole(Console): def event(self, broker, event): @@ -75,26 +75,52 @@ $ %prog guest/guest@broker-host:10000 """ def main(argv=None): + p = optparse.OptionParser(usage=_usage, description=_description, formatter=JHelpFormatter()) p.add_option("--heartbeats", action="store_true", default=False, help="Use heartbeats.") p.add_option("--sasl-mechanism", action="store", choices=["EXTERNAL","ANONYMOUS","PLAIN","CRAM-MD5","DIGEST-MD5","GSSAPI"], metavar="", help="SASL mechanism for authentication. SASL automatically picks the most secure available mechanism - use this option to override.") + p.add_option("--require-connection", action="store_true", help="Raise error if connection can not be established. By default, retries connections that could not be established, which allows events to be printed as brokers start and stop.") + p.add_option("--log-level", action="store", choices=["debug", "info", "warn", "error", "critical"], metavar="", help="Logging level for connections") + options, arguments = p.parse_args(args=argv) if len(arguments) == 0: arguments.append("localhost") + LOG_LEVELS = {'debug': qpid.log.DEBUG, + 'info': qpid.log.INFO, + 'warn': qpid.log.WARN, + 'error': qpid.log.ERROR, + 'critical': qpid.log.CRITICAL} + + if options.require_connection: + manageConnections=False + else: + manageConnections=True + + if options.log_level: + qpid.log.getLogger("qpid.qmf").setLevel(LOG_LEVELS[options.log_level]) + else: + qpid.log.getLogger("qpid.qmf").setLevel(qpid.log.ERROR) + console = EventConsole() - session = Session(console, rcvObjects=False, rcvHeartbeats=options.heartbeats, manageConnections=True) + session = Session(console, rcvObjects=False, rcvHeartbeats=options.heartbeats, manageConnections=manageConnections) brokers = [] try: for host in arguments: brokers.append(session.addBroker(host, None, options.sasl_mechanism)) - try: + while (True): sleep(10) - except KeyboardInterrupt: + + except KeyboardInterrupt: print - sys.exit(0) + return 0 + + except Exception, e: + print "Failed: %s - %s" % (e.__class__.__name__, e) + return 1 + finally: while len(brokers): b = brokers.pop() -- cgit v1.2.1 From 5d18e713195c3dcb5e011d7a9b94a7044ce88aff Mon Sep 17 00:00:00 2001 From: Jonathan Robie Date: Wed, 5 Jan 2011 01:46:00 +0000 Subject: Allow any SASL mechanism to be specified in command line options. Previously used a fixed list of SASL mechanisms. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1055267 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/tools/src/py/qpid-printevents | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'qpid/tools/src/py/qpid-printevents') diff --git a/qpid/tools/src/py/qpid-printevents b/qpid/tools/src/py/qpid-printevents index 4a225c69d8..c7f1475ad3 100755 --- a/qpid/tools/src/py/qpid-printevents +++ b/qpid/tools/src/py/qpid-printevents @@ -78,7 +78,7 @@ def main(argv=None): p = optparse.OptionParser(usage=_usage, description=_description, formatter=JHelpFormatter()) p.add_option("--heartbeats", action="store_true", default=False, help="Use heartbeats.") - p.add_option("--sasl-mechanism", action="store", choices=["EXTERNAL","ANONYMOUS","PLAIN","CRAM-MD5","DIGEST-MD5","GSSAPI"], metavar="", help="SASL mechanism for authentication. SASL automatically picks the most secure available mechanism - use this option to override.") + p.add_option("--sasl-mechanism", action="store", type="string", metavar="", help="SASL mechanism for authentication (e.g. EXTERNAL, ANONYMOUS, PLAIN, CRAM-MD, DIGEST-MD5, GSSAPI). SASL automatically picks the most secure available mechanism - use this option to override.") p.add_option("--require-connection", action="store_true", help="Raise error if connection can not be established. By default, retries connections that could not be established, which allows events to be printed as brokers start and stop.") p.add_option("--log-level", action="store", choices=["debug", "info", "warn", "error", "critical"], metavar="", help="Logging level for connections") -- cgit v1.2.1 From 2e7b2c4918b34fff264ca4ffa50299473bc8fc20 Mon Sep 17 00:00:00 2001 From: Jonathan Robie Date: Wed, 5 Jan 2011 21:48:26 +0000 Subject: Undo svn commit r1052086. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1055655 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/tools/src/py/qpid-printevents | 24 ++---------------------- 1 file changed, 2 insertions(+), 22 deletions(-) (limited to 'qpid/tools/src/py/qpid-printevents') diff --git a/qpid/tools/src/py/qpid-printevents b/qpid/tools/src/py/qpid-printevents index c7f1475ad3..260d0df79d 100755 --- a/qpid/tools/src/py/qpid-printevents +++ b/qpid/tools/src/py/qpid-printevents @@ -26,7 +26,7 @@ import sys import socket from time import time, strftime, gmtime, sleep from qmf.console import Console, Session -import qpid.log + class EventConsole(Console): def event(self, broker, event): @@ -75,36 +75,16 @@ $ %prog guest/guest@broker-host:10000 """ def main(argv=None): - p = optparse.OptionParser(usage=_usage, description=_description, formatter=JHelpFormatter()) p.add_option("--heartbeats", action="store_true", default=False, help="Use heartbeats.") p.add_option("--sasl-mechanism", action="store", type="string", metavar="", help="SASL mechanism for authentication (e.g. EXTERNAL, ANONYMOUS, PLAIN, CRAM-MD, DIGEST-MD5, GSSAPI). SASL automatically picks the most secure available mechanism - use this option to override.") - p.add_option("--require-connection", action="store_true", help="Raise error if connection can not be established. By default, retries connections that could not be established, which allows events to be printed as brokers start and stop.") - p.add_option("--log-level", action="store", choices=["debug", "info", "warn", "error", "critical"], metavar="", help="Logging level for connections") - options, arguments = p.parse_args(args=argv) if len(arguments) == 0: arguments.append("localhost") - LOG_LEVELS = {'debug': qpid.log.DEBUG, - 'info': qpid.log.INFO, - 'warn': qpid.log.WARN, - 'error': qpid.log.ERROR, - 'critical': qpid.log.CRITICAL} - - if options.require_connection: - manageConnections=False - else: - manageConnections=True - - if options.log_level: - qpid.log.getLogger("qpid.qmf").setLevel(LOG_LEVELS[options.log_level]) - else: - qpid.log.getLogger("qpid.qmf").setLevel(qpid.log.ERROR) - console = EventConsole() - session = Session(console, rcvObjects=False, rcvHeartbeats=options.heartbeats, manageConnections=manageConnections) + session = Session(console, rcvObjects=False, rcvHeartbeats=options.heartbeats, manageConnections=True) brokers = [] try: for host in arguments: -- cgit v1.2.1 From de0bef9f28c6e6b2238405086e3e0177ed36901a Mon Sep 17 00:00:00 2001 From: Jonathan Robie Date: Mon, 10 Jan 2011 13:48:35 +0000 Subject: Prints connection error information. Previously, connection errors were silently ignored. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1057195 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/tools/src/py/qpid-printevents | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'qpid/tools/src/py/qpid-printevents') diff --git a/qpid/tools/src/py/qpid-printevents b/qpid/tools/src/py/qpid-printevents index 260d0df79d..2be2f0be8b 100755 --- a/qpid/tools/src/py/qpid-printevents +++ b/qpid/tools/src/py/qpid-printevents @@ -37,6 +37,10 @@ class EventConsole(Console): print strftime("%c", gmtime(time())), "NOTIC qpid-printevents:brokerConnected broker=%s" % broker.getUrl() sys.stdout.flush() + def brokerConnectionFailed(self, broker): + print strftime("%c", gmtime(time())), "NOTIC qpid-printevents:brokerConnectionFailed broker=%s %s" % (broker.getUrl(), str(broker.conn_exc)) + sys.stdout.flush() + def brokerDisconnected(self, broker): print strftime("%c", gmtime(time())), "NOTIC qpid-printevents:brokerDisconnected broker=%s" % broker.getUrl() sys.stdout.flush() -- cgit v1.2.1 From d8adc4781166de72d1185acaf88ddd502d160015 Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Tue, 1 Mar 2011 15:58:50 +0000 Subject: NO-JIRA: fix qpid-printevents to work on python 2.4. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1075862 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/tools/src/py/qpid-printevents | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'qpid/tools/src/py/qpid-printevents') diff --git a/qpid/tools/src/py/qpid-printevents b/qpid/tools/src/py/qpid-printevents index 2be2f0be8b..d56d2899b1 100755 --- a/qpid/tools/src/py/qpid-printevents +++ b/qpid/tools/src/py/qpid-printevents @@ -20,7 +20,7 @@ # import os -import optparse +import optparse from optparse import IndentedHelpFormatter import sys import socket @@ -62,11 +62,11 @@ _usage = "%prog [options] [broker-addr]..." _description = \ """ -Collect and print events from one or more Qpid message brokers. +Collect and print events from one or more Qpid message brokers. If no broker-addr is supplied, %prog connects to 'localhost:5672'. -[broker-addr] syntax: +[broker-addr] syntax: [username/password@] hostname ip-address [:] @@ -91,20 +91,20 @@ def main(argv=None): session = Session(console, rcvObjects=False, rcvHeartbeats=options.heartbeats, manageConnections=True) brokers = [] try: - for host in arguments: - brokers.append(session.addBroker(host, None, options.sasl_mechanism)) + try: + for host in arguments: + brokers.append(session.addBroker(host, None, options.sasl_mechanism)) - while (True): - sleep(10) + while (True): + sleep(10) - except KeyboardInterrupt: - print - return 0 - - except Exception, e: - print "Failed: %s - %s" % (e.__class__.__name__, e) - return 1 + except KeyboardInterrupt: + print + return 0 + except Exception, e: + print "Failed: %s - %s" % (e.__class__.__name__, e) + return 1 finally: while len(brokers): b = brokers.pop() -- cgit v1.2.1