Module: Oboe::Inst::TyphoeusRequestOps

Defined in:
lib/oboe/inst/typhoeus.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



5
6
7
# File 'lib/oboe/inst/typhoeus.rb', line 5

def self.included(klass)
  ::Oboe::Util.method_alias(klass, :run, ::Typhoeus::Request::Operations)
end

Instance Method Details

#run_with_oboeObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/oboe/inst/typhoeus.rb', line 9

def run_with_oboe
  return run_without_oboe unless Oboe.tracing?

  Oboe::API.log_entry('typhoeus')

  # Prepare X-Trace header handling
  blacklisted = Oboe::API.blacklisted?(url)
  context = Oboe::Context.toString
  task_id = Oboe::XTrace.task_id(context)
  options[:headers]['X-Trace'] = context unless blacklisted

  response = run_without_oboe

  if response.code == 0
    Oboe::API.log('typhoeus', 'error', { :ErrorClass => response.return_code,
                                         :ErrorMsg => response.return_message })
  end

  kvs = {}
  kvs[:HTTPStatus] = response.code
  kvs['Backtrace'] = Oboe::API.backtrace if Oboe::Config[:typhoeus][:collect_backtraces]

  uri = URI(response.effective_url)
  kvs['IsService'] = 1
  kvs['RemoteProtocol'] = uri.scheme
  kvs['RemoteHost'] = uri.host
  kvs['RemotePort'] = uri.port ? uri.port : 80
  kvs['ServiceArg'] = uri.path
  kvs['HTTPMethod'] = options[:method]
  kvs['Blacklisted'] = true if blacklisted

  # Re-attach net::http edge unless it's blacklisted or if we don't have a
  # valid X-Trace header
  unless blacklisted
    xtrace = response.headers['X-Trace']

    if xtrace && Oboe::XTrace.valid?(xtrace) && Oboe.tracing?

      # Assure that we received back a valid X-Trace with the same task_id
      if task_id == Oboe::XTrace.task_id(xtrace)
        Oboe::Context.fromString(xtrace)
      else
        Oboe.logger.debug "Mismatched returned X-Trace ID: #{xtrace}"
      end
    end
  end

  Oboe::API.log('typhoeus', 'info', kvs)
  response
rescue => e
  Oboe::API.log_exception('typhoeus', e)
  raise e
ensure
  Oboe::API.log_exit('typhoeus')
end