Skip to main content

Nameko dependency provider that dispatches log data using Events (Pub-Sub).

https://img.shields.io/pypi/v/nameko-eventlog-dispatcher.svg https://img.shields.io/pypi/pyversions/nameko-eventlog-dispatcher.svg https://img.shields.io/pypi/format/nameko-eventlog-dispatcher.svg https://travis-ci.org/sohonetlabs/nameko-eventlog-dispatcher.png?branch=master

Usage

Dispatching event log data

Include the EventLogDispatcher dependency in your service class:

from nameko.rpc import rpc
from nameko_eventlog_dispatcher import EventLogDispatcher


class FooService:

    name = 'foo'

    eventlog_dispatcher = EventLogDispatcher()

    @rpc
    def foo_method(self):
        self.eventlog_dispatcher(
          'foo_event_type', {'value': 1}, metadata={'meta': 2}
        )

Calling foo_method will dispatch an event from the foo service with log_event as the event type. However foo_event_type will be the event type stored as part of the event metadata.

event_type, event_data (optional) and metadata (optional) can be provided as arguments. Both event_data and metadata must be dictionaries and contain JSON serializable data.

Then, any Nameko service will be able to handle this event.

from nameko.events import event_handler


class BarService:

    name = 'bar'

    @event_handler('foo', 'log_event')
    def foo_log_event_handler(self, body):
        """`body` will contain the event log data."""

Capturing log data when entrypoints are fired

Enable auto capture event logs in your Nameko configuration file:

# config.yaml

EVENTLOG_DISPATCHER:
  auto_capture: true
  entrypoints_to_exclude: []
  event_type: log_event

All the attributes above are optional and only used to override their default values.

With auto_capture set to true, a Nameko event will be dispatched every time an entrypoint is fired:

  • They can also be handled by listening log_event events from the service dispatching them.

  • entrypoint_fired will be the event type stored as part of the event metadata.

  • Only entrypoints listed in the ENTRYPOINT_TYPES_TO_LOG class attribute will be logged.

  • entrypoints_to_exclude can be used to provide a list of entrypoint method names to exclude when firing events automatically.

event_type can be added to the config to override the default Nameko event type used to dispatch this kind of events.

Format of the event log data

This is the format of the event log data:

{
  "service_name": "foo",
  "entrypoint_protocol": "Rpc",
  "entrypoint_name": "foo_method",
  "call_id": "foo.foo_method.d7e907ee-9425-48a6-84e6-89db19e3ce50",
  "call_stack": [
    "standalone_rpc_proxy.call.3f349ea4-ed3e-4a3b-93d0-a36fbf928ecb",
    "bla.bla_method.21d623b4-edc4-4232-9957-4fad72533b75",
    "foo.foo_method.d7e907ee-9425-48a6-84e6-89db19e3ce50"
  ],

  "event_type": "foo_event_type",  # "entrypoint_fired", ...
  "timestamp": "2017-06-12T13:48:16+00:00",

  "meta": 2,  # extra information provided as "metadata"
  "data": {"value": 1}  # extra information provided as "event_data"
}

The data attribute will contain the event data that was provided as an argument for the event_data parameter when dispatching the event.

If metadata was provided, then its elements will be included as top level attributes in the event log data.

Tests

It is assumed that RabbitMQ is up and running on the default URI guest:guest@localhost and uses the default ports. There is a Makefile target to run a RabbitMQ docker containers locally using the default ports and configuration:

$ make docker-rabbitmq-run

To run the tests locally:

$ # Create/activate a virtual environment
$ pip install tox
$ tox

There are other Makefile targets to run the tests, but extra dependencies will have to be installed:

$ pip install -U --editable ".[dev]"
$ make test
$ make coverage

A different RabbitMQ URI can be provided overriding the following environment variables: RABBIT_CTL_URI and AMQP_URI.

Additional pytest parameters can be also provided using the ARGS variable:

$ make test RABBIT_CTL_URI=http://guest:guest@dockermachine:15673 AMQP_URI=amqp://guest:guest@dockermachine:5673 ARGS='-x -vv --disable-pytest-warnings'
$ make coverage RABBIT_CTL_URI=http://guest:guest@dockermachine:15673 AMQP_URI=amqp://guest:guest@dockermachine:5673 ARGS='-x -vv --disable-pytest-warnings'

Nameko support

The following Nameko versions are supported:

  • 2.x series: 2.12, 2.13, 2.14

Changelog

Consult the CHANGELOG document for fixes and enhancements of each version.

License

The MIT License. See LICENSE for details.

Metadata

Release files for nameko-eventlog-dispatcher 0.4.2

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

Source distribution (sdist)

Source distribution for nameko-eventlog-dispatcher 0.4.2
File Size Uploaded
nameko-eventlog-dispatcher-0.4.2.tar.gz 6.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nameko-eventlog-dispatcher 0.4.2
File Interpreter ABI Platform
nameko_eventlog_dispatcher-0.4.2-py3-none-any.whl Python 3 none any Details

Total release size: 12.8 kB

Release files / nameko-eventlog-dispatcher-0.4.2.tar.gz

Download URL nameko-eventlog-dispatcher-0.4.2.tar.gz
Size 6.5 kB
Tags Source
SHA-256 checksum
How to use checksums
7c1c642e138b50def3d071f6800aeb894ce249129755e397932ef0e13266f184
BLAKE2b-256 checksum
How to use checksums
c77e3aed7d17fee0b2447710b8c56dcb6584dafe1907a750484a042e1fdcc76b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.14

Release files / nameko_eventlog_dispatcher-0.4.2-py3-none-any.whl

Download URL nameko_eventlog_dispatcher-0.4.2-py3-none-any.whl
Size 6.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d33bb46ed2c9260354a01a4c0d0945568cdab4f75a68366ed961b32a806fa78f
BLAKE2b-256 checksum
How to use checksums
c52bb7fc13c5e3dd0ca092a124c538b6e46b6255ef74ca468247ee18840472d4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.14

Release history Release notifications | RSS feed

This release

0.4.2 This release

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

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