class Mongo::Monitoring::Event::CommandSucceeded

Event that is fired when a command operation succeeds.

@since 2.1.0

Attributes

address[R]

@return [ Server::Address ] address The server address.

command_name[R]

@return [ String ] command_name The name of the command.

database_name[R]

@return [ String ] database_name The name of the database.

duration[R]

@return [ Float ] duration The duration of the event.

operation_id[R]

@return [ Integer ] operation_id The operation id.

reply[R]

@return [ BSON::Document ] reply The command reply.

request_id[R]

@return [ Integer ] request_id The request id.

Public Class Methods

generate(address, operation_id, command_payload, reply_payload, duration) click to toggle source

Create the event from a wire protocol message payload.

@example Create the event.

CommandSucceeded.generate(address, 1, command_payload, reply_payload, 0.5)

@param [ Server::Address ] address The server address. @param [ Integer ] operation_id The operation id. @param [ Hash ] command_payload The command message payload. @param [ Hash ] reply_payload The reply message payload. @param [ Float ] duration The duration of the command in seconds.

@return [ CommandCompleted ] The event.

@since 2.1.0 @api private

# File lib/mongo/monitoring/event/command_succeeded.rb, line 85
def self.generate(address, operation_id, command_payload, reply_payload, duration)
  new(
    command_payload[:command_name],
    command_payload[:database_name],
    address,
    command_payload[:request_id],
    operation_id,
    generate_reply(command_payload, reply_payload),
    duration
  )
end
new(command_name, database_name, address, request_id, operation_id, reply, duration) click to toggle source

Create the new event.

@example Create the event.

@param [ String ] command_name The name of the command. @param [ String ] database_name The database name. @param [ Server::Address ] address The server address. @param [ Integer ] request_id The request id. @param [ Integer ] operation_id The operation id. @param [ BSON::Document ] reply The command reply. @param [ Float ] duration The duration the command took in seconds.

@since 2.1.0 @api private

# File lib/mongo/monitoring/event/command_succeeded.rb, line 60
def initialize(command_name, database_name, address, request_id, operation_id, reply, duration)
  @command_name = command_name.to_s
  @database_name = database_name
  @address = address
  @request_id = request_id
  @operation_id = operation_id
  @reply = redacted(command_name, reply)
  @duration = duration
end

Private Class Methods

generate_reply(command_payload, reply_payload) click to toggle source
# File lib/mongo/monitoring/event/command_succeeded.rb, line 99
def self.generate_reply(command_payload, reply_payload)
  if reply_payload
    reply = reply_payload[:reply]
    if cursor = reply[:cursor]
      if !cursor.key?(Collection::NS)
        cursor.merge!(Collection::NS => namespace(command_payload))
      end
    end
    reply
  else
    BSON::Document.new(Operation::Result::OK => 1)
  end
end
namespace(payload) click to toggle source
# File lib/mongo/monitoring/event/command_succeeded.rb, line 113
def self.namespace(payload)
  command = payload[:command]
  "#{payload[:database_name]}.#{command[:collection] || command.values.first}"
end