diff --git a/sentry-rails/lib/sentry/rails/breadcrumb/active_support_logger.rb b/sentry-rails/lib/sentry/rails/breadcrumb/active_support_logger.rb index 6ba0f6e28..c3eb90dee 100644 --- a/sentry-rails/lib/sentry/rails/breadcrumb/active_support_logger.rb +++ b/sentry-rails/lib/sentry/rails/breadcrumb/active_support_logger.rb @@ -14,7 +14,10 @@ def add(name, started, _finished, _unique_id, data) def inject @subscriber = ::ActiveSupport::Notifications.subscribe(/.*/) do |name, started, finished, unique_id, data| - add(name, started, finished, unique_id, data) + # we only record events that has a started timestamp + if started.is_a?(Time) + add(name, started, finished, unique_id, data) + end end end diff --git a/sentry-rails/spec/sentry/rails/active_support_breadcrumbs_spec.rb b/sentry-rails/spec/sentry/rails/active_support_breadcrumbs_spec.rb index 7fc80f1c3..947996c0f 100644 --- a/sentry-rails/spec/sentry/rails/active_support_breadcrumbs_spec.rb +++ b/sentry-rails/spec/sentry/rails/active_support_breadcrumbs_spec.rb @@ -17,11 +17,19 @@ Sentry.get_current_scope.clear_breadcrumbs end + let(:transport) do + Sentry.get_current_client.transport + end + + after do + transport.events = [] + end + it "captures correct data" do get "/exception" expect(response.status).to eq(500) - event = Sentry.get_current_client.transport.events.first.to_json_compatible + event = transport.events.first.to_json_compatible breadcrumbs = event.dig("breadcrumbs", "values") expect(breadcrumbs.count).to eq(2) @@ -55,4 +63,12 @@ ) end end + + it "ignores events that doesn't have a started timestamp" do + expect do + ActiveSupport::Notifications.publish "foo", Object.new + end.not_to raise_error + + expect(transport.events).to be_empty + end end