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

new(options = {}) click to toggle source

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
next_operation_id() click to toggle source

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

failed(topic, event) click to toggle source

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
started(topic, event) click to toggle source

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(topic, subscriber) click to toggle source

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
subscribers() click to toggle source

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
subscribers?(topic) click to toggle source

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
succeeded(topic, event) click to toggle source

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

initialize_copy(original) click to toggle source
# File lib/mongo/monitoring.rb, line 187
def initialize_copy(original)
  @subscribers = original.subscribers.dup
end
subscribers_for(topic) click to toggle source
# File lib/mongo/monitoring.rb, line 191
def subscribers_for(topic)
  subscribers[topic] ||= []
end