Releases: DataDog/dd-trace-py
0.10.1
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.futuresif 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
renderkwargs (#384 -- thanks @joual) - [pyramid] use pyramid
HTTPExceptionsas valid response types (#401, #386 -- thanks @TylerLubeck) - [requests] add
unpatchand double-patch protection (#404) - [flask] don't override code of already handled errors (#390, #409)
- [flask] allow mutability of
resourcefield within request (#353, #410)
Read the full changeset.
0.10.0
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
Spancontext. (#339) - [core] implement Propagators API to simplify Distributed Tracing. You can use
HTTPPropagatorclass to inject and extract the tracing context in HTTP headers (#363, #374 docs) - [celery] use service name from
DATADOG_SERVICE_NAMEenv 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
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.TraceMiddlewarefor 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
Configuratorbehavior (#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()andpatch()(#321 -- thanks @gomlgs) - added a section about updating the hostname and port (#335)
Read the full changeset.
0.9.1
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 withcontext 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
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
Contextwhen 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_PREFIXsetting to append a prefix to database service (#291, docs -- thanks @jairhenrique)
Bugfixes
- [logging] use specific logger instead of the root one in
monkey.pymodule (#281) - [django]
ddtraceexception middleware catches exceptions even if a custom middleware returns aResponseobject (#278) - [pylons] handle correctly the http status code when it's wrongly formatted (#284)
- [django] request resource handles the case where the
Viewis a partial function (#292) - [flask] attach stack trace to Flask errors (#302)
New integrations
- [httplib] add patching for
httplibandhttp.lib(#137 -- thanks @brettlangdon) - [aio-libs] add
aiobotocoresupport (#257, #298, docs -- thanks @thehesiod) - [aio-libs] add
aiopgsupport (#258, docs -- thanks @thehesiod)
Read the full changeset.
0.8.5
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
0.8.3
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
PatchExceptionthat is handled in thepatch_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-Pythoninstrumentation so that onlymysql-connectorpackage 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 throughpatch_all(sqlalchemy=True)orpatch(sqlalchemy=True)(#261) - [pylons] catch
BaseExceptionsince aSystemExitmight've been raised;500errors are handled if a timeout occurs (#267, #270) - [pyramid] catch
BaseExceptionsince aSystemExitmight've been raised;500errors are handled if a timeout occurs (#269)
Read the full changeset
0.8.2
0.8.1
Bugfixes
- [core] fixed
msgpack-pythonkwarg usage for versions earlier than0.4.x(#245) - [pyramid] add request method to Pyramid trace span resource name (#249, thanks @johnpkennedy)
Read the full changeset.