class ElasticAPM::Spies::MongoSpy::Subscriber
@api private
def build_context(event)
def build_context(event) Span::Context.new( db: { instance: event.database_name, statement: event.command.to_s, type: 'mongodb', user: nil } ) end
def failed(event)
def failed(event) pop_event(event) end
def initialize
def initialize @events = {} end
def pop_event(event)
def pop_event(event) return unless (curr = ElasticAPM.current_span) span = @events.delete(event.operation_id) curr == span && ElasticAPM.end_span end
def push_event(event)
def push_event(event) return unless ElasticAPM.current_transaction # Some MongoDB commands are not on collections but rather are db # admin commands. For these commands, the value at the `command_name` # key is the integer 1. unless event.command[event.command_name] == 1 collection = event.command[event.command_name] end name = [event.database_name, collection, event.command_name].compact.join('.') span = ElasticAPM.start_span( name, TYPE, subtype: SUBTYPE, action: ACTION, context: build_context(event) ) @events[event.operation_id] = span end
def started(event)
def started(event) push_event(event) end
def succeeded(event)
def succeeded(event) pop_event(event) end