class Mongo::Monitoring::Event::CommandStarted

Event that is fired when a command operation starts.

@since 2.1.0

Attributes

address[R]

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

command[R]

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

command_name[R]

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

connection_generation[R]

@api private

connection_id[R]

@return [ Integer ] The ID for the connection over which the command

is sent.

@api private

database_name[R]

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

operation_id[R]

@return [ Integer ] operation_id The operation id.

request_id[R]

@return [ Integer ] request_id The request id.

sensitive[R]

@return [ true | false ] Whether the event contains sensitive data.

@api private

server_connection_id[R]

@api private

service_id[R]

@return [ nil | Object ] The service id, if any.

socket_object_id[R]

object_id of the socket object used for this command.

@api private

Public Class Methods

generate(address, operation_id, payload, socket_object_id: nil, connection_id: nil, connection_generation: nil, server_connection_id: nil, service_id: nil ) click to toggle source

Create the event from a wire protocol message payload.

@example Create the event.

CommandStarted.generate(address, 1, payload)

@param [ Server::Address ] address The server address. @param [ Integer ] operation_id The operation id. @param [ Hash ] payload The message payload. @param [ Object ] service_id The service id, if any.

@return [ CommandStarted ] The event.

@since 2.1.0 @api private

# File lib/mongo/monitoring/event/command_started.rb, line 150
def self.generate(address, operation_id, payload,
  socket_object_id: nil, connection_id: nil, connection_generation: nil,
  server_connection_id: nil, service_id: nil
)
  new(
    payload[:command_name],
    payload[:database_name],
    address,
    payload[:request_id],
    operation_id,
    # All op_msg  payloads have a $db field. Legacy payloads do not
    # have a $db field. To emulate op_msg when publishing command
    # monitoring events for legacy servers, add $db to the payload,
    # copying the database name. Note that the database name is also
    # available as a top-level attribute on the command started event.
    payload[:command].merge('$db' => payload[:database_name]),
    socket_object_id: socket_object_id,
    connection_id: connection_id,
    connection_generation: connection_generation,
    server_connection_id: server_connection_id,
    service_id: service_id,
  )
end
new(command_name, database_name, address, request_id, operation_id, command, socket_object_id: nil, connection_id: nil, connection_generation: nil, server_connection_id: nil, service_id: nil ) 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 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 ] command The command arguments. @param [ Object ] service_id The service id, if any.

@since 2.1.0 @api private

# File lib/mongo/monitoring/event/command_started.rb, line 85
def initialize(command_name, database_name, address, request_id,
  operation_id, command, socket_object_id: nil, connection_id: nil,
  connection_generation: nil, server_connection_id: nil,
  service_id: nil
)
  @command_name = command_name.to_s
  @database_name = database_name
  @address = address
  @request_id = request_id
  @operation_id = operation_id
  @service_id = service_id
  @sensitive = sensitive?(
    command_name: @command_name,
    document: command
  )
  @command = redacted(command_name, command)
  @socket_object_id = socket_object_id
  @connection_id = connection_id
  @connection_generation = connection_generation
  @server_connection_id = server_connection_id
end

Public Instance Methods

inspect() click to toggle source

Returns a concise yet useful summary of the event.

@return [ String ] String summary of the event.

@since 2.6.0

# File lib/mongo/monitoring/event/command_started.rb, line 179
def inspect
  "#<{#{self.class} #{database_name}.#{command_name} command=#{command}>"
end
summary() click to toggle source

Returns a concise yet useful summary of the event.

@return [ String ] String summary of the event.

@note This method is experimental and subject to change.

@api experimental

# File lib/mongo/monitoring/event/command_started.rb, line 114
def summary
  "#<#{short_class_name} address=#{address} #{database_name}.#{command_name} command=#{command_summary}>"
end

Private Instance Methods

command_summary() click to toggle source

Returns the command, formatted as a string, with automatically added keys elided ($clusterTime, lsid, signature).

@return [ String ] The command summary.

# File lib/mongo/monitoring/event/command_started.rb, line 122
        def command_summary
  command = self.command
  remove_keys = %w($clusterTime lsid signature)
  if remove_keys.any? { |k| command.key?(k) }
    command = Hash[command.reject { |k, v| remove_keys.include?(k) }]
    suffix = ' ...'
  else
    suffix = ''
  end
  command.map do |k, v|
    "#{k}=#{v.inspect}"
  end.join(' ') + suffix
end