OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ | 2 # Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ |
3 # | 3 # |
4 # Permission is hereby granted, free of charge, to any person obtaining a | 4 # Permission is hereby granted, free of charge, to any person obtaining a |
5 # copy of this software and associated documentation files (the | 5 # copy of this software and associated documentation files (the |
6 # "Software"), to deal in the Software without restriction, including | 6 # "Software"), to deal in the Software without restriction, including |
7 # without limitation the rights to use, copy, modify, merge, publish, dis- | 7 # without limitation the rights to use, copy, modify, merge, publish, dis- |
8 # tribute, sublicense, and/or sell copies of the Software, and to permit | 8 # tribute, sublicense, and/or sell copies of the Software, and to permit |
9 # persons to whom the Software is furnished to do so, subject to the fol- | 9 # persons to whom the Software is furnished to do so, subject to the fol- |
10 # lowing conditions: | 10 # lowing conditions: |
11 # | 11 # |
12 # The above copyright notice and this permission notice shall be included | 12 # The above copyright notice and this permission notice shall be included |
13 # in all copies or substantial portions of the Software. | 13 # in all copies or substantial portions of the Software. |
14 # | 14 # |
15 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | 15 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
16 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- | 16 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- |
17 # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT | 17 # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT |
18 # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | 18 # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, |
19 # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | 19 # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
20 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS | 20 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
21 # IN THE SOFTWARE. | 21 # IN THE SOFTWARE. |
22 # | 22 # |
23 import getopt, sys | 23 import getopt, sys |
| 24 import boto.sqs |
24 from boto.sqs.connection import SQSConnection | 25 from boto.sqs.connection import SQSConnection |
25 from boto.exception import SQSError | 26 from boto.exception import SQSError |
26 | 27 |
27 def usage(): | 28 def usage(): |
28 print 'cq [-c] [-q queue_name] [-o output_file] [-t timeout]' | 29 print 'cq [-c] [-q queue_name] [-o output_file] [-t timeout] [-r region]' |
29 | 30 |
30 def main(): | 31 def main(): |
31 try: | 32 try: |
32 opts, args = getopt.getopt(sys.argv[1:], 'hcq:o:t:', | 33 opts, args = getopt.getopt(sys.argv[1:], 'hcq:o:t:r:', |
33 ['help', 'clear', 'queue', | 34 ['help', 'clear', 'queue', |
34 'output', 'timeout']) | 35 'output', 'timeout', 'region']) |
35 except: | 36 except: |
36 usage() | 37 usage() |
37 sys.exit(2) | 38 sys.exit(2) |
38 queue_name = '' | 39 queue_name = '' |
39 output_file = '' | 40 output_file = '' |
40 timeout = 30 | 41 timeout = 30 |
| 42 region = '' |
41 clear = False | 43 clear = False |
42 for o, a in opts: | 44 for o, a in opts: |
43 if o in ('-h', '--help'): | 45 if o in ('-h', '--help'): |
44 usage() | 46 usage() |
45 sys.exit() | 47 sys.exit() |
46 if o in ('-q', '--queue'): | 48 if o in ('-q', '--queue'): |
47 queue_name = a | 49 queue_name = a |
48 if o in ('-o', '--output'): | 50 if o in ('-o', '--output'): |
49 output_file = a | 51 output_file = a |
50 if o in ('-c', '--clear'): | 52 if o in ('-c', '--clear'): |
51 clear = True | 53 clear = True |
52 if o in ('-t', '--timeout'): | 54 if o in ('-t', '--timeout'): |
53 timeout = int(a) | 55 timeout = int(a) |
54 c = SQSConnection() | 56 if o in ('-r', '--region'): |
| 57 region = a |
| 58 if region: |
| 59 c = boto.sqs.connect_to_region(region) |
| 60 else: |
| 61 c = SQSConnection() |
55 if queue_name: | 62 if queue_name: |
56 try: | 63 try: |
57 rs = [c.create_queue(queue_name)] | 64 rs = [c.create_queue(queue_name)] |
58 except SQSError, e: | 65 except SQSError, e: |
59 print 'An Error Occurred:' | 66 print 'An Error Occurred:' |
60 print '%s: %s' % (e.status, e.reason) | 67 print '%s: %s' % (e.status, e.reason) |
61 print e.body | 68 print e.body |
62 sys.exit() | 69 sys.exit() |
63 else: | 70 else: |
64 try: | 71 try: |
65 rs = c.get_all_queues() | 72 rs = c.get_all_queues() |
66 except SQSError, e: | 73 except SQSError, e: |
67 print 'An Error Occurred:' | 74 print 'An Error Occurred:' |
68 print '%s: %s' % (e.status, e.reason) | 75 print '%s: %s' % (e.status, e.reason) |
69 print e.body | 76 print e.body |
70 sys.exit() | 77 sys.exit() |
71 for q in rs: | 78 for q in rs: |
72 if clear: | 79 if clear: |
73 n = q.clear() | 80 n = q.clear() |
74 print 'clearing %d messages from %s' % (n, q.id) | 81 print 'clearing %d messages from %s' % (n, q.id) |
75 elif output_file: | 82 elif output_file: |
76 q.dump(output_file) | 83 q.dump(output_file) |
77 else: | 84 else: |
78 print q.id, q.count(vtimeout=timeout) | 85 print q.id, q.count(vtimeout=timeout) |
79 | 86 |
80 if __name__ == "__main__": | 87 if __name__ == "__main__": |
81 main() | 88 main() |
82 | 89 |
OLD | NEW |