Sha256: dccc4dcaee923932bf50406d68b615f9f579da0e4b7ffe385edeff266bcdb615

Contents?: true

Size: 1.81 KB

Versions: 7

Compression:

Stored size: 1.81 KB

Contents

require 'net/http'
require 'ddtrace/transport/http/adapters/net'

module Datadog
  module Transport
    module HTTP
      module Adapters
        # Adapter for Unix sockets
        class UnixSocket < Adapters::Net
          DEFAULT_TIMEOUT = 1

          attr_reader \
            :filepath,
            :timeout

          def initialize(filepath, options = {})
            @filepath = filepath
            @timeout = options.fetch(:timeout, DEFAULT_TIMEOUT)
          end

          def open(&block)
            # Open connection
            connection = HTTP.new(
              filepath,
              read_timeout: timeout,
              continue_timeout: timeout
            )

            connection.start(&block)
          end

          def url
            "http+unix://#{filepath}?timeout=#{timeout}"
          end

          # Re-implements Net:HTTP with underlying Unix socket
          class HTTP < ::Net::HTTP
            DEFAULT_TIMEOUT = 1

            attr_reader \
              :filepath,
              :unix_socket

            def initialize(filepath, options = {})
              super('localhost', 80)
              @filepath = filepath
              @read_timeout = options.fetch(:read_timeout, DEFAULT_TIMEOUT)
              @continue_timeout = options.fetch(:continue_timeout, DEFAULT_TIMEOUT)
              @debug_output = options[:debug_output] if options.key?(:debug_output)
            end

            def connect
              @unix_socket = UNIXSocket.open(filepath)
              @socket = ::Net::BufferedIO.new(@unix_socket).tap do |socket|
                socket.read_timeout = @read_timeout
                socket.continue_timeout = @continue_timeout
                socket.debug_output = @debug_output
              end
              on_connect
            end
          end
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
ddtrace-0.51.1 lib/ddtrace/transport/http/adapters/unix_socket.rb
ddtrace-0.51.0 lib/ddtrace/transport/http/adapters/unix_socket.rb
ddtrace-0.50.0 lib/ddtrace/transport/http/adapters/unix_socket.rb
ddtrace-0.49.0 lib/ddtrace/transport/http/adapters/unix_socket.rb
ddtrace-0.48.0 lib/ddtrace/transport/http/adapters/unix_socket.rb
ddtrace-0.47.0 lib/ddtrace/transport/http/adapters/unix_socket.rb
ddtrace-0.46.0 lib/ddtrace/transport/http/adapters/unix_socket.rb