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

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 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
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 78
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 183
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 157
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 196
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 208
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 222
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 170
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 228
def initialize_copy(original)
  @subscribers = original.subscribers.dup
end
subscribers_for(topic) click to toggle source
# File lib/mongo/monitoring.rb, line 232
def subscribers_for(topic)
  subscribers[topic] ||= []
end