Skip to main content

nameko-chassis

docs

Documentation Status

tests

Github Actions Build Status
Coverage Status

package

PyPI Package latest release PyPI Wheel Supported versions Supported implementations
Commits since latest release

nameko-chassis provides an opinionated base class for building resilient, observable microservices with the nameko framework.

nameko-chassis releases and distributed tracing

We’ve changed the approach to distributed tracing over a few releases. Here’s an overview:

  • 0.9.0 supports only nameko 2 and has Zipkin integration

  • 1.0 supports both nameko 2 and 3 RC, while dropping Zipkin. If you need Zipkin support and your service is still on nameko 2, either stay on nameko-chassis 0.9, or upgrade to 1.x and manage nameko-zipkin yourself.

  • 2.0 supports only nameko v3 and provides a predefined OpenTelemetry integration to base Service class. You can still use OpenTelemetry with nameko-chassis 1.0 (provided you’re using nameko 3), but before 2.0 you’ll need to set it up yourself.

Features

By using nameko_chassis.service.Service, you’ll get:

  • error reporting using Sentry

  • integrated metrics endpoint for Prometheus

  • helpers for service discovery

  • partial* support for OpenTelemetry tracing

*You’ll need to call the instrumentors yourself, but we provide basic configuration as a dependency provider.

Installation

pip install nameko-chassis

You can also install the in-development version with:

pip install https://github.com/Emplocity/nameko-chassis/archive/master.zip

Usage

Base service class

from nameko.rpc import rpc
from nameko_chassis.service import Service


class MyService(Service):
    name = "my_service"

    @rpc
    def my_method(self):
        try:
            do_something()
        except Exception:
            self.sentry.captureException()

Distributed tracing

Since nameko-chassis 2.0, we provide an opinionated setup of OpenTelemetry. Your services will export traces over HTTP to an endpoint defined in OTEL_EXPORTER_OTLP_ENDPOINT environment variable. However, you need to call instrumentors yourself, for example:

from nameko_chassis.service import Service
from nameko_opentelemetry import NamekoInstrumentor
from opentelemetry.instrumentation.logging import LoggingInstrumentor

LoggingInstrumentor().instrument()

NamekoInstrumentor().instrument(
    send_headers=True,
    send_request_payloads=True,
    send_response_payloads=True,
    max_truncate_length=1000,
)

class MyService(Service):
    name = "my_service"

Backdoor debugging

nameko-chassis.debug includes helpers for introspecting running services with nameko backdoor feature. For example if your service exposes backdoor on port 12345:

$ rlwrap nc -v localhost 12345
Connection to localhost 12345 port [tcp/*] succeeded!
Python 3.8.8 (default, Mar 23 2021, 11:02:14)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from nameko_chassis.debug import debug_runner
>>> debug_runner(runner)
╭──────────────────────────── sleeping_http_service ───────────────────────────╮
│ 19 entrypoints                                                               │
│ 15 dependencies                                                              │
│ running 1/10 worker threads                                                  │
│ ╭────────────────── Thread #0: SleepingHttpService.sleep ──────────────────╮ │
│ │                                                                          │ │
│ │ Args: ["<Request 'http://127.0.0.1:8000/sleep/500' [GET]>"]              │ │
│ │ Kwargs: {'duration': '500'}                                              │ │
│ │ Context data: {'X-B3-ParentSpanId': '1058ef878ab0fe32'}                  │ │
│ │                                                                          │ │
│ │ Traceback:                                                               │ │
│ │   File                                                                   │ │
│ │ "/home/zbigniewsiciarz/v/sleephttp/lib/python3.8/site-packages/eventlet… │ │
│ │ line 221, in main                                                        │ │
│ │     result = function(*args, **kwargs)                                   │ │
│ │   File                                                                   │ │
│ │ "/home/zbigniewsiciarz/v/sleephttp/lib/python3.8/site-packages/nameko/c… │ │
│ │ line 392, in _run_worker                                                 │ │
│ │     result = method(*worker_ctx.args, **worker_ctx.kwargs)               │ │
│ │   File "./app/service.py", line 73, in sleep                             │ │
│ │     time.sleep(duration)                                                 │ │
│ │   File                                                                   │ │
│ │ "/home/zbigniewsiciarz/v/sleephttp/lib/python3.8/site-packages/eventlet… │ │
│ │ line 36, in sleep                                                        │ │
│ │     hub.switch()                                                         │ │
│ │   File                                                                   │ │
│ │ "/home/zbigniewsiciarz/v/sleephttp/lib/python3.8/site-packages/eventlet… │ │
│ │ line 313, in switch                                                      │ │
│ │     return self.greenlet.switch()                                        │ │
│ │                                                                          │ │
│ ╰──────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────╯

Documentation

https://nameko-chassis.readthedocs.io/

Development

To run the all tests run:

tox

Authors

nameko-chassis is developed and maintained by Emplocity.

License

This work is released under the Apache 2.0 license.

Metadata

Release files for nameko-chassis 3.2.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 nameko-chassis 3.2.0
File Size Uploaded
nameko_chassis-3.2.0.tar.gz 9.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nameko-chassis 3.2.0
File Interpreter ABI Platform
nameko_chassis-3.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 20.5 kB

Release files / nameko_chassis-3.2.0.tar.gz

Download URL nameko_chassis-3.2.0.tar.gz
Size 9.3 kB
Tags Source
SHA-256 checksum
How to use checksums
9938866e4311e33561371f0b7714ed68c7ded733cc01dfe02a8c465a7cd467f9
BLAKE2b-256 checksum
How to use checksums
fcf6e19ba62eec2ec5f2eaf466056f58230a11e119787f25a77e32dcc75027da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.3

Release files / nameko_chassis-3.2.0-py3-none-any.whl

Download URL nameko_chassis-3.2.0-py3-none-any.whl
Size 11.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cb06feb56ec48a59e3fd12ec31f6c00cf795771dc9e97b1e7926abac9773ff7f
BLAKE2b-256 checksum
How to use checksums
2d2806ce5383b051a61074eedd6fb39de35b4190f9edceedfd75df7b336f0581
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.3

Release history Release notifications | RSS feed

This release

3.2.0 This release

2 release files

3.1.0

2 release files

3.0.0

2 release files

2.4.4

2 release files

2.4.3

2 release files

2.4.2

2 release files

2.3.0

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.0.0

2 release files

0.9.0

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.1

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