class Praxis::Plugins::RailsPlugin::Plugin

Public Instance Methods

setup!() click to toggle source
# File lib/praxis/plugins/rails_plugin.rb, line 12
def setup!
  require 'praxis/dispatcher'
  enable_action_controller_instrumentation
end

Private Instance Methods

enable_action_controller_instrumentation() click to toggle source
# File lib/praxis/plugins/rails_plugin.rb, line 19
def enable_action_controller_instrumentation
  Praxis::Dispatcher.class_eval do
    # Wrap the original action dispatch with a method that instruments rails-expected bits...
    alias_method :orig_instrumented_dispatch, :instrumented_dispatch

    def instrumented_dispatch(praxis_payload)
      rails_payload = {
        controller: controller.class.name,
        action: action.name,
        params: (request.params ? request.params.dump : {}),
        method: request.verb,
        path: begin
          request.fullpath
        rescue StandardError
          'unknown'
        end
      }
      Praxis::Notifications.instrument('start_processing.action_controller', rails_payload.dup)

      Praxis::Notifications.instrument 'process_action.action_controller' do |data|
        res = orig_instrumented_dispatch(praxis_payload)
        # TODO: also add the db_runtime and view_runtime values...
        data[:status] = res[0]
        res

        # Append DB runtime to payload
        # data[:db_runtime] = 999
        # Append rendering time to payload
        # data[:view_runtime] = 123
      end
    end
  end
end
instrumented_dispatch(praxis_payload) click to toggle source
# File lib/praxis/plugins/rails_plugin.rb, line 24
def instrumented_dispatch(praxis_payload)
  rails_payload = {
    controller: controller.class.name,
    action: action.name,
    params: (request.params ? request.params.dump : {}),
    method: request.verb,
    path: begin
      request.fullpath
    rescue StandardError
      'unknown'
    end
  }
  Praxis::Notifications.instrument('start_processing.action_controller', rails_payload.dup)

  Praxis::Notifications.instrument 'process_action.action_controller' do |data|
    res = orig_instrumented_dispatch(praxis_payload)
    # TODO: also add the db_runtime and view_runtime values...
    data[:status] = res[0]
    res

    # Append DB runtime to payload
    # data[:db_runtime] = 999
    # Append rendering time to payload
    # data[:view_runtime] = 123
  end
end