Sha256: 0cf2736b453dde9719dfd079ed3e355147a36dce00947e1b5289d083e407c14c

Contents?: true

Size: 1.96 KB

Versions: 22

Compression:

Stored size: 1.96 KB

Contents

require 'appsignal'

module Appsignal::Integrations
  module PadrinoPlugin
    def self.init
      Appsignal.logger.info("Loading Padrino (#{Padrino::VERSION}) integration")

      root             = Padrino.mounted_root
      Appsignal.config = Appsignal::Config.new(root, Padrino.env)

      Appsignal.start_logger(File.join(root, 'log'))
      Appsignal.start
    end
  end
end

module Padrino::Routing::InstanceMethods
  alias route_without_appsignal route!

  def route!(base=settings, pass_block=nil)
    if !Appsignal.active? || env['sinatra.static_file']
      route_without_appsignal(base, pass_block)
      return
    end

    transaction = Appsignal::Transaction.create(
      SecureRandom.uuid,
      Appsignal::Transaction::HTTP_REQUEST,
      request
    )
    begin
      ActiveSupport::Notifications.instrument('process_action.padrino') do
        route_without_appsignal(base, pass_block)
      end
    rescue => error
      transaction.set_error(error)
      raise error
    ensure
      transaction.set_action(get_payload_action(request))
      transaction.set_metadata('path', request.path)
      transaction.set_metadata('method', request.request_method)
      transaction.set_http_or_background_queue_start
      Appsignal::Transaction.complete_current!
    end
  end

  def get_payload_action(request)
    # Short-circut is there's no request object to obtain information from
    return "#{settings.name}" if request.nil?

    # Older versions of Padrino work with a route object
    route_obj = defined?(request.route_obj) && request.route_obj
    if route_obj && route_obj.respond_to?(:original_path)
      return "#{settings.name}:#{request.route_obj.original_path}"
    end

    # Newer versions expose the action / controller on the request class
    request_data = request.respond_to?(:action) ? request.action : request.fullpath
    "#{settings.name}:#{request.controller}##{request_data}"
  end
end

Padrino.after_load do
  Appsignal::Integrations::PadrinoPlugin.init
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
appsignal-0.12.beta.53 lib/appsignal/integrations/padrino.rb
appsignal-0.12.beta.52 lib/appsignal/integrations/padrino.rb
appsignal-0.12.beta.51 lib/appsignal/integrations/padrino.rb
appsignal-0.12.beta.50 lib/appsignal/integrations/padrino.rb
appsignal-0.12.beta.49 lib/appsignal/integrations/padrino.rb
appsignal-0.12.beta.48 lib/appsignal/integrations/padrino.rb
appsignal-0.12.beta.47 lib/appsignal/integrations/padrino.rb
appsignal-0.12.beta.46 lib/appsignal/integrations/padrino.rb
appsignal-0.12.beta.45 lib/appsignal/integrations/padrino.rb
appsignal-0.12.beta.44 lib/appsignal/integrations/padrino.rb
appsignal-0.12.beta.43 lib/appsignal/integrations/padrino.rb
appsignal-0.12.beta.42 lib/appsignal/integrations/padrino.rb
appsignal-0.12.beta.41 lib/appsignal/integrations/padrino.rb
appsignal-0.12.beta.40 lib/appsignal/integrations/padrino.rb
appsignal-0.12.beta.39 lib/appsignal/integrations/padrino.rb
appsignal-0.12.beta.38 lib/appsignal/integrations/padrino.rb
appsignal-0.12.beta.37 lib/appsignal/integrations/padrino.rb
appsignal-0.12.beta.36 lib/appsignal/integrations/padrino.rb
appsignal-0.12.beta.35 lib/appsignal/integrations/padrino.rb
appsignal-0.12.beta.34 lib/appsignal/integrations/padrino.rb