Sha256: 98e6ba63732e2c1d3c9bce74d5d6d10c76cecd3a10efdf95a164dc4399988439

Contents?: true

Size: 1.65 KB

Versions: 22

Compression:

Stored size: 1.65 KB

Contents

module Appsignal
  class Hooks
    class MongoMonitorSubscriber
      # Called by Mongo::Monitor when query starts
      def started(event)
        transaction = Appsignal::Transaction.current
        return if transaction.nil_transaction?
        return if transaction.paused?

        # Format the command
        command = Appsignal::EventFormatter::MongoRubyDriver::QueryFormatter
          .format(event.command_name, event.command)

        # Store the query on the transaction, we need it when the event finishes
        store                   = transaction.store('mongo_driver')
        store[event.request_id] = command

        # Start this event
        transaction.start_event
      end

      # Called by Mongo::Monitor when query succeeds
      def succeeded(event)
        # Finish the event as succeeded
        finish('SUCCEEDED', event)
      end

      # Called by Mongo::Monitor when query fails
      def failed(event)
        # Finish the event as failed
        finish('FAILED', event)
      end

      # Finishes the event in the AppSignal extension
      def finish(result, event)
        transaction = Appsignal::Transaction.current
        return if transaction.nil_transaction?
        return if transaction.paused?

        # Get the query from the transaction store
        store   = transaction.store('mongo_driver')
        command = store.delete(event.request_id) || {}

        # Finish the event in the extension.
        transaction.finish_event(
          'query.mongodb',
          "#{event.command_name.to_s} | #{event.database_name} | #{result}",
          Appsignal::Utils.json_generate(command),
          0
        )
      end
    end
  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
appsignal-1.2.5 lib/appsignal/integrations/mongo_ruby_driver.rb
appsignal-1.2.4 lib/appsignal/integrations/mongo_ruby_driver.rb
appsignal-1.2.4.beta.4 lib/appsignal/integrations/mongo_ruby_driver.rb
appsignal-1.2.4.beta.3 lib/appsignal/integrations/mongo_ruby_driver.rb
appsignal-1.2.4.beta.2 lib/appsignal/integrations/mongo_ruby_driver.rb
appsignal-1.2.4.beta.1 lib/appsignal/integrations/mongo_ruby_driver.rb
appsignal-1.2.3 lib/appsignal/integrations/mongo_ruby_driver.rb
appsignal-1.2.3.beta.3 lib/appsignal/integrations/mongo_ruby_driver.rb
appsignal-1.2.3.beta.2 lib/appsignal/integrations/mongo_ruby_driver.rb
appsignal-1.2.3.beta.1 lib/appsignal/integrations/mongo_ruby_driver.rb
appsignal-1.2.2 lib/appsignal/integrations/mongo_ruby_driver.rb
appsignal-1.2.1 lib/appsignal/integrations/mongo_ruby_driver.rb
appsignal-1.2.1.beta.3 lib/appsignal/integrations/mongo_ruby_driver.rb
appsignal-1.2.1.beta.2 lib/appsignal/integrations/mongo_ruby_driver.rb
appsignal-1.2.1.beta.1 lib/appsignal/integrations/mongo_ruby_driver.rb
appsignal-1.2.0 lib/appsignal/integrations/mongo_ruby_driver.rb
appsignal-1.2.0.beta.1 lib/appsignal/integrations/mongo_ruby_driver.rb
appsignal-1.2.0.alpha.6 lib/appsignal/integrations/mongo_ruby_driver.rb
appsignal-1.2.0.alpha.5 lib/appsignal/integrations/mongo_ruby_driver.rb
appsignal-1.2.0.alpha.4 lib/appsignal/integrations/mongo_ruby_driver.rb