Sha256: 2faa5d0594e20ccfea0225d59171ffbca88a3b35094aa56280bc4b406cf26632

Contents?: true

Size: 1.95 KB

Versions: 1

Compression:

Stored size: 1.95 KB

Contents

# Copyright (c) 2012 by Tracelytics, Inc.
# All rights reserved.

module Oboe
  class Rack
    attr_reader :app

    def initialize(app)
      @app = app
    end

    def call(env)
      report_kvs = {}
      xtrace = nil

      begin
        xtrace = env['HTTP_X_TRACE'] if env.is_a?(Hash)
        
        req = ::Rack::Request.new(env)
        report_kvs[:SampleRate]        = Oboe::Config[:sample_rate]
        report_kvs[:SampleSource]      = Oboe::Config[:sample_source]
        report_kvs['HTTP-Host']        = req.host
        report_kvs['Port']             = req.port
        report_kvs['Proto']            = req.scheme
        report_kvs['Query-String']     = req.query_string unless req.query_string.blank?
        report_kvs[:URL]               = req.path
        report_kvs[:Method]            = req.request_method
        report_kvs['AJAX']             = true if req.xhr?
        report_kvs['ClientIP']         = req.ip

        report_kvs['TV-Meta']          = env['HTTP_X_TV_META']          if env.has_key?('HTTP_X_TV_META')
        report_kvs['Forwarded-For']    = env['HTTP_X_FORWARDED_FOR']    if env.has_key?('HTTP_X_FORWARDED_FOR')
        report_kvs['Forwarded-Host']   = env['HTTP_X_FORWARDED_HOST']   if env.has_key?('HTTP_X_FORWARDED_HOST')
        report_kvs['Forwarded-Proto']  = env['HTTP_X_FORWARDED_PROTO']  if env.has_key?('HTTP_X_FORWARDED_PROTO')
        report_kvs['Forwarded-Port']   = env['HTTP_X_FORWARDED_PORT']   if env.has_key?('HTTP_X_FORWARDED_PORT')
      rescue
        # Discard any potential exceptions. Report whatever we can.
      end

      result, xtrace = Oboe::API.start_trace('rack', xtrace, report_kvs) do

        status, headers, response = @app.call(env)
        Oboe::API.log(nil, 'info', { :Status => status })

        [status, headers, response]
      end
    rescue Exception => e
      xtrace = e.instance_variable_get(:@xtrace)
      raise
    ensure
      result[1]['X-Trace'] = xtrace if xtrace
      return result
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
oboe-2.2.5 lib/oboe/inst/rack.rb