- feat: add Classic Ingest Key support (#295) | @jharley
- maint: add labels to release.yml for auto-generated grouping (#296) | @JamieDanielson
- maint: Update poetry publish to use API token (#294) | @MikeGoldsmith
- maint: update codeowners to pipeline-team (#293) | @JamieDanielson
- maint: update codeowners to pipeline (#292) | @JamieDanielson
- ci: move nightly to weekly (#287) | @vreynolds
- maint(deps-dev): bump django from 3.2.19 to 3.2.20 (#286) | @dependabot
- maint(deps-dev): bump coverage from 7.2.5 to 7.2.7 (#284) | @dependabot
- docs: update readme (#285) | @vreynolds
- fix: fix error when cursor.lastrowid doesnt exist (#281) | @JamieDanielson
- maint(deps): bump wrapt from 1.14.1 to 1.15.0 (#264)
- maint: Bump requests from 2.28.1 to 2.31.0 in /examples/flask (#279)
- maint(deps): bump requests from 2.28.1 to 2.31.0 (#280)
- maint(deps-dev): bump mock from 5.0.1 to 5.0.2 (#275)
- maint(deps-dev): bump coverage from 7.2.3 to 7.2.5 (#273)
- maint(deps-dev): bump django from 3.2.18 to 3.2.19 (#277)
- maint(deps-dev): bump flask from 2.2.3 to 2.2.5 (#276)
- maint(deps): bump sqlparse from 0.4.2 to 0.4.4 (#272)
- maint(deps-dev): bump coverage from 7.0.5 to 7.2.3 (#269)
- maint(deps-dev): bump flask from 2.2.2 to 2.2.3 (#266)
- maint(deps-dev): bump mock from 5.0.0 to 5.0.1 (#260)
- maint(deps-dev): bump django from 3.2.17 to 3.2.18 (#262)
- maint(deps): bump werkzeug from 2.2.2 to 2.2.3 (#263)
- maint(deps-dev): bump django from 3.2.16 to 3.2.17 (#261)
- Only try to calculate query duration when we have start time (#255) | @MikeGoldsmith
- Parse version number for beeline-python/{VERSION} addition (#257) | @emilyashley
-
Give dependabot PRs better title (#250) | @vreynolds
-
Update validate PR title workflow (#245) | @pkanal
-
Validate PR title (#244) | @pkanal
-
Add release file (#240) | @vreynolds
-
Add new project workflow (#239) | @vreynolds
-
Fix ci build (#249) | @vreynolds
-
Delete workflows for old board (#241) | @vreynolds
-
Update releasing notes (#236) | @emilyashley
-
Bump pycodestyle from 2.9.1 to 2.10.0 (#246)
-
bump coverage from 6.5.0 to 7.0.5 (#256)
-
bump mock from 4.0.3 to 5.0.0 (#254)
-
bump setuptools from 65.4.1 to 65.5.1 (#252)
-
Bump certifi from 2022.6.15 to 2022.12.7 in /examples/flask (#247)
-
Bump certifi from 2022.6.15.1 to 2022.12.7 (#248)
-
Bump django from 3.2.15 to 3.2.16 (#242)
-
Bump flask from 2.1.0 to 2.2.2 (#238)
-
Bump coverage from 6.4.4 to 6.5.0 (#237)
- Drop Python 3.5, 3.6 Support (#233) | @emilyashley
- Bump minimum libhoney version to 2.3 (for python >=3.7)(#234) | @emilyashley
- Django < 2.2 does not have request.headers (#231) | @vreynolds
- drop unnecessary backwards compatibility (remove six) (#228) | @robbkidd
- Bump minimum libhoney from 1.7.0 to 2.1.1 (#226) | @danvendia
- Bump wrapt from 1.14.0 to 1.14.1 (#224) | dependabot
- Add meta.span_type to root/subroot spans (#219) | @MikeGoldsmith
- docs: using FileTransmission with classic requires 32 character key (#220) | @JamieDanielson
- Bump django from 2.2.27 to 2.2.28 (#217)
- Bump libhoney from 2.0.0 to 2.1.0 (#221)
- Bump libhoney from 1.11.2 to 2.0.0 (#209)
- Bump wrapt from 1.13.3 to 1.14.0 (#215)
- Bump django from 2.2.26 to 2.2.27 (#210)
NOTE If you are using the FileTransmission method and setting a false API key - and still working in Classic mode - you must update the key to be 32 characters in length to keep the same behavior.
- feat: Add Environment & Services support (#213) | @JamieDanielson
- add rollup SQL duration time to Django traces (#207) | @jmhodges-color
- add a count of SQL queries to root span in django (#205) | @jmhodges
Minimum supported Python version is now 3.5
- drop python < 3.5 support, update vulnerable deps (#202) | | @vreynolds
- gh: add re-triage workflow (#201) | | @vreynolds
- accept both w3c and honeycomb propagation headers by default (#199) | @vreynolds
- Remove condition on status code (#191) | @JamieDanielson
- Close trace regardless of exception (#190) | @vreynolds
- Update dependabot to monthly (#194) | @vreynolds
- Add python 3.9 and 3.10 to test matrix (#192) | @vreynolds
- Add example app using Flask (#189) | @JamieDanielson
- Empower apply-labels action to apply labels (#187) | robbkidd
- Always return True for sampling when sample rate is 1 (#185) | @MikeGoldsmith
- Change maintenance badge to maintained (#182) | @JamieDanielson
- Add Stalebot (#183) | @JamieDanielson
- Fix stringifying tuple parameters in flask DB middleware (#177) @anselm-helbig & @mnemonikk
- Added support for Django streaming responses (#166)
- Avoid using deprecated Django request.is_ajax() (#160)
- Capture exception details in AWS Lambda middleware (#154)
- Default w3c sampled flag to 01 (#152)
- Fix missing content_type, content_length, and status_code in spans from error responses (#145) @vbarua
- Add app.exception_stacktrace to context when an exception is thrown (#135)
### Fixes:
- Fix requests patch to correctly build span name (#142)
- Fix deprecations related to unittest usage (#141)
- Update Lambda wrapper to allow omission of input/output fields #130 (thank you, @fitzoh!)
- Add "request.route" field for Django middleware (thank you, @sjoerdjob!)
Improvements:
- Adds support for dataset when parsing honeycomb propagation headers #133
This is a maintenace release to fix a bug in the django middleware that can happen in testing environments when a beeling has not been initialised.
- Don't attempt to use a non-initialised beeline instance in django middleware #126.
- Adds a .editorconfig to help apply consistent styling across IDEs #127.
We have added new functionality for http_trace_parse_hook
and http_trace_propagation_hook
. These hooks allow beeline users
to parse incoming headers, as well as add outgoing headers, allowing for interoperability between Honeycomb,
OpenTelemetry (W3C) and other tracing formats.
- New
beeline
configuration parameters forhttp_trace_parse_hook
andhttp_trace_propagation_hook
- New
propagate_and_start_trace
function for use by middleware to invoke thehttp_trace_parse_hook
- New
beeline.propagation
package to centralize propagation-related classes and functions. beeline.propagation.honeycomb
package contains hooks to support parsing and propagation using honeycomb headers.beeline.propagation.w3c
package contains hooks to support parsing and propagation using w3c headers.
- Deprecated the existing
beeline.marshal_trace_context
, and migrated all usage to newbeeline.propagation.honeycomb
functions.beeline.marshal_trace_context
will be removed when the next major version of the beeline is released.
- Implemented
beeline.propagation.Request
classes for middleware to aid in support of header and propagation hooks. - Migrateed existing middleware to use new
beeline.propagation
classes and functions to supporthttp_trace_parse_hooks
. - Centralized duplicated code for WSGI variants (Flask, Bottle, Werkzeug) into a single location.
- Added
http_trace_propagation_hook
support to requests and urllib.
- Fixed a bug where
urllib.request.urlopen
would fail if given a string URL as an argument.
Improvements
-
Trace IDs and Span IDs now correspond to W3C trace context specification. See https://www.w3.org/TR/trace-context/
-
Now using poetry for packaging and dependency management.
-
Tests now exclude
test_async
on Python versions which don't support async instead of requiring maintenance of an includelist of tests. -
No longer use
pyflask
in tests aspylint
covers all issues checked bypyflask
-
Misc
- Files have been reformatted to pass pycodestyle (PEP8)
- Now enforce passing pycodestyle in CI.
- Now do CI testing against Python 3.8.
Fixes
- Fixes
traced
decorator behavior when working with generators. #106 - Fixes method for detection of asyncio. #107
Features
Improvements
- flask auto-instrumentation now includes the route as
request.route
field on the root span. #104
Fixes
- Trace context headers injected with the
requests
middleware now reference the correct parent span. Previously, the trace context was generated prior to the wrapping span around the request call, anchoring spans generated with this trace context to the wrong span.
Fixes
- Prevent duplicate
app.
prefixes in trace fields. #96
Fixes
- Allows less than three fields in trace context headers.
Fixes
- Flask Middleware: AttributeError in DB instrumentation when cursor.lastrowid doesn't exist #91.
Features
- Asyncio support! The new
AsyncioTracer
is used instead ofSynchronousTracer
when the beeline is initialized from within an asyncio event loop. #87
- Traces propagated from other beelines (nodejs, go) which supply the "dataset" field in the trace context can now be handled by
unmarshal_trace_context
. The dataset is discarded - honoring this override will come in a later version.
Features
awslambda
middleware can now extract Honeycomb Trace context from single SNS/SQS messages. #77
Fixes
- Don't try to access self.state.span in handle_error of Flask DB middleware if there is no current_app #81.
Improvements
- Django middleware now supports instrumentation of multiple database connections. See #80.
Features
- Django, Flask, Bottle, and Werkzeug middleware can now be subclassed to provide alternative implementations of
get_context_from_request
(Django)get_context_from_environ
(Flask, Bottle, Werkzeug) methods. This allows customization of the request fields that are automatically instrumented at the start of a trace. Thanks to sjoerdjob's initial contribution in #73.
Fixes
- Django's
HoneyMiddleware
no longer adds arequest.post
field by default. This was removed for two reasons. First, callingrequest.POST.dict()
could break other middleware by exhausting the request stream prematurely. See issue #74. Second, POST bodies can contain arbitrary values and potentially sensitive data, and the decision to instrument these values should be a deliberate choice by the user. If you currently rely on this behavior currently, you can swap outHoneyMiddleware
withHoneyMiddlewareWithPOST
to maintain the same functionality. - The
awslambda
middleware no longer crashes if thecontext
object is missing certain attributes. See #76.
Features
- Implements
add_rollup_field
API used in other Beelines. See the official API reference docs for full details.
Fixes
- Python Beeline now uses the same method to compute deterministic sampling decisions as other beelines (Go, NodeJS, Ruby). Prior to the fix, Beeline-generated traces spanning multiple services implemented in Python and other languages would have sometimes arrived incomplete due to inconsistent sampling behavior.
Features
- Adds new
traced_thread
decorator to copy over trace state to new threads. Read more in the official docs here. - Adds initial support for Werkzeug. Read about how to use it here.
Fixes
init
now works after a process fork. If the beeline has already been initialized prior to the fork, it will be reinitialized if called again. Prior to this change, callinginit
before fork would render the beeline inoperable in the forked process(es).
Fixes
- Support parameters of type
dict
in the flask-sqlachemy middleware. Addresses #62.