提交 c9487ed6 编写于 作者: Y Yehuda Katz

Change Event#thread_id to #transaction_id. Defaults to one "transaction" per...

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.
上级 03d3824d
......@@ -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 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 = []
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册