From 2a45d15f72f6c2ec69e721c2bb98ecbe8a7d8e86 Mon Sep 17 00:00:00 2001 From: st0012 Date: Fri, 12 Nov 2021 22:32:58 +0000 Subject: [PATCH 1/2] Add Envelope class --- sentry-ruby/lib/sentry/envelope.rb | 23 ++++++++++++++++ sentry-ruby/lib/sentry/transport.rb | 41 ++++++++++++----------------- 2 files changed, 40 insertions(+), 24 deletions(-) create mode 100644 sentry-ruby/lib/sentry/envelope.rb diff --git a/sentry-ruby/lib/sentry/envelope.rb b/sentry-ruby/lib/sentry/envelope.rb new file mode 100644 index 000000000..f27f3e642 --- /dev/null +++ b/sentry-ruby/lib/sentry/envelope.rb @@ -0,0 +1,23 @@ +module Sentry + class Envelope + def initialize(headers) + @headers = headers + @items = [] + end + + def add_item(headers, payload) + @items << [headers, payload] + end + + def to_s + payload = @items.map do |item_headers, item_payload| + <<~ENVELOPE + #{JSON.generate(item_headers)} + #{JSON.generate(item_payload)} + ENVELOPE + end.join("\n") + + "#{JSON.generate(@headers)}\n#{payload}" + end + end +end diff --git a/sentry-ruby/lib/sentry/transport.rb b/sentry-ruby/lib/sentry/transport.rb index 587acf15a..f191a8085 100644 --- a/sentry-ruby/lib/sentry/transport.rb +++ b/sentry-ruby/lib/sentry/transport.rb @@ -1,5 +1,6 @@ require "json" require "base64" +require "sentry/envelope" module Sentry class Transport @@ -103,31 +104,29 @@ def generate_auth_header def encode(event) # Convert to hash event_payload = event.to_hash - event_id = event_payload[:event_id] || event_payload["event_id"] item_type = get_item_type(event_payload) - envelope_header = { - event_id: event_id, - dsn: @dsn.to_s, - sdk: Sentry.sdk_meta, - sent_at: Sentry.utc_now.iso8601 - } - - event_header = { type: item_type, content_type: 'application/json' } + envelope = Envelope.new( + { + event_id: event_id, + dsn: @dsn.to_s, + sdk: Sentry.sdk_meta, + sent_at: Sentry.utc_now.iso8601 + } + ) - envelope = <<~ENVELOPE - #{JSON.generate(envelope_header)} - #{JSON.generate(event_header)} - #{JSON.generate(event_payload)} - ENVELOPE + envelope.add_item( + { type: item_type, content_type: 'application/json' }, + event_payload + ) - client_report = fetch_pending_client_report - envelope << client_report if client_report + client_report_headers, client_report_payload = fetch_pending_client_report + envelope.add_item(client_report_headers, client_report_payload) if client_report_headers log_info("Sending envelope [#{item_type}] #{event_id} to Sentry") - envelope + envelope.to_s end def record_lost_event(reason, item_type) @@ -159,21 +158,15 @@ def fetch_pending_client_report end item_header = { type: 'client_report' } - item_payload = { timestamp: Sentry.utc_now.iso8601, discarded_events: discarded_events_hash } - client_report_item = <<~CLIENT_REPORT_ITEM - #{JSON.generate(item_header)} - #{JSON.generate(item_payload)} - CLIENT_REPORT_ITEM - @discarded_events = Hash.new(0) @last_client_report_sent = Time.now - client_report_item + [item_header, item_payload] end end end From 3b5fbe984138cd9ca475b1364cf108450c74c184 Mon Sep 17 00:00:00 2001 From: st0012 Date: Wed, 17 Nov 2021 19:15:22 +0000 Subject: [PATCH 2/2] Update changelog --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 91f4c0e10..f046d746f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## 4.8.1 + +### Refactoring + +- Extract envelope construction logic from Transport [#1616](https://github.com/getsentry/sentry-ruby/pull/1616) + ## 4.8.0 ### Features