Skip to main content

OOPS AMQP transport.

Project description

**************************************************
python-oops-amqp: Transmit error reports over amqp
**************************************************

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
============

* Python 2.6+

* bson

* oops (https://pypi.org/project/oops) 0.0.11 or newer.

* amqp

Testing Dependencies
====================

* pytest (https://pypi.org/project/pytest)

* rabbitfixture (https://pypi.org/project/rabbitfixture)

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``.

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.2.0.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

oops_amqp-0.2.0-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

File details

Details for the file oops_amqp-0.2.0.tar.gz.

File metadata

  • Download URL: oops_amqp-0.2.0.tar.gz
  • Upload date:
  • Size: 11.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.6

File hashes

Hashes for oops_amqp-0.2.0.tar.gz
Algorithm Hash digest
SHA256 02ca48553db24260d1beda1f6b77334c4752db1e76b0c2b061358798edb5ef38
MD5 28c749c6d0dd786b5e67f2b82b24540d
BLAKE2b-256 093f83ad0396dc87ac339f96e5ee91be206bd4873d2699f3ce8214a5550bc66d

See more details on using hashes here.

File details

Details for the file oops_amqp-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: oops_amqp-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 15.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.6

File hashes

Hashes for oops_amqp-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7cf7ce1aed2df246dca66d338efe59abc6b0b3d737c0503642b5ffe4d3b8f720
MD5 ab85d0a3ff86dadce3205372bbe00d95
BLAKE2b-256 7bb9071c1952b056bb3e5b79425481bb9ba4ba10805c85b8df96b7640e283d6d

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