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
- SERVER_CLOSED
Server
closed topic.@since 2.4.0
- SERVER_DESCRIPTION_CHANGED
Server
description changed topic.@since 2.4.0
- SERVER_OPENING
Server
opening topic.@since 2.4.0
- TOPOLOGY_CHANGED
Topology changed topic.
@since 2.4.0
- TOPOLOGY_CLOSED
Topology closed topic.
@since 2.4.0
- TOPOLOGY_OPENING
Topology opening topic.
@since 2.4.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 132 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)) subscribe(SERVER_OPENING, ServerOpeningLogSubscriber.new(options)) subscribe(SERVER_CLOSED, ServerClosedLogSubscriber.new(options)) subscribe(SERVER_DESCRIPTION_CHANGED, ServerDescriptionChangedLogSubscriber.new(options)) subscribe(TOPOLOGY_OPENING, TopologyOpeningLogSubscriber.new(options)) subscribe(TOPOLOGY_CHANGED, TopologyChangedLogSubscriber.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 78 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 183 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 157 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 196 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 208 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 222 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 170 def succeeded(topic, event) subscribers_for(topic).each{ |subscriber| subscriber.succeeded(event) } end
Private Instance Methods
# File lib/mongo/monitoring.rb, line 228 def initialize_copy(original) @subscribers = original.subscribers.dup end
# File lib/mongo/monitoring.rb, line 232 def subscribers_for(topic) subscribers[topic] ||= [] end