From d3f9d2712de683067df5ec033a4efd60860c06ca Mon Sep 17 00:00:00 2001 From: Tom de Bruijn Date: Wed, 19 Mar 2025 13:06:45 +0100 Subject: [PATCH] Debug Rack event finish issue Add a title to the rack `process_request.rack` event so it becomes easier to debug which event fails to close. That way I can continue debugging and see in which callback the problem originates. Useful agent PR to go along with this: https://github.com/appsignal/appsignal-agent/pull/1268 --- .../differentiate-between-process_request-rack-events.md | 6 ++++++ lib/appsignal/rack/event_handler.rb | 4 ++-- spec/lib/appsignal/rack/event_handler_spec.rb | 9 ++++++++- 3 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 .changesets/differentiate-between-process_request-rack-events.md diff --git a/.changesets/differentiate-between-process_request-rack-events.md b/.changesets/differentiate-between-process_request-rack-events.md new file mode 100644 index 000000000..7a01c9e22 --- /dev/null +++ b/.changesets/differentiate-between-process_request-rack-events.md @@ -0,0 +1,6 @@ +--- +bump: patch +type: change +--- + +Differentiate between `process_request.rack` events. Add the callback that triggered the event in the event title for debugging purposes. diff --git a/lib/appsignal/rack/event_handler.rb b/lib/appsignal/rack/event_handler.rb index b2f22feef..f0f1f2daa 100644 --- a/lib/appsignal/rack/event_handler.rb +++ b/lib/appsignal/rack/event_handler.rb @@ -68,7 +68,7 @@ def on_start(request, _response) Appsignal::Rack::EventHandler .safe_execution("Appsignal::Rack::EventHandler's after_reply") do - transaction.finish_event("process_request.rack", "", "") + transaction.finish_event("process_request.rack", "callback: after_reply", "") queue_start = Appsignal::Rack::Utils.queue_start_from(request.env) transaction.set_queue_start(queue_start) if queue_start end @@ -111,7 +111,7 @@ def on_finish(request, response) return unless transaction self.class.safe_execution("Appsignal::Rack::EventHandler#on_finish") do - transaction.finish_event("process_request.rack", "", "") + transaction.finish_event("process_request.rack", "callback: on_finish", "") transaction.add_params_if_nil { request.params } transaction.add_headers_if_nil { request.env } transaction.add_session_data_if_nil do diff --git a/spec/lib/appsignal/rack/event_handler_spec.rb b/spec/lib/appsignal/rack/event_handler_spec.rb index 3b74b9459..584b49429 100644 --- a/spec/lib/appsignal/rack/event_handler_spec.rb +++ b/spec/lib/appsignal/rack/event_handler_spec.rb @@ -78,6 +78,10 @@ def on_error(error) expect(Appsignal::Transaction.current).to be_kind_of(Appsignal::Transaction::NilTransaction) expect(last_transaction.ext.queue_start).to eq(queue_start_time) + expect(last_transaction).to include_event( + "name" => "process_request.rack", + "title" => "callback: after_reply" + ) end context "with error inside rack.after_reply handler" do @@ -386,7 +390,10 @@ def on_finish(given_request = request, given_response = response) on_start on_finish - expect(last_transaction).to include_event("name" => "process_request.rack") + expect(last_transaction).to include_event( + "name" => "process_request.rack", + "title" => "callback: on_finish" + ) end context "with response" do