class Mongo::Monitoring
The class defines behaviour for the performance monitoring API.
@since 2.1.0
Constants
- COMMAND
The command topic.
@since 2.1.0
Public Class Methods
Initialize the monitoring.
@api private
@example Create the new monitoring.
Monitoring.new(:monitoring => true)
@param [ Hash ] options The options.
@since 2.1.0
# File lib/mongo/monitoring.rb, line 96 def initialize(options = {}) if options[:monitoring] != false Global.subscribers.each do |topic, subscribers| subscribers.each do |subscriber| subscribe(topic, subscriber) end end subscribe(COMMAND, CommandLogSubscriber.new(options)) end end
Used for generating unique operation ids to link events together.
@example Get the next operation id.
Monitoring.next_operation_id
@return [ Integer ] The next operation id.
@since 2.1.0
# File lib/mongo/monitoring.rb, line 42 def self.next_operation_id @@operation_id_lock.synchronize do @@operation_id += 1 end end
Public Instance Methods
Publish a failed event.
@example Publish a failed event.
monitoring.failed(COMMAND, event)
@param [ String ] topic The event topic. @param [ Event ] event The event to publish.
@since 2.1.0
# File lib/mongo/monitoring.rb, line 142 def failed(topic, event) subscribers_for(topic).each{ |subscriber| subscriber.failed(event) } end
Publish a started event.
@example Publish a started event.
monitoring.started(COMMAND, event)
@param [ String ] topic The event topic. @param [ Event ] event The event to publish.
@since 2.1.0
# File lib/mongo/monitoring.rb, line 116 def started(topic, event) subscribers_for(topic).each{ |subscriber| subscriber.started(event) } end
Subscribe a listener to an event topic.
@example Subscribe to the topic.
monitoring.subscribe(QUERY, subscriber)
@param [ String ] topic The event topic. @param [ Object ] subscriber The subscriber to handle the event.
@since 2.1.0
# File lib/mongo/monitoring.rb, line 155 def subscribe(topic, subscriber) subscribers_for(topic).push(subscriber) end
Get all the subscribers.
@example Get all the subscribers.
monitoring.subscribers
@return [ Hash<String, Object> ] The subscribers.
@since 2.1.0
# File lib/mongo/monitoring.rb, line 167 def subscribers @subscribers ||= {} end
Determine if there are any subscribers for a particular event.
@example Are there subscribers?
monitoring.subscribers?(COMMAND)
@param [ String ] topic The event topic.
@return [ true, false ] If there are subscribers for the topic.
@since 2.1.0
# File lib/mongo/monitoring.rb, line 181 def subscribers?(topic) !subscribers_for(topic).empty? end
Publish a succeeded event.
@example Publish a succeeded event.
monitoring.succeeded(COMMAND, event)
@param [ String ] topic The event topic. @param [ Event ] event The event to publish.
@since 2.1.0
# File lib/mongo/monitoring.rb, line 129 def succeeded(topic, event) subscribers_for(topic).each{ |subscriber| subscriber.succeeded(event) } end
Private Instance Methods
# File lib/mongo/monitoring.rb, line 187 def initialize_copy(original) @subscribers = original.subscribers.dup end
# File lib/mongo/monitoring.rb, line 191 def subscribers_for(topic) subscribers[topic] ||= [] end