class Mongo::Monitoring::Event::CommandStarted
Event
that is fired when a command operation starts.
@since 2.1.0
Attributes
@return [ Server::Address ] address The server address.
@return [ BSON::Document ] command The command arguments.
@return [ String ] command_name
The name of the command.
@api private
@return [ Integer ] The ID for the connection over which the command
is sent.
@api private
@return [ String ] database_name
The name of the database_name.
@return [ Integer ] operation_id
The operation id.
@return [ Integer ] request_id
The request id.
@return [ true | false ] Whether the event contains sensitive data.
@api private
@return [ Integer ] server_connection_id
The server connection id.
@return [ nil | Object ] The service id, if any.
object_id of the socket object used for this command.
@api private
Public Class Methods
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
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
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
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
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