class Skylight::Core::Probes::Excon::Middleware

Middleware for Excon that instruments requests

Public Class Methods

new(*) click to toggle source
Calls superclass method
# File lib/skylight/core/probes/excon/middleware.rb, line 11
def initialize(*)
  @requests = {}
  super
end

Public Instance Methods

error_call(datum) click to toggle source
Calls superclass method
# File lib/skylight/core/probes/excon/middleware.rb, line 31
def error_call(datum)
  super
ensure
  end_instrumentation(datum)
end
request_call(datum) click to toggle source

TODO: Review the following:

  • Consider whether a LIFO queue would be sufficient

  • Check that errors can't be called without a request

Calls superclass method
# File lib/skylight/core/probes/excon/middleware.rb, line 20
def request_call(datum)
  begin_instrumentation(datum)
  super
end
response_call(datum) click to toggle source
Calls superclass method
# File lib/skylight/core/probes/excon/middleware.rb, line 25
def response_call(datum)
  super
ensure
  end_instrumentation(datum)
end

Private Instance Methods

begin_instrumentation(datum) click to toggle source
# File lib/skylight/core/probes/excon/middleware.rb, line 39
def begin_instrumentation(datum)
  method = datum[:method].to_s
  scheme = datum[:scheme]
  host   = datum[:host]
  # TODO: Maybe don't show other default ports like 443
  port   = datum[:port] != 80 ? datum[:port] : nil
  path   = datum[:path]
  query  = datum[:query]

  opts = Formatters::HTTP.build_opts(method, scheme, host, port, path, query)

  @requests[datum.object_id] = Skylight::Core::Fanout.instrument(opts)
rescue Exception => e
  error "failed to begin instrumentation for Excon; msg=%s", e.message
end
end_instrumentation(datum) click to toggle source
# File lib/skylight/core/probes/excon/middleware.rb, line 55
def end_instrumentation(datum)
  if (request = @requests.delete(datum.object_id))
    meta = {}
    if datum[:error].is_a?(Exception)
      meta[:exception_object] = datum[:error]
    end
    Skylight::Core::Fanout.done(request, meta)
  end
rescue Exception => e
  error "failed to end instrumentation for Excon; msg=%s", e.message
end