Skip to main content
https://travis-ci.org/beezz/ddtrace-graphql.svg?branch=master https://codecov.io/gh/beezz/ddtrace-graphql/branch/master/graph/badge.svg https://pyup.io/repos/github/beezz/ddtrace-graphql/shield.svg https://badge.fury.io/py/ddtrace-graphql.svg

Python library to trace graphql calls with Datadog.

Compatibility

ddtrace-graphql is tested with:

  • Python versions: 3.5, 3.6, nightly

  • graphql-core: 2.0, 1.1.0, latest

  • ddtrace: 0.11.1, 0.10.1, latest

Screenshots for pyramid app serving GraphQL with tracing enabled:

screenshots/service.png

GraphQL service detail.

screenshots/query.png

GraphQL query detail.

Installation

Using pip

$ pip install ddtrace-graphql

From source

$ git clone https://github.com/beezz/ddtrace-graphql.git
$ cd ddtrace-graphql && python setup.py install

Usage

To trace all GraphQL requests patch the library. Put this snippet to your application main entry point.

__import__('ddtrace_graphql').patch()

# OR

from ddtrace_graphql import patch
patch()

Check out the datadog trace client for all supported libraries and frameworks.

# app/__init__.py
__import__('ddtrace_graphql').patch()

# from that point all calls to graphql are traced
from graphql import graphql
result = graphql(schema, query)

Trace only certain calls with traced_graphql function

from ddtrace_graphql import traced_graphql
traced_graphql(schema, query)

Configuration

Environment variables

DDTRACE_GRAPHQL_SERVICE:

Define service name under which traces are shown in Datadog. Default value is graphql

$ export DDTRACE_GRAPHQL_SERVICE=foobar.graphql

span_kwargs

Default arguments passed to the tracing context manager can be updated using span_kwargs argument of ddtrace_graphql.patch or ddtrace_graphql.traced_graphql functions.

Default values:

name:

Wrapped resource name. Default graphql.graphql.

span_type:

Span type. Default graphql.

service:

Service name. Defaults to DDTRACE_GRAPHQL_SERVICE environment variable if present, else graphql.

resource:

Processed resource. Defaults to query / mutation signature.

For more information visit ddtrace.Tracer.trace documentation.

from ddtrace_graphql import patch
patch(span_kwargs=dict(service='foo.graphql'))
from ddtrace_graphql import traced_graphql
traced_graphql(schema, query, span_kwargs=dict(resource='bar.resource'))

span_callback

In case you want to postprocess trace span you may use span_callback argument. span_callback must be function with signature def callback(result=result, span=span) where result is graphql execution result or None in case of fatal error and span is trace span object (ddtrace.span.Span).

What is it good for? Unfortunately one cannot filter/alarm on span metrics resp. meta information even if those are numeric (why Datadog?) so you can use it to send metrics based on span, result attributes.

from datadog import statsd
from ddtrace_graphql import patch, CLIENT_ERROR, INVALID

def callback(result, span):
    tags = ['resource:{}'.format(span.resource.replace(' ', '_'))]
    statsd.increment('{}.request'.format(span.service), tags=tags)
    if span.error:
        statsd.increment('{}.error'.format(span.service), tags=tags)
    elif span.get_metric(CLIENT_ERROR):
        statsd.increment('{}.{}'.format(span.service, CLIENT_ERROR), tags=tags)
    if span.get_metric(INVALID):
        statsd.increment('{}.{}'.format(span.service, INVALID), tags=tags)

patch(span_callback=callback)

ignore_exceptions

Some frameworks use exceptions to handle 404s etc. you may want to ignore some exceptions resp. not consider them server error. To do this you can supply ignore_exceptions argument as list of exception classes to ignore. ignore_exceptions will be used in python’s isinstance thus you can ignore also using base classes.

from ddtrace_graphql import patch
patch(ignore_exceptions=(ObjectNotFound, PermissionsDenied))
from ddtrace_graphql import traced_graphql
traced_graphql(
    schema, query,
    ignore_exceptions=(ObjectNotFound, PermissionsDenied))

Development

Install from source in development mode

$ git clone https://github.com/beezz/ddtrace-graphql.git
$ pip install --editable ddtrace-graphql[test]

Run tests

$ cd ddtrace-graphql
$ tox

Metadata

Release files for ddtrace-graphql 0.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 ddtrace-graphql 0.2.0
File Size Uploaded
ddtrace-graphql-0.2.0.tar.gz 490.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ddtrace-graphql 0.2.0
File Interpreter ABI Platform
ddtrace_graphql-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 498.2 kB

Release files / ddtrace-graphql-0.2.0.tar.gz

Download URL ddtrace-graphql-0.2.0.tar.gz
Size 490.3 kB
Tags Source
SHA-256 checksum
How to use checksums
afa97b9453a3162e2fa1b37dd8b1208c379bb4811162ed322acbb2d74978885f
BLAKE2b-256 checksum
How to use checksums
dc7d906008012217f520700fb9fe60b543d44f5a5c9f2771a5e023f68c841eac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.2

Release files / ddtrace_graphql-0.2.0-py3-none-any.whl

Download URL ddtrace_graphql-0.2.0-py3-none-any.whl
Size 7.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c9520b2b613666d2ef478d3dcd40f6681adc110060fb60cdd988780d6d01d1fd
BLAKE2b-256 checksum
How to use checksums
021d8ae2d30c7dc72602c18f084f4f15bbb60bb269a5c93ef9967c0923066fc9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.2

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.4

2 release files

0.0.3

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