diff --git a/CHANGELOG.md b/CHANGELOG.md index 9bc4c4e1a..93499c03e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - Increase `Envelope::Item::MAX_SERIALIZED_PAYLOAD_SIZE` to 1MB [#2108](https://github.com/getsentry/sentry-ruby/pull/2108) - Fix `db_config` begin `nil` in `ActiveRecordSubscriber` [#2111](https://github.com/getsentry/sentry-ruby/pull/2111) - Fixes [#2109](https://github.com/getsentry/sentry-ruby/issues/2109) +- Always send envelope trace header from dynamic sampling context [#2113](https://github.com/getsentry/sentry-ruby/pull/2113) ## 5.11.0 diff --git a/sentry-ruby/lib/sentry/transport.rb b/sentry-ruby/lib/sentry/transport.rb index e1b020b30..2b786af78 100644 --- a/sentry-ruby/lib/sentry/transport.rb +++ b/sentry-ruby/lib/sentry/transport.rb @@ -144,7 +144,7 @@ def envelope_from_event(event) sent_at: Sentry.utc_now.iso8601 } - if event.is_a?(TransactionEvent) && event.dynamic_sampling_context + if event.is_a?(Event) && event.dynamic_sampling_context envelope_headers[:trace] = event.dynamic_sampling_context end diff --git a/sentry-ruby/spec/sentry/transport_spec.rb b/sentry-ruby/spec/sentry/transport_spec.rb index cb0f58dae..7a44cbc89 100644 --- a/sentry-ruby/spec/sentry/transport_spec.rb +++ b/sentry-ruby/spec/sentry/transport_spec.rb @@ -16,23 +16,40 @@ Sentry::Hub.new(client, Sentry::Scope.new) end + let(:dynamic_sampling_context) do + { + "sample_rate" => "0.01337", + "public_key" => "49d0f7386ad645858ae85020e393bef3", + "trace_id" => "771a43a4192642f0b136d5159a501700", + "user_id" => "Amélie" + } + end + subject { client.transport } describe "#serialize_envelope" do context "normal event" do - let(:event) { client.event_from_exception(ZeroDivisionError.new("divided by 0")) } + let(:event) do + event = client.event_from_exception(ZeroDivisionError.new("divided by 0")) + event.dynamic_sampling_context = dynamic_sampling_context + event + end + let(:envelope) { subject.envelope_from_event(event) } it "generates correct envelope content" do result, _ = subject.serialize_envelope(envelope) envelope_header, item_header, item = result.split("\n") + envelope_header_parsed = JSON.parse(envelope_header) - expect(envelope_header).to eq( - <<~ENVELOPE_HEADER.chomp - {"event_id":"#{event.event_id}","dsn":"#{Sentry::TestHelper::DUMMY_DSN}","sdk":#{Sentry.sdk_meta.to_json},"sent_at":"#{Time.now.utc.iso8601}"} - ENVELOPE_HEADER - ) + expect(envelope_header_parsed).to eq({ + "event_id" => event.event_id, + "dsn" => Sentry::TestHelper::DUMMY_DSN, + "sdk" => Sentry.sdk_meta, + "sent_at" => Time.now.utc.iso8601, + "trace" => dynamic_sampling_context + }) expect(item_header).to eq( '{"type":"event","content_type":"application/json"}' @@ -47,15 +64,6 @@ Sentry::Transaction.new(name: "test transaction", op: "rack.request", hub: hub) end - let(:dynamic_sampling_context) do - { - "sample_rate" => "0.01337", - "public_key" => "49d0f7386ad645858ae85020e393bef3", - "trace_id" => "771a43a4192642f0b136d5159a501700", - "user_id" => "Amélie" - } - end - let(:event) do event = client.event_from_transaction(transaction) event.dynamic_sampling_context = dynamic_sampling_context