Dynamic Sampling Context Continuation / Baggage
This PR adds support for the first part of our Dynamic Sampling product, i.e.
- parsing incoming
W3C Baggageheaders and adding them as aBaggageobject on the transaction - adding this
baggageheader to other outgoing HTTP requests in ournet/httppatch - converting the
sentry-*items in the baggage to a DSC (Dynamic Sampling Context) and attaching them to outgoing envelope headers in thetracefield
closes #1835
Codecov Report
Base: 98.38% // Head: 98.46% // Increases project coverage by +0.08% :tada:
Coverage data is based on head (
a558764) compared to base (d83b29c). Patch coverage: 99.75% of modified lines in pull request are covered.
Additional details and impacted files
@@ Coverage Diff @@
## master #1869 +/- ##
==========================================
+ Coverage 98.38% 98.46% +0.08%
==========================================
Files 148 150 +2
Lines 8893 9240 +347
==========================================
+ Hits 8749 9098 +349
+ Misses 144 142 -2
| Impacted Files | Coverage Δ | |
|---|---|---|
| sentry-ruby/lib/sentry/event.rb | 98.76% <ø> (ø) |
|
| sentry-ruby/lib/sentry/rake.rb | 65.00% <0.00%> (ø) |
|
| ...entry-delayed_job/lib/sentry/delayed_job/plugin.rb | 100.00% <100.00%> (ø) |
|
| sentry-delayed_job/spec/sentry/delayed_job_spec.rb | 100.00% <100.00%> (ø) |
|
| sentry-rails/lib/sentry/rails/action_cable.rb | 100.00% <100.00%> (ø) |
|
| sentry-rails/lib/sentry/rails/active_job.rb | 100.00% <100.00%> (ø) |
|
| ...entry-rails/lib/sentry/rails/capture_exceptions.rb | 100.00% <100.00%> (+3.57%) |
:arrow_up: |
| ...y-rails/lib/sentry/rails/controller_transaction.rb | 100.00% <100.00%> (ø) |
|
| ...entry-rails/spec/sentry/rails/action_cable_spec.rb | 100.00% <100.00%> (ø) |
|
| sentry-rails/spec/sentry/rails/activejob_spec.rb | 99.38% <100.00%> (+<0.01%) |
:arrow_up: |
| ... and 28 more |
Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.
:umbrella: View full report at Codecov.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.
@st0012 for releasing this, we need 2 more PRs, so maybe let's merge them all together. They're independent as features, but should go out together ideally.
- head SDK baggage/DSC creation - https://github.com/getsentry/sentry-ruby/issues/1836
- add
transaction_info.sourceannotations - https://github.com/getsentry/sentry-ruby/issues/1866
I'm making this a draft again so we don't merge it accidentally
@st0012 after some discussion, we decided to remove all third party handling since that was mostly unused logic.
E2E testing documentation
JS as head SDK / continuation
relevant frontend request headers (baggage)
GET /ds/items HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:105.0) Gecko/20100101 Firefox/105.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: http://localhost:3000/ds_js_head
sentry-trace: 9821e65c92894d60ab9b05e69d84e218-994f1602ff45d966-1
baggage: sentry-environment=development,sentry-release=foobar,sentry-public_key=d16ae2d36f9249849c7964e9a3a8a608,sentry-trace_id=9821e65c92894d60ab9b05e69d84e218,sentry-sample_rate=1
Outgoing trace envelope header (dynamic sampling context)
[5] pry(#<Sentry::HTTPTransport>)> envelope.headers[:trace]
=> {"environment"=>"development", "release"=>"foobar", "public_key"=>"d16ae2d36f9249849c7964e9a3a8a608", "trace_id"=>"9821e65c92894d60ab9b05e69d84e218", "sample_rate"=>"1"}
correct source annotation in transaction_info
[8] pry(#<Sentry::HTTPTransport>)> envelope.items.first.payload[:transaction_info]
=> {:source=>:view}
Backend-backend propagation of baggage
Rails as head SDK
meta tags on rails template
<meta name="sentry-trace" content="43906b36c4e84d97b310908dfa323ca0-534d009e7d378188-1">
<meta name="baggage" content="sentry-trace_id=43906b36c4e84d97b310908dfa323ca0,sentry-sample_rate=1.0,sentry-environment=development,sentry-release=test-sessions-2022-09-28+14%3A34%3A02+UTC,sentry-public_key=2fb45f003d054a7ea47feb45898f7649">
outgoing request from browser continues that trace
GET /ds/items HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:105.0) Gecko/20100101 Firefox/105.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: http://localhost:3000/ds_rails_head
sentry-trace: 43906b36c4e84d97b310908dfa323ca0-adc949650e49f6da-1
baggage: sentry-trace_id=43906b36c4e84d97b310908dfa323ca0,sentry-sample_rate=1.0,sentry-environment=development,sentry-release=test-sessions-2022-09-28%2B14%3A34%3A02%2BUTC,sentry-public_key=2fb45f003d054a7ea47feb45898f7649
envelope from browser transaction has correct trace header
"trace":{"trace_id":"43906b36c4e84d97b310908dfa323ca0","sample_rate":"1.0","environment":"development","release":"test-sessions-2022-09-28+14:34:02+UTC","public_key":"2fb45f003d054a7ea47feb45898f7649"}}
final flask request also has correct baggage header
sentry-trace_id=43906b36c4e84d97b310908dfa323ca0,sentry-sample_rate=1.0,sentry-environment=development,sentry-release=test-sessions-2022-09-28%2B14%3A34%3A02%2BUTC,sentry-public_key=2fb45f003d054a7ea47feb45898f7649
ok @st0012 I've tested this E2E properly in all scenarios, everything seems to work 🎉
@sl0thentr0py Should we make this PR ready for review?