Sha256: 2afbc540070c34294b7b071cb83599c3429d527a0883d65cd0cbc6277532aa99

Contents?: true

Size: 1.97 KB

Versions: 33

Compression:

Stored size: 1.97 KB

Contents

module ScoutRails::Instruments
  module ActionControllerInstruments
    def self.included(instrumented_class)
      ScoutRails::Agent.instance.logger.debug "Instrumenting #{instrumented_class.inspect}"
      instrumented_class.class_eval do
        unless instrumented_class.method_defined?(:perform_action_without_scout_instruments)
          alias_method :perform_action_without_scout_instruments, :perform_action
          alias_method :perform_action, :perform_action_with_scout_instruments
          private :perform_action
        end
      end
    end # self.included
    
    # In addition to instrumenting actions, this also sets the scope to the controller action name. The scope is later
    # applied to metrics recorded during this transaction. This lets us associate ActiveRecord calls with 
    # specific controller actions.
    def perform_action_with_scout_instruments(*args, &block)
      scout_controller_action = "Controller/#{controller_path}/#{action_name}"
      self.class.trace(scout_controller_action, :uri => request.request_uri) do
        perform_action_without_scout_instruments(*args, &block)
      end
    end
  end
end

if defined?(ActionController) && defined?(ActionController::Base)
  ActionController::Base.class_eval do
    include ScoutRails::Tracer
    include ::ScoutRails::Instruments::ActionControllerInstruments

    def rescue_action_with_scout(exception)
      ScoutRails::Agent.instance.store.track!("Errors/Request",1, :scope => nil)
      ScoutRails::Agent.instance.store.ignore_transaction!
      rescue_action_without_scout exception
    end

    alias_method :rescue_action_without_scout, :rescue_action
    alias_method :rescue_action, :rescue_action_with_scout
    protected :rescue_action
  end
  ScoutRails::Agent.instance.logger.debug "Instrumenting ActionView::Template"
  ActionView::Template.class_eval do
    include ::ScoutRails::Tracer
    instrument_method :render, :metric_name => 'View/#{path[%r{^(/.*/)?(.*)$},2]}/Rendering', :scope => true
  end
end

Version data entries

33 entries across 33 versions & 2 rubygems

Version Path
scout_rails-1.1.5.pre6 lib/scout_rails/instruments/rails/action_controller_instruments.rb
scout_rails-1.1.5.pre5 lib/scout_rails/instruments/rails/action_controller_instruments.rb
scout_rails-1.1.5.pre4 lib/scout_rails/instruments/rails/action_controller_instruments.rb
scout_rails-1.1.5.pre3 lib/scout_rails/instruments/rails/action_controller_instruments.rb
scout_rails-1.1.5.pre lib/scout_rails/instruments/rails/action_controller_instruments.rb
scout_rails-1.1.4.pre lib/scout_rails/instruments/rails/action_controller_instruments.rb
scout_rails-1.1.3 lib/scout_rails/instruments/rails/action_controller_instruments.rb
scout_rails-1.1.2 lib/scout_rails/instruments/rails/action_controller_instruments.rb
scout_rails-1.1.1 lib/scout_rails/instruments/rails/action_controller_instruments.rb
scout_rails-1.1.1.pre lib/scout_rails/instruments/rails/action_controller_instruments.rb
scout_rails-1.1.0 lib/scout_rails/instruments/rails/action_controller_instruments.rb
scout_rails-1.0.9 lib/scout_rails/instruments/rails/action_controller_instruments.rb
scout_rails-1.0.8 lib/scout_rails/instruments/rails/action_controller_instruments.rb
scout_rails-1.0.8.pre.3 lib/scout_rails/instruments/rails/action_controller_instruments.rb
scout_rails-1.0.7 lib/scout_rails/instruments/rails/action_controller_instruments.rb
scout_rails-1.0.6 lib/scout_rails/instruments/rails/action_controller_instruments.rb
scout_rails-1.0.5 lib/scout_rails/instruments/rails/action_controller_instruments.rb
scout_rails-1.0.5.pre lib/scout_rails/instruments/rails/action_controller_instruments.rb
scout_rails-1.0.4 lib/scout_rails/instruments/rails/action_controller_instruments.rb
scout_rails-1.0.4.pre.2 lib/scout_rails/instruments/rails/action_controller_instruments.rb