Skip to main content

OOPS AMQP transport.

Project description

Copyright (c) 2011, Canonical Ltd

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, version 3 only.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. GNU Lesser General Public License version 3 (see the file LICENSE).

The oops_amqp package provides an AMQP OOPS http://pypi.python.org/pypi/oops) publisher, and a small daemon that listens on amqp for OOPS reports and republishes them (into a supplied publisher). The OOPS framework permits falling back to additional publishers if AMQP is down.

Dependencies

Testing Dependencies

Usage

Publishing to AMQP

Where you are creating OOPS reports, configure oops_amqp.Publisher. This takes a connection factory - a simple callable that creates an amqp connection - and the exchange name and routing key to submit to.

>>> factory = partial(amqp.Connection, host="localhost:5672",
...     userid="guest", password="guest", virtual_host="/", insist=False)
>>> publisher = oops_amqp.Publisher(factory, "oopses", "")

Provide the publisher to your OOPS config:

>>> config = oops.Config()
>>> config.publisher = publisher

Any oops published via that config will now be sent via amqp.

OOPS ids are generating by hashing the oops message (without the id field) - this ensures unique ids.

The reason a factory is used is because amqplib is not threadsafe - the publisher maintains a thread locals object to hold the factories and creates connections when new threads are created(when they first generate an OOPS).

Dealing with downtime

>From time to time your AMQP server may be unavailable. If that happens then the Publisher will not assign an oops id - it will return None to signal that the publication failed. To prevent losing the OOPS its a good idea to have a fallback publisher - either another AMQP publisher (to a different server) or one that spools locally (where you can pick up the OOPSes via rsync or some other mechanism. Using the oops standard helper publish_with_fallback will let you wrap the fallback publisher so that it only gets invoked if the primary method failed:

>>> fallback_factory = partial(amqp.Connection, host="otherserver:5672",
...     userid="guest", password="guest", virtual_host="/", insist=False)
>>> fallback_publisher = oops_amqp.Publisher(fallback_factory, "oopses", "")
>>> config.publisher = publish_with_fallback(publisher, fallback_publisher)

Receiving from AMQP

There is a simple method that will run an infinite loop processing reports from AMQP. To use it you need to configure a local config to publish the received reports. A full config is used because that includes support for filtering (which can be useful if you need to throttle volume, for instance). Additionally you need an amqp connection factory (to handle the amqp server being restarted) and a queue name to receive from.

This example uses the DateDirRepo publisher, telling it to accept whatever id was assigned by the process publishing to AMQP:

>>> publisher = oops_datedir_repo.DateDirRepo('.', inherit_id=True)
>>> config = oops.Config()
>>> config.publisher = publisher.publish
>>> receiver = oops_amqp.Receiver(config, factory, "my queue")
>>> receiver.run_forever()

For more information see pydoc oops_amqp.

Installation

Either run setup.py in an environment with all the dependencies available, or add the working directory to your PYTHONPATH.

Development

Upstream development takes place at https://launchpad.net/python-oops-amqp. To setup a working area for development, if the dependencies are not immediately available, you can use ./bootstrap.py to create bin/buildout, then bin/py to get a python interpreter with the dependencies available.

To run the tests use the runner of your choice, the test suite is oops_amqp.tests.test_suite.

For instance:

$ bin/py -m testtools.run oops_amqp.tests.test_suite

If you have testrepository you can run the tests with that:

$ testr run

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

oops_amqp-0.0.8b1.tar.gz (7.5 kB view details)

Uploaded Source

Built Distribution

oops_amqp-0.0.8b1-py2-none-any.whl (33.6 kB view details)

Uploaded Python 2

File details

Details for the file oops_amqp-0.0.8b1.tar.gz.

File metadata

  • Download URL: oops_amqp-0.0.8b1.tar.gz
  • Upload date:
  • Size: 7.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for oops_amqp-0.0.8b1.tar.gz
Algorithm Hash digest
SHA256 d4a040ba63a86ceb2d2fe599deb8c456790425db0f5faac302f8ccefc8f6b0dc
MD5 df440254fcff08c6541e21e21d952176
BLAKE2b-256 1f25ec03432c0ac5d962d10b7ace050d454cbafd8f8bdab53f8c8a79fd510e86

See more details on using hashes here.

File details

Details for the file oops_amqp-0.0.8b1-py2-none-any.whl.

File metadata

File hashes

Hashes for oops_amqp-0.0.8b1-py2-none-any.whl
Algorithm Hash digest
SHA256 523f156136c4ceaa8f701748e39bf28ff539fd985eddc9d83428d003659cab42
MD5 e7bef73ba97fc717c71bd40e9d57b5e1
BLAKE2b-256 001f9b7de73adad2cf9c310ac45c41ae6e98d3b7317a047d24a680510c22d3cd

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page