module AwesomeExplain::Mongodb::CommandSuccess

Public Instance Methods

handle_command_success(event) click to toggle source
# File lib/awesome_explain/mongodb/command_success.rb, line 6
def handle_command_success(event)
  if db_logging_enbled?
    case AwesomeExplain::Config.instance.enabled?
    when Rails.env.development?
      handle_command_success_sync(event)
    when Rails.env.staging?
      handle_command_success_async(event)
    end
  end
end
handle_command_success_async(event) click to toggle source
# File lib/awesome_explain/mongodb/command_success.rb, line 53
def handle_command_success_async(event)
  # TODO: How to handle using Queues
end
handle_command_success_sync(event) click to toggle source
# File lib/awesome_explain/mongodb/command_success.rb, line 48
def handle_command_success_sync(event)
  # process_command_success(event)
  ::AwesomeExplain::Config.instance.queue << ::AwesomeExplain::Queue::Command.new(:process_command_success, event, self)
end
process_command_success(event) click to toggle source
# File lib/awesome_explain/mongodb/command_success.rb, line 17
def process_command_success(event)
  begin
    command_name = event.command_name.to_sym
    request_id = event.request_id
    duration = event.duration.round(5)
    @stats[:performed_queries][command_name] += 1
    @stats[:total_duration] += duration
    @queries[request_id][:duration] = duration

    log = {
      operation: command_name,
      app_name: AwesomeExplain::Config.instance.app_name,
      source_name: resolve_source_name,
      collscan: @queries[request_id][:collscan],
      collection: @queries[request_id][:collection_name],
      duration: duration,
      command: @queries[request_id][:command].to_json,
      session_id: Thread.current[:ae_session_id],
      lsid: @queries[request_id][:lsid],
      stacktrace_id: resolve_stracktrace_id(request_id),
      explain_id: @queries[request_id][:explain_id],
      controller_id: resolve_controller_id,
      sidekiq_worker_id: resolve_sidekiq_class_id,
    }
    AwesomeExplain::Log.create(log)
  rescue => exception
    logger.warn exception.to_s
    logger.warn exception.backtrace[0..5]
  end
end