Permalink
Browse files

Change Event#thread_id to #transaction_id. Defaults to one "transacti…

…on" 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.
  • Loading branch information...
wycats committed Oct 28, 2009
1 parent 03d3824 commit c9487ed6aff76693f33ff89e466ba944297681d3
Showing with 32 additions and 13 deletions.
  1. +12 −13 activesupport/lib/active_support/notifications.rb
  2. +20 −0 activesupport/test/notifications_test.rb
@@ -16,16 +16,15 @@ 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
# render :text => "Foo"
# 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 Notifications
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 @@ def subscribe
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
@@ -124,6 +124,26 @@ def test_event_is_pushed_even_without_block
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 = []

0 comments on commit c9487ed

Please sign in to comment.