Class: Mongo::Monitoring

Inherits:
Object
  • Object
show all
Defined in:
lib/mongo/monitoring.rb,
lib/mongo/monitoring/publishable.rb,
lib/mongo/monitoring/event/secure.rb,
lib/mongo/monitoring/sdam_log_subscriber.rb,
lib/mongo/monitoring/event/server_closed.rb,
lib/mongo/monitoring/event/command_failed.rb,
lib/mongo/monitoring/event/server_opening.rb,
lib/mongo/monitoring/event/topology_closed.rb,
lib/mongo/monitoring/event/command_started.rb,
lib/mongo/monitoring/command_log_subscriber.rb,
lib/mongo/monitoring/event/topology_changed.rb,
lib/mongo/monitoring/event/topology_opening.rb,
lib/mongo/monitoring/event/command_succeeded.rb,
lib/mongo/monitoring/server_closed_log_subscriber.rb,
lib/mongo/monitoring/server_opening_log_subscriber.rb,
lib/mongo/monitoring/topology_changed_log_subscriber.rb,
lib/mongo/monitoring/topology_opening_log_subscriber.rb,
lib/mongo/monitoring/event/server_description_changed.rb,
lib/mongo/monitoring/server_description_changed_log_subscriber.rb

Overview

The class defines behaviour for the performance monitoring API.

Since:

  • 2.1.0

Defined Under Namespace

Modules: Event, Global, Publishable Classes: CommandLogSubscriber, SDAMLogSubscriber, ServerClosedLogSubscriber, ServerDescriptionChangedLogSubscriber, ServerOpeningLogSubscriber, TopologyChangedLogSubscriber, TopologyOpeningLogSubscriber

Constant Summary

COMMAND =

The command topic.

Since:

  • 2.1.0

'Command'.freeze
SERVER_CLOSED =

Server closed topic.

Since:

  • 2.4.0

'ServerClosed'.freeze
SERVER_DESCRIPTION_CHANGED =

Server description changed topic.

Since:

  • 2.4.0

'ServerDescriptionChanged'.freeze
SERVER_OPENING =

Server opening topic.

Since:

  • 2.4.0

'ServerOpening'.freeze
TOPOLOGY_CHANGED =

Topology changed topic.

Since:

  • 2.4.0

'TopologyChanged'.freeze
TOPOLOGY_CLOSED =

Topology closed topic.

Since:

  • 2.4.0

'TopologyClosed'.freeze
TOPOLOGY_OPENING =

Topology opening topic.

Since:

  • 2.4.0

'TopologyOpening'.freeze
@@operation_id =

Since:

  • 2.1.0

0
@@operation_id_lock =

Since:

  • 2.1.0

Mutex.new

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Monitoring

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Initialize the monitoring.

Examples:

Create the new monitoring.

Monitoring.new(:monitoring => true)

Parameters:

  • options (Hash) (defaults to: {})

    The options.

Since:

  • 2.1.0



132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# 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

Class Method Details

.next_operation_idInteger

Used for generating unique operation ids to link events together.

Examples:

Get the next operation id.

Monitoring.next_operation_id

Returns:

  • (Integer)

    The next operation id.

Since:

  • 2.1.0



78
79
80
81
82
# File 'lib/mongo/monitoring.rb', line 78

def self.next_operation_id
  @@operation_id_lock.synchronize do
    @@operation_id += 1
  end
end

Instance Method Details

#failed(topic, event) ⇒ Object

Publish a failed event.

Examples:

Publish a failed event.

monitoring.failed(COMMAND, event)

Parameters:

  • topic (String)

    The event topic.

  • event (Event)

    The event to publish.

Since:

  • 2.1.0



183
184
185
# File 'lib/mongo/monitoring.rb', line 183

def failed(topic, event)
  subscribers_for(topic).each{ |subscriber| subscriber.failed(event) }
end

#started(topic, event) ⇒ Object

Publish a started event.

Examples:

Publish a started event.

monitoring.started(COMMAND, event)

Parameters:

  • topic (String)

    The event topic.

  • event (Event)

    The event to publish.

Since:

  • 2.1.0



157
158
159
# File 'lib/mongo/monitoring.rb', line 157

def started(topic, event)
  subscribers_for(topic).each{ |subscriber| subscriber.started(event) }
end

#subscribe(topic, subscriber) ⇒ Object

Subscribe a listener to an event topic.

Examples:

Subscribe to the topic.

monitoring.subscribe(QUERY, subscriber)

Parameters:

  • topic (String)

    The event topic.

  • subscriber (Object)

    The subscriber to handle the event.

Since:

  • 2.1.0



196
197
198
# File 'lib/mongo/monitoring.rb', line 196

def subscribe(topic, subscriber)
  subscribers_for(topic).push(subscriber)
end

#subscribersHash<String, Object>

Get all the subscribers.

Examples:

Get all the subscribers.

monitoring.subscribers

Returns:

  • (Hash<String, Object>)

    The subscribers.

Since:

  • 2.1.0



208
209
210
# File 'lib/mongo/monitoring.rb', line 208

def subscribers
  @subscribers ||= {}
end

#subscribers?(topic) ⇒ true, false

Determine if there are any subscribers for a particular event.

Examples:

Are there subscribers?

monitoring.subscribers?(COMMAND)

Parameters:

  • topic (String)

    The event topic.

Returns:

  • (true, false)

    If there are subscribers for the topic.

Since:

  • 2.1.0



222
223
224
# File 'lib/mongo/monitoring.rb', line 222

def subscribers?(topic)
  !subscribers_for(topic).empty?
end

#succeeded(topic, event) ⇒ Object

Publish a succeeded event.

Examples:

Publish a succeeded event.

monitoring.succeeded(COMMAND, event)

Parameters:

  • topic (String)

    The event topic.

  • event (Event)

    The event to publish.

Since:

  • 2.1.0



170
171
172
# File 'lib/mongo/monitoring.rb', line 170

def succeeded(topic, event)
  subscribers_for(topic).each{ |subscriber| subscriber.succeeded(event) }
end