class Spokes::Middleware::RequestID

Constants

PATTERN

Public Class Methods

new(app, service_name:) click to toggle source
# File lib/spokes/middleware/request_id.rb, line 6
def initialize(app, service_name:)
  raise "invalid name: #{service_name}" unless service_name =~ PATTERN

  @app          = app
  @service_name = service_name
end

Public Instance Methods

call(env) click to toggle source
# File lib/spokes/middleware/request_id.rb, line 13
def call(env)
  id = env['action_dispatch.request_id'] || SecureRandom.uuid
  request_ids = extract_request_ids(env).insert(0, @service_name + ':' + id)

  # make ID of the request accessible to consumers down the stack
  env['REQUEST_ID'] = request_ids[0]

  # Extract request IDs from incoming headers as well. Can be used for
  # identifying a request across a number of components in SOA.
  env['REQUEST_IDS'] = request_ids

  Thread.current[:request_chain] = env['REQUEST_IDS']

  @app.call(env)
end

Private Instance Methods

extract_request_ids(env) click to toggle source
# File lib/spokes/middleware/request_id.rb, line 31
def extract_request_ids(env)
  request_ids = raw_request_ids(env)
  request_ids.map!(&:strip)
  request_ids
end
raw_request_ids(_env) click to toggle source
# File lib/spokes/middleware/request_id.rb, line 37
def raw_request_ids(_env)
  %w[HTTP_REQUEST_CHAIN].each_with_object([]) do |key, _request_ids|
  end
end