- 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
beelineconfiguration parameters forhttp_trace_parse_hookandhttp_trace_propagation_hook - New
propagate_and_start_tracefunction for use by middleware to invoke thehttp_trace_parse_hook - New
beeline.propagationpackage to centralize propagation-related classes and functions. beeline.propagation.honeycombpackage contains hooks to support parsing and propagation using honeycomb headers.beeline.propagation.w3cpackage contains hooks to support parsing and propagation using w3c headers.
- Deprecated the existing
beeline.marshal_trace_context, and migrated all usage to newbeeline.propagation.honeycombfunctions.beeline.marshal_trace_contextwill be removed when the next major version of the beeline is released.
- Implemented
beeline.propagation.Requestclasses for middleware to aid in support of header and propagation hooks. - Migrateed existing middleware to use new
beeline.propagationclasses and functions to supporthttp_trace_parse_hooks. - Centralized duplicated code for WSGI variants (Flask, Bottle, Werkzeug) into a single location.
- Added
http_trace_propagation_hooksupport to requests and urllib.
- Fixed a bug where
urllib.request.urlopenwould 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_asyncon Python versions which don't support async instead of requiring maintenance of an includelist of tests. -
No longer use
pyflaskin tests aspylintcovers 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
traceddecorator behavior when working with generators. #106 - Fixes method for detection of asyncio. #107
Features
Improvements
- flask auto-instrumentation now includes the route as
request.routefield on the root span. #104
Fixes
- Trace context headers injected with the
requestsmiddleware 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
AsyncioTraceris used instead ofSynchronousTracerwhen 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
awslambdamiddleware 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
HoneyMiddlewareno longer adds arequest.postfield 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 outHoneyMiddlewarewithHoneyMiddlewareWithPOSTto maintain the same functionality. - The
awslambdamiddleware no longer crashes if thecontextobject is missing certain attributes. See #76.
Features
- Implements
add_rollup_fieldAPI 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_threaddecorator 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
initnow 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, callinginitbefore fork would render the beeline inoperable in the forked process(es).
Fixes
- Support parameters of type
dictin the flask-sqlachemy middleware. Addresses #62.