class StackifyRubyAPM::ContextBuilder

@api private

Public Class Methods

new(_agent) click to toggle source
# File lib/stackify_apm/context_builder.rb, line 9
def initialize(_agent); end

Public Instance Methods

build(rack_env) click to toggle source

Creates context

# File lib/stackify_apm/context_builder.rb, line 13
def build(rack_env)
  context = Context.new
  apply_to_request(context, rack_env)
  context
end

Private Instance Methods

apply_to_request(context, rack_env) click to toggle source

Request format and values are assigned to context

# File lib/stackify_apm/context_builder.rb, line 23
def apply_to_request(context, rack_env)
  req = rails_req?(rack_env) ? rack_env : Rack::Request.new(rack_env)
  context.request = Context::Request.new unless context.request
  request = context.request
  request.method = req.request_method
  request.url = Context::Request::Url.new(req).to_h
  request.body = get_body(req)
  request.headers = Context::Request::Headers.new(req).values

  context
end
get_body(req) click to toggle source
# File lib/stackify_apm/context_builder.rb, line 35
def get_body(req)
  return req.POST if req.form_data?

  body = req.body.read
  req.body.rewind
  body
end
rails_req?(env) click to toggle source
# File lib/stackify_apm/context_builder.rb, line 43
def rails_req?(env)
  # Not used
  # Possible use of ActiveSupport.on_load(:action_dispatch_request)
  defined?(ActionDispatch::Request) &&
    env.is_a?(ActionDispatch::Request)
end