aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/notifications.rb
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2009-10-15 18:06:15 -0300
committerJosé Valim <jose.valim@gmail.com>2009-10-15 18:06:15 -0300
commit8b340ab2f62bac2af9d5917e296bb4101530282a (patch)
tree576a6c21ec003b05f8a4e23e671077136208db58 /activesupport/lib/active_support/notifications.rb
parent02b76862e1ff8ceccb3cd48922ac178462e14892 (diff)
downloadrails-8b340ab2f62bac2af9d5917e296bb4101530282a.tar.gz
rails-8b340ab2f62bac2af9d5917e296bb4101530282a.tar.bz2
rails-8b340ab2f62bac2af9d5917e296bb4101530282a.zip
Revert "Rename Orchestra to Notifications [#3321 state:resolved]"
This reverts commit 8cbf825425dc8ad3770881ea4e100b9023c69ce2.
Diffstat (limited to 'activesupport/lib/active_support/notifications.rb')
-rw-r--r--activesupport/lib/active_support/notifications.rb103
1 files changed, 0 insertions, 103 deletions
diff --git a/activesupport/lib/active_support/notifications.rb b/activesupport/lib/active_support/notifications.rb
deleted file mode 100644
index 6335686196..0000000000
--- a/activesupport/lib/active_support/notifications.rb
+++ /dev/null
@@ -1,103 +0,0 @@
-require 'thread'
-
-module ActiveSupport
- # Notifications provides an instrumentation API for Ruby. To instrument an action
- # in Ruby you just need to:
- #
- # ActiveSupport::Notifications.instrument(:render, :extra => :information) do
- # render :text => "Foo"
- # end
- #
- # Those actions are consumed by listeners. A listener is anything that responds
- # to push. You can even register an array:
- #
- # @listener = []
- # ActiveSupport::Notifications.register @listener
- #
- # ActiveSupport::Notifications.instrument(:render, :extra => :information) do
- # render :text => "Foo"
- # end
- #
- # event #=> ActiveSupport::Notifications::Event
- # event.name #=> :render
- # event.duration #=> 10 (in miliseconds)
- # event.result #=> "Foo"
- # event.payload #=> { :extra => :information }
- #
- # Notifications ships with a default listener implementation which puts events in
- # a stream and consume them in a Thread. This implementation is thread safe
- # and is available at ActiveSupport::Notifications::Listener.
- #
- module Notifications
- @stacked_events = Hash.new { |h,k| h[k] = [] }
- @listeners = []
-
- def self.instrument(name, payload=nil)
- stack = @stacked_events[Thread.current.object_id]
- event = Event.new(name, stack.last, payload)
- stack << event
- event.result = yield
- event
- ensure
- event.finish!
- stack.delete(event)
- @listeners.each { |s| s.push(event) }
- end
-
- def self.register(listener)
- @listeners << listener
- end
-
- def self.unregister(listener)
- @listeners.delete(listener)
- end
-
- class Event
- attr_reader :name, :time, :duration, :parent, :thread_id, :payload
- attr_accessor :result
-
- def initialize(name, parent=nil, payload=nil)
- @name = name
- @time = Time.now
- @thread_id = Thread.current.object_id
- @parent = parent
- @payload = payload
- end
-
- def finish!
- @duration = 1000 * (Time.now.to_f - @time.to_f)
- end
- end
-
- class Listener
- attr_reader :mutex, :signaler, :thread
-
- def initialize
- @mutex, @signaler = Mutex.new, ConditionVariable.new
- @stream = []
- @thread = Thread.new do
- loop do
- (event = @stream.shift) ? consume(event) : wait
- end
- end
- end
-
- def wait
- @mutex.synchronize do
- @signaler.wait(@mutex)
- end
- end
-
- def push(event)
- @mutex.synchronize do
- @stream.push(event)
- @signaler.broadcast
- end
- end
-
- def consume(event)
- raise NotImplementedError
- end
- end
- end
-end