Sha256: 4aebdceebea88c21bce5d8d4e24e885f888978df6766f50934282c5b42e8951d

Contents?: true

Size: 1.33 KB

Versions: 2

Compression:

Stored size: 1.33 KB

Contents

# frozen_string_literal: true

# Copyright The OpenTelemetry Authors
#
# SPDX-License-Identifier: Apache-2.0

module OpenTelemetry
  class Context
    module Propagation
      # The RackEnvGetter class provides a common methods for reading
      # keys from a rack environment. It abstracts away the rack-normalization
      # process so that keys can be looked up without having to transform them
      # first. With this class you can get +traceparent+ instead of
      # +HTTP_TRACEPARENT+
      class RackEnvGetter
        # Converts key into a rack-normalized key and reads it from the carrier.
        # Useful for extract operations.
        def get(carrier, key)
          carrier[to_rack_key(key)]
        end

        # Reads all keys from a carrier and converts them from the rack-normalized
        # form to the original. The resulting keys will be lowercase and
        # underscores will be replaced with dashes.
        def keys(carrier)
          carrier.keys.map(&method(:from_rack_key))
        end

        private

        def to_rack_key(key)
          ret = 'HTTP_' + key
          ret.tr!('-', '_')
          ret.upcase!
        end

        def from_rack_key(key)
          start = key.start_with?('HTTP_') ? 5 : 0
          ret = key[start..-1]
          ret.tr!('_', '-')
          ret.downcase!
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
opentelemetry-api-0.15.0 lib/opentelemetry/context/propagation/rack_env_getter.rb
opentelemetry-api-0.14.0 lib/opentelemetry/context/propagation/rack_env_getter.rb