class OpenTracing::Instrumentation::Rack::HttpTagger

HttpTagger create addition tags on span

Constants

DEFAULT_TAG_REQUEST_HEADERS
DEFAULT_TAG_RESPONSE_HEADERS

Public Class Methods

new( tag_request_headers: DEFAULT_TAG_REQUEST_HEADERS, tag_response_headers: DEFAULT_TAG_RESPONSE_HEADERS ) click to toggle source
# File lib/opentracing/instrumentation/rack/http_tagger.rb, line 22
def initialize(
  tag_request_headers: DEFAULT_TAG_REQUEST_HEADERS,
  tag_response_headers: DEFAULT_TAG_RESPONSE_HEADERS
)
  @tag_request_headers =
    prepare_request_mapping(tag_request_headers)
  @tag_response_headers =
    prepare_response_mapping(tag_response_headers)
end

Public Instance Methods

request_tags(env) click to toggle source
# File lib/opentracing/instrumentation/rack/http_tagger.rb, line 32
def request_tags(env)
  @tag_request_headers
    .transform_values { |header_name| env[header_name] }
    .compact
end
response_tags(headers) click to toggle source
# File lib/opentracing/instrumentation/rack/http_tagger.rb, line 38
def response_tags(headers)
  header_mapper = lambda do |header_regexp|
    headers.find do |(header, _value)|
      header_regexp.match?(header)
    end&.dig(1)
  end
  @tag_response_headers
    .transform_values(&header_mapper)
    .compact
end

Private Instance Methods

prepare_request_mapping(source_mapping) click to toggle source
# File lib/opentracing/instrumentation/rack/http_tagger.rb, line 51
def prepare_request_mapping(source_mapping)
  source_mapping.map do |key, header|
    rack_header = "HTTP_#{header.tr('-', '_').upcase}"
    tag_name = "http.request.#{key}"
    [tag_name, rack_header]
  end.to_h
end
prepare_response_mapping(source_mapping) click to toggle source
# File lib/opentracing/instrumentation/rack/http_tagger.rb, line 59
def prepare_response_mapping(source_mapping)
  source_mapping.map do |key, header|
    tag_name = "http.response.#{key}"
    header_regexp = /^#{header}$/i
    [tag_name, header_regexp]
  end.to_h
end