class OneApm::Rack::MiddlewareWrapper

Attributes

category[R]
target[R]
transaction_options[R]

Public Class Methods

is_sinatra_app?(target) click to toggle source
# File lib/one_apm/rack/middleware_wrapper.rb, line 30
def is_sinatra_app?(target)
  defined?(::Sinatra::Base) && target.kind_of?(::Sinatra::Base)
end
needs_wrapping?(target) click to toggle source
# File lib/one_apm/rack/middleware_wrapper.rb, line 38
def needs_wrapping?(target)
  !target.respond_to?(:_oa_has_middleware_tracing) &&
  !is_sinatra_app?(target)
end
new(target, is_app = false) click to toggle source
# File lib/one_apm/rack/middleware_wrapper.rb, line 55
def initialize(target, is_app = false)
  @target               = target
  @is_app               = is_app
  @category             = determine_category
  @target_class_name    = determine_class_name
  @transaction_name     = "#{determine_prefix}#{@target_class_name}/call"
  @transaction_options  = {
    :transaction_name => @transaction_name
  }
end
wrap(target, is_app = false) click to toggle source
# File lib/one_apm/rack/middleware_wrapper.rb, line 43
def wrap(target, is_app = false)
  if needs_wrapping?(target)
    self.new(target, is_app)
  else
    target
  end
end
wrap_class(target_class) click to toggle source
# File lib/one_apm/rack/middleware_wrapper.rb, line 34
def wrap_class(target_class)
  MiddlewareClassWrapper.new(target_class)
end

Public Instance Methods

determine_category() click to toggle source
# File lib/one_apm/rack/middleware_wrapper.rb, line 66
def determine_category
  @is_app ? :rack : :middleware
end
determine_class_name() click to toggle source

In 'normal' usage, the target will be an application instance that responds to call. With Rails, however, the target may be a subclass of Rails::Application that defines a method_missing that proxies call to a singleton instance of the the subclass. We need to ensure that we capture the correct name in both cases.

# File lib/one_apm/rack/middleware_wrapper.rb, line 83
def determine_class_name
  if @target.is_a?(Class)
    @target.name
  else
    @target.class.name
  end
end
determine_prefix() click to toggle source
# File lib/one_apm/rack/middleware_wrapper.rb, line 70
def determine_prefix
  OneApm::TransactionNamer.prefix_for_category(nil, @category)
end
middleware_ignore?() click to toggle source
# File lib/one_apm/rack/middleware_wrapper.rb, line 74
def middleware_ignore?
  defined?(::Rails) && OneApm::Manager.config[:disable_rails_middleware] && @transaction_name =~ /Middleware/
end