Unofficial ddtrace integration for ASGI apps and frameworks
Project description
ddtrace-asgi
Unofficial ddtrace
integration for ASGI apps and frameworks.
Should work seamlessly for any ASGI web framework, e.g. Starlette, FastAPI, Quart, etc.
Note: This project is in alpha stage.
Requirements
- Python 3.6+.
ddtrace
must be installed to use theddtrace-run
command.- The Datadog Agent must be installed and running for traces to be effectively sent to Datadog APM.
Installation
pip install ddtrace-asgi
Quickstart
To automatically send traces to Datadog APM on each HTTP request, wrap your ASGI application around TraceMiddleware
:
# app.py
from ddtrace_asgi.middleware import TraceMiddleware
async def app(scope, receive, send):
assert scope["type"] == "http"
headers = [[b"content-type", b"text/plain"]]
await send({"type": "http.response.start", "status": 200, "headers": headers})
await send({"type": "http.response.body", "body": b"Hello, world!"})
app = TraceMiddleware(
app, service="asgi-hello-world", tags={"env": "local"},
)
Then use ddtrace-run
when serving your application. For example, if serving with Uvicorn:
ddtrace-run uvicorn app:app
For more information on using ddtrace
, please see the official dd-trace-py
repository.
Examples
Starlette
from ddtrace_asgi.middleware import TraceMiddleware
from starlette.applications import Starlette
app = Starlette()
app.add_middleware(TraceMiddleware, service="my-starlette-app")
FastAPI
from ddtrace_asgi.middleware import TraceMiddleware
from fastapi import FastAPI
app = FastAPI()
app.add_middleware(TraceMiddleware, service="my-fastapi-app")
API Reference
TracingMiddleware
class TracingMiddleware:
def __init__(self, app, tracer=None, service="asgi", tags=None, distributed_tracing=True):
...
An ASGI middleware that sends traces of HTTP requests to Datadog APM.
Parameters
- app - An [ASGI] application.
- tracer - (optional) A
Tracer
object. Defaults to the globalddtrace.tracer
object. - service - (optional) Name of the service as it will appear on Datadog.
- tags - (optional) Default tags attached to all request spans. Either a dictionary, or a string of comma-separated tags (e.g.
"env:staging, app:shop"
). See also Tagging. - distributed_tracing - (optional) Whether to enable distributed tracing.
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
0.3.0 - 2019-11-15
Added
- Allow to set default tags on all request spans. (Pull #24)
0.2.2 - 2019-11-03
Added
- Now ships with binary distribution (wheel) in addition to source distribution (sdist). (Pull #16)
0.2.1 - 2019-10-31
Fixed
- Improve resilience to ASGI protocol violations. (Pull #11)
0.2.0 - 2019-10-30
Changed
- The
tracer
,service
anddistributed_tracing
parameters ofTraceMiddleware
are now keyword-only. (Pull #10)
Added
- The
tracer
forTraceMiddleware
is now the globalddtrace.tracer
by default. (Pull #10)
0.1.0 - 2019-10-23
Initial release.
Added
- Add
TracingMiddleware
.
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
Built Distribution
File details
Details for the file ddtrace-asgi-0.3.0.tar.gz
.
File metadata
- Download URL: ddtrace-asgi-0.3.0.tar.gz
- Upload date:
- Size: 7.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.37.0 CPython/3.8.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 424f3847eb4ad57897ad2c92c737365d0c5157bb9b6f21fafc74f975c235ff21 |
|
MD5 | b982059b4d1b98b31437cbf57c615bd7 |
|
BLAKE2b-256 | ffc1646ebf480dc528000cf432d4f3598eb07503684cc495eddce16b755b9223 |
File details
Details for the file ddtrace_asgi-0.3.0-py3-none-any.whl
.
File metadata
- Download URL: ddtrace_asgi-0.3.0-py3-none-any.whl
- Upload date:
- Size: 6.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.37.0 CPython/3.8.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1628c8e3bcdbfba2cbfb879c2eae7710b147a22c913f9c7f7e634b7ae0aba71a |
|
MD5 | 0974f54cfc133191638e12213f0e3071 |
|
BLAKE2b-256 | 793903f23cf30c24ed410f3d6e746b5b5800fb2d0948aaaf2e5d0690993a7eba |