~lifeless/python-oops-tools/bug-881400

« back to all changes in this revision

Viewing changes to src/oopstools/scripts/amqp2disk.py

  • Committer: Tarmac
  • Author(s): Robert Collins
  • Date: 2011-10-20 20:25:43 UTC
  • mfrom: (3.1.2 amqp)
  • Revision ID: launchpad@pqm.canonical.com-20111020202543-yovvd35c2s3m8xrb
Update the amqp support to be a little easier to use and more robust.

Show diffs side-by-side

added added

removed removed

Lines of Context:
55
55
        The AMQP environment should be setup in advance with a persistent queue
56
56
        bound to your exchange : using transient queues would allow OOPSes to
57
57
        be lost if the amqp2disk process were to be shutdown for a non-trivial
58
 
        duration. The --bind-to option will cause the queue to be created and
59
 
        bound to the given exchange. This is only needed the first time as it
60
 
        is created persistently.
 
58
        duration. The --bind-to option will cause the queue (and exchange if
 
59
        necessary) to be created and bound together. This is only needed the
 
60
        first time as it is created persistently. Running it when the exchange
 
61
        already exists (to setup a second worker, or because you manually
 
62
        created it with a different setup) is fine. The default setup is a
 
63
        fanout exchange.
61
64
        """)
62
65
    description = "Load OOPS reports into oops-tools from AMQP."
63
66
    parser = optparse.OptionParser(
70
73
    parser.add_option('--queue', help="AMQP queue name.")
71
74
    parser.add_option(
72
75
        '--bind-to', help="AMQP exchange to bind to (only needed once).")
 
76
    parser.add_option("-v", "--verbose", action="store_true",
 
77
        help="Print more information about what is going on.")
73
78
    options, args = parser.parse_args(argv[1:])
74
79
    def needed(optname):
75
80
        if getattr(options, optname, None) is None:
88
93
        try:
89
94
            channel = connection.channel()
90
95
            try:
 
96
                channel.exchange_declare(
 
97
                    options.bind_to, type="fanout", durable=True, auto_delete=False)
91
98
                channel.queue_declare(
92
99
                    options.queue, durable=True, auto_delete=False)
93
100
                channel.queue_bind(options.queue, options.bind_to)
96
103
        finally:
97
104
            connection.close()
98
105
    config = make_amqp_config(options.output)
 
106
    if options.verbose:
 
107
        def print_oops(report):
 
108
            print ("Received %s" % report['id'])
 
109
        config.publishers.append(print_oops)
99
110
    receiver = oops_amqp.Receiver(config, factory, options.queue)
100
111
    try:
101
112
        receiver.run_forever()