Skip to main content

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 (https://pypi.org/project/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="/")
>>> 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 amqp 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="/")
>>> 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 run the tests, use tox.

Release files for oops-amqp 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for oops-amqp 0.3.0
File Size Uploaded
oops_amqp-0.3.0.tar.gz 16.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for oops-amqp 0.3.0
File Interpreter ABI Platform
oops_amqp-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 31.5 kB

Release files / oops_amqp-0.3.0.tar.gz

Download URL oops_amqp-0.3.0.tar.gz
Size 16.3 kB
Tags Source
SHA-256 checksum
How to use checksums
0dde0d12d84102f8f54b7958628ea0e67f51fef71c8cbcedf7b37c7230fffa1a
BLAKE2b-256 checksum
How to use checksums
e9ce9dee9af14b38bf809786b70e41a19df138c0e0ced19104565a590ce34221
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.3

Release files / oops_amqp-0.3.0-py3-none-any.whl

Download URL oops_amqp-0.3.0-py3-none-any.whl
Size 15.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cb0f8f746053ca2ce000686f64d7bdc6e3db3550086f6e5cd0f6e7215c7a8c35
BLAKE2b-256 checksum
How to use checksums
46bde78dad80723d687945c9df860adf1aabf12b5e0a56e1edf53b5a8caf1b7a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.0

2 release files

0.1.0

1 release file

0.0.7

1 release file

0.0.6

1 release file

0.0.5

1 release file

0.0.4

1 release file

0.0.3

1 release file

0.0.2

1 release file

0.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page