From 109d3ee38d1c39f0e27bc827065427635d6396b2 Mon Sep 17 00:00:00 2001 From: Justin George Date: Tue, 27 Apr 2010 14:13:47 -0700 Subject: Make notifications go off even when an error is raised, so that we capture the underlying performance data [#4505 state:resolved] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is important when trying to keep track of many layers of interrelated calls i.e.: ActiveRecord::Base.transaction do MyModel.find(1) #ActiveRecord::NotFound end # should capture the full time until the error propagation Signed-off-by: José Valim --- activesupport/lib/active_support/notifications/instrumenter.rb | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'activesupport/lib/active_support/notifications') diff --git a/activesupport/lib/active_support/notifications/instrumenter.rb b/activesupport/lib/active_support/notifications/instrumenter.rb index f3d877efe7..ef3fdd1843 100644 --- a/activesupport/lib/active_support/notifications/instrumenter.rb +++ b/activesupport/lib/active_support/notifications/instrumenter.rb @@ -15,9 +15,13 @@ module ActiveSupport # and publish it. def instrument(name, payload={}) time = Time.now - result = yield(payload) if block_given? - @notifier.publish(name, time, Time.now, @id, payload) - result + begin + yield(payload) if block_given? + ensure + # Notify in an ensure block so that we can be certain end + # events get sent even if an error occurs in the passed-in block + @notifier.publish(name, time, Time.now, @id, payload) + end end private -- cgit v1.2.3