Skip to content

Releases: DataDog/dd-trace-py

0.10.1

05 Feb 14:17
e1bb09f

Choose a tag to compare

Distributed Tracing
Add distributed tracing using integration settings for the following libraries/frameworks:

Improvements

  • [core] provide constants to pick Priority Sampling values (#391)
  • [django] add support for Django Rest Framework (#389)
  • [tooling] add missing classifiers for pypi (#395 -- thanks @PCManticore)
  • [tornado] patch concurrent.futures if available, improving the way traces are built when propagation happens between threads (#362 -- thanks @codywilbourn)

Bugfixes

  • [httplib] don't overwrite return value (#380 -- thanks @yoichi)
  • [psycopg2] patch all imports of register_type (#393 -- thanks @stj)
  • [pyramid] keep request as part of render kwargs (#384 -- thanks @joual)
  • [pyramid] use pyramid HTTPExceptions as valid response types (#401, #386 -- thanks @TylerLubeck)
  • [requests] add unpatch and double-patch protection (#404)
  • [flask] don't override code of already handled errors (#390, #409)
  • [flask] allow mutability of resource field within request (#353, #410)

Read the full changeset.

0.10.0

08 Nov 17:59
db47635

Choose a tag to compare

Distributed Sampling (beta)

New feature that propagates the sampling priority across services. This is useful to mark traces as "don’t keep the trace" or "must have" when distributed tracing is used. This new functionality requires at least the Datadog Agent 5.19+. Frameworks with out-of-the-box support are: Django, Flask, Tornado (#358, #325, #359, #364, #366, #365, #371, docs)

Improvements

  • [core] update the Context propagation API, that includes a new way to retrieve and set the current active Span context. (#339)
  • [core] implement Propagators API to simplify Distributed Tracing. You can use HTTPPropagator class to inject and extract the tracing context in HTTP headers (#363, #374 docs)
  • [celery] use service name from DATADOG_SERVICE_NAME env var, if defined (#347 -- thanks @miketheman)
  • [django] respect env Agent host and port if defined (#354 -- thanks @spesnova)

Bugfixes

  • [pylons] handle exception with non standard 'code' attribute (#350)
  • [pyramid] the application was not traced when the tween list was explicitly specified (#349)

Read the full changeset

0.9.2

12 Sep 13:24

Choose a tag to compare

New features

  • [django] disable database or cache instrumentation via settings so that each Django component instrumentation can be disabled (#314, docs -- thanks @mcanaves)
  • [django] it's not required anymore to add the Django middleware because the Django app ensures that it is installed. You can safely remove ddtrace.contrib.django.TraceMiddleware for your middleware list after the upgrade. This is not mandatory but suggested (#314, #346)
  • [cassandra] trace execute_async() operations (#333)

Bugfixes

  • [mysql] prevent the Pin from attaching empty tags (#327)
  • [django] fixed the initialization order to prevent logs when the tracer is disabled (#334)
  • [sqlite3] add tests to ensure that services are properly sent (#337)
  • [pyramid] fixed Pyramid crash when 'include()' is used with relative import paths (#342)
  • [pylons] re-raise the exception with the original traceback in case of errors. Before Pylons exceptions were correctly handled but hidden by the tracing middleware. (#317)
  • [pyramid] disable autocommit in Pyramid patching, to avoid altering the Configurator behavior (#343)
  • [flask] fix Flask instrumentation that didn't close Jinja spans if an error was thrown (#344)

Integration coverage

  • officially support ElasticSearch 1.6+ (#341)

Documentation

  • fixed usage examples for patch_all() and patch() (#321 -- thanks @gomlgs)
  • added a section about updating the hostname and port (#335)

Read the full changeset.

0.9.1

01 Aug 11:29

Choose a tag to compare

New features

  • [core] add a processing pipeline to the AsyncWorker, so that traces can be filtered easily. This change doesn't have any performance impact with existing installations, and is expected to work well with async frameworks / libraries (#303, docs)
  • [core] add language and library version metadata to keep track of them in the Datadog Agent. All values are sent via headers (#289)

Bugfixes

  • [aiobotocore] update async with context manager so that it returns the wrapper instead of the wrapped object (#307)
  • [boto, botocore] change the service metadata app for AWS with a more meaningful name (#315)

Documentation

  • improving documentation so that it's more explicit how a framework should be auto-instrumented (#305, #308)
  • add the list of auto-instrumented modules (#306)

Read the full changeset.

0.9.0

05 Jul 12:20

Choose a tag to compare

New features

  • [core] add process ID in root spans metadata (#293)

Improvements

  • [falcon] extended support for Falcon 1.2; improved error handling (#295)
  • [gevent] create a new Context when a Greenlet is created so that the tracing context is automatically propagated with the right parenting (#287)
  • [asyncio] providing helpers and patch() method to automatically propagate the tracing context between different asyncio tasks (#260 #297, docs -- thanks @thehesiod)
  • [aiohttp] add experimental feature to continue a trace from request headers (#259, docs -- thanks @thehesiod)
  • [django] add DEFAULT_DATABASE_PREFIX setting to append a prefix to database service (#291, docs -- thanks @jairhenrique)

Bugfixes

  • [logging] use specific logger instead of the root one in monkey.py module (#281)
  • [django] ddtrace exception middleware catches exceptions even if a custom middleware returns a Response object (#278)
  • [pylons] handle correctly the http status code when it's wrongly formatted (#284)
  • [django] request resource handles the case where the View is a partial function (#292)
  • [flask] attach stack trace to Flask errors (#302)

New integrations

Read the full changeset.

0.8.5

30 May 16:17

Choose a tag to compare

Bugfixes

  • [flask] add the http method to flask spans (#274)
  • [sqlite3] changed the app_type to db (#276)
  • [core] span.set_traceback()now sets the traceback even if there's no exception (#277)

Read the full changeset.

0.8.4

19 May 09:27

Choose a tag to compare

Bugfixes

  • [flask] avoid using weak references when Flask is instrumented via Blinker. This resolves initialization issues when the traced_app = TraceMiddleware(app, ...) reference goes out of the scope or is garbage collected (#273)

0.8.3

15 May 11:17

Choose a tag to compare

Improvements

  • [transport] add presampler header (X-Datadog-Trace-Count) so that the receiving agent has more information when dealing with sampling (#254)
  • [docs] updated our documentation (#264, #271)

Bugfixes

  • [core] patch loader raises PatchException that is handled in the patch_all() when the patch failed. This distinguishes: errors during patch, when an integration is not available and simply when the module is not installed (#262)
  • [mysql] distinguish MySQL-Python instrumentation so that only mysql-connector package is patched; this provides better feedback about what library is supported (#263, #266)
  • [sqlalchemy] provide a patch() method that uses the PIN object; this is not a breaking change, but the preferred way to instrument SQLAlchemy is through patch_all(sqlalchemy=True) or patch(sqlalchemy=True) (#261)
  • [pylons] catch BaseException since a SystemExit might've been raised; 500 errors are handled if a timeout occurs (#267, #270)
  • [pyramid] catch BaseException since a SystemExit might've been raised; 500 errors are handled if a timeout occurs (#269)

Read the full changeset

0.8.2

28 Apr 15:43

Choose a tag to compare

Bugfixes

  • [django] handle tuple INSTALLED_APPS for Django < 1.9 (#253)

Read the full changeset

0.8.1

30 May 16:16

Choose a tag to compare

Bugfixes

  • [core] fixed msgpack-python kwarg usage for versions earlier than 0.4.x (#245)
  • [pyramid] add request method to Pyramid trace span resource name (#249, thanks @johnpkennedy)

Read the full changeset.