diff options
author | Yehuda Katz <wycats@gmail.com> | 2009-10-28 01:58:33 -0700 |
---|---|---|
committer | Yehuda Katz <wycats@gmail.com> | 2009-10-28 01:58:33 -0700 |
commit | c9487ed6aff76693f33ff89e466ba944297681d3 (patch) | |
tree | 9620f225535a2adab27b5a2399f69427ec1cd5d5 /activesupport | |
parent | 03d3824d965f38d3c595330d697fb16dc9efdb9a (diff) | |
download | rails-c9487ed6aff76693f33ff89e466ba944297681d3.tar.gz rails-c9487ed6aff76693f33ff89e466ba944297681d3.tar.bz2 rails-c9487ed6aff76693f33ff89e466ba944297681d3.zip |
Change Event#thread_id to #transaction_id. Defaults to one "transaction" per thread but you can explicitly declare the start of a new one. This makes it possible for each request to have it own id.
Diffstat (limited to 'activesupport')
-rw-r--r-- | activesupport/lib/active_support/notifications.rb | 25 | ||||
-rw-r--r-- | activesupport/test/notifications_test.rb | 20 |
2 files changed, 32 insertions, 13 deletions
diff --git a/activesupport/lib/active_support/notifications.rb b/activesupport/lib/active_support/notifications.rb index bf668964f5..9eae3bebe2 100644 --- a/activesupport/lib/active_support/notifications.rb +++ b/activesupport/lib/active_support/notifications.rb @@ -16,8 +16,8 @@ module ActiveSupport # # @events = [] # - # ActiveSupport::Notifications.subscribe do |event| - # @events << event + # ActiveSupport::Notifications.subscribe do |*args| + # @events << ActiveSupport::Notifications::Event.new(*args) # end # # ActiveSupport::Notifications.instrument(:render, :extra => :information) do @@ -25,7 +25,6 @@ module ActiveSupport # end # # event = @events.first - # event.class #=> ActiveSupport::Notifications::Event # event.name #=> :render # event.duration #=> 10 (in miliseconds) # event.result #=> "Foo" @@ -45,7 +44,7 @@ module ActiveSupport mattr_accessor :queue class << self - delegate :instrument, :transaction_id, :generate_id, :to => :instrumenter + delegate :instrument, :transaction_id, :transaction, :to => :instrumenter def instrumenter Thread.current[:notifications_instrumeter] ||= Instrumenter.new(publisher) @@ -118,15 +117,15 @@ module ActiveSupport end class Event - attr_reader :name, :time, :end, :thread_id, :result, :payload - - def initialize(name, start, ending, result, thread_id, payload) - @name = name - @payload = payload.dup - @time = start - @thread_id = thread_id - @end = ending - @result = result + attr_reader :name, :time, :end, :transaction_id, :result, :payload + + def initialize(name, start, ending, result, transaction_id, payload) + @name = name + @payload = payload.dup + @time = start + @transaction_id = transaction_id + @end = ending + @result = result end def duration diff --git a/activesupport/test/notifications_test.rb b/activesupport/test/notifications_test.rb index b763b740af..9175c8f26e 100644 --- a/activesupport/test/notifications_test.rb +++ b/activesupport/test/notifications_test.rb @@ -124,6 +124,26 @@ class NotificationsMainTest < Test::Unit::TestCase assert_equal Hash[:payload => "notifications"], @events.last.payload end + def test_subscribed_in_a_transaction + @another = [] + + ActiveSupport::Notifications.subscribe("cache") do |*args| + @another << ActiveSupport::Notifications::Event.new(*args) + end + + ActiveSupport::Notifications.instrument(:cache){ 1 } + ActiveSupport::Notifications.transaction do + ActiveSupport::Notifications.instrument(:cache){ 1 } + end + ActiveSupport::Notifications.instrument(:cache){ 1 } + + sleep 0.1 + + before, during, after = @another.map {|e| e.transaction_id } + assert_equal before, after + assert_not_equal before, during + end + def test_subscriber_with_pattern @another = [] |