Sha256: b99aeada41481113599630b6723020f3ae278ccae837d03a0b4d8f8a45c2f7e6

Contents?: true

Size: 1.28 KB

Versions: 17

Compression:

Stored size: 1.28 KB

Contents

# frozen_string_literal: true

require 'rack'

module OpenTracing
  module Instrumentation
    module Rack
      # UrlCommandNameBuilder build command name with request url
      class UrlCommandNameBuilder
        DEFAULT_COMMAND_PATTERN = \
          'rack(%<method>s %<schema>s://%<host>s%<path>s)'

        def initialize(
          command_pattern: DEFAULT_COMMAND_PATTERN,
          host_sanitazer: RegexpHostSanitazer.new,
          path_sanitazer: RegexpPathSanitazer.new
        )
          @command_pattern = command_pattern
          @host_sanitazer = host_sanitazer
          @path_sanitazer = path_sanitazer
        end

        def build_command_name(env)
          format(@command_pattern, pattern_args(env))
        end

        private

        def pattern_args(env)
          path = env[::Rack::REQUEST_PATH]
          sanitazed_path = @path_sanitazer.sanitaze_path(path)
          {
            schema: env[::Rack::RACK_URL_SCHEME],
            method: env[::Rack::REQUEST_METHOD],
            host: sanitaze_host(env[::Rack::HTTP_HOST]),
            port: env[::Rack::HTTP_PORT],
            path: sanitazed_path,
          }
        end

        def sanitaze_host(host)
          return if host.nil?

          @host_sanitazer.sanitaze_host(host)
        end
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
opentracing-instrumentation-0.2.1 lib/opentracing/instrumentation/rack/url_command_name_builder.rb
opentracing-instrumentation-0.2.0 lib/opentracing/instrumentation/rack/url_command_name_builder.rb
opentracing-instrumentation-0.1.18 lib/opentracing/instrumentation/rack/url_command_name_builder.rb
opentracing-instrumentation-0.1.17 lib/opentracing/instrumentation/rack/url_command_name_builder.rb
opentracing-instrumentation-0.1.16 lib/opentracing/instrumentation/rack/url_command_name_builder.rb
opentracing-instrumentation-0.1.15 lib/opentracing/instrumentation/rack/url_command_name_builder.rb
opentracing-instrumentation-0.1.14 lib/opentracing/instrumentation/rack/url_command_name_builder.rb
opentracing-instrumentation-0.1.13 lib/opentracing/instrumentation/rack/url_command_name_builder.rb
opentracing-instrumentation-0.1.12 lib/opentracing/instrumentation/rack/url_command_name_builder.rb
opentracing-instrumentation-0.1.11 lib/opentracing/instrumentation/rack/url_command_name_builder.rb
opentracing-instrumentation-0.1.10 lib/opentracing/instrumentation/rack/url_command_name_builder.rb
opentracing-instrumentation-0.1.9 lib/opentracing/instrumentation/rack/url_command_name_builder.rb
opentracing-instrumentation-0.1.8 lib/opentracing/instrumentation/rack/url_command_name_builder.rb
opentracing-instrumentation-0.1.7 lib/opentracing/instrumentation/rack/url_command_name_builder.rb
opentracing-instrumentation-0.1.6 lib/opentracing/instrumentation/rack/url_command_name_builder.rb
opentracing-instrumentation-0.1.5 lib/opentracing/instrumentation/rack/url_command_name_builder.rb
opentracing-instrumentation-0.1.4 lib/opentracing/instrumentation/rack/url_command_name_builder.rb