Class: Elastic::Transport::Transport::HTTP::Faraday

Inherits:
Object
  • Object
show all
Includes:
Base
Defined in:
lib/elastic/transport/transport/http/faraday.rb

Overview

The default transport implementation, using the [Faraday](rubygems.org/gems/faraday) library for abstracting the HTTP client.

See Also:

Constant Summary

Constants included from Base

Base::DEFAULT_MAX_RETRIES, Base::DEFAULT_PORT, Base::DEFAULT_PROTOCOL, Base::DEFAULT_RELOAD_AFTER, Base::DEFAULT_RESURRECT_AFTER, Base::DEFAULT_SERIALIZER_CLASS, Base::SANITIZED_PASSWORD

Instance Attribute Summary

Attributes included from Base

#connections, #counter, #hosts, #last_request_at, #logger, #options, #protocol, #reload_after, #reload_connections, #resurrect_after, #serializer, #sniffer, #tracer

Instance Method Summary collapse

Methods included from Base

#__build_connections, #__close_connections, #__connections_from_host, #__convert_to_json, #__full_url, #__log_response, #__raise_transport_error, #__rebuild_connections, #__trace, #get_connection, #initialize, #reload_connections!, #resurrect_dead_connections!

Methods included from Loggable

#log_debug, #log_error, #log_fatal, #log_info, #log_warn

Instance Method Details

#__build_connection(host, options = {}, block = nil) ⇒ Connections::Connection

Builds and returns a connection



66
67
68
69
70
# File 'lib/elastic/transport/transport/http/faraday.rb', line 66

def __build_connection(host, options={}, block=nil)
  client = ::Faraday.new(__full_url(host), options, &block)
  apply_headers(client, options)
  Connections::Connection.new(host: host, connection: client)
end

#host_unreachable_exceptionsArray

Returns an array of implementation specific connection errors.

Returns:

  • (Array)


76
77
78
79
80
81
82
83
# File 'lib/elastic/transport/transport/http/faraday.rb', line 76

def host_unreachable_exceptions
  [
    ::Faraday::ConnectionFailed,
    ::Faraday::TimeoutError,
    ::Faraday.const_defined?(:ServerError) ? ::Faraday::ServerError : nil,
    ::Faraday::SSLError
  ].compact
end

#parse_headers(headers, connection) ⇒ Object

Merges headers already present in the connection and the ones passed in to perform_request



50
51
52
53
54
55
56
57
58
59
60
# File 'lib/elastic/transport/transport/http/faraday.rb', line 50

def parse_headers(headers, connection)
  if connection.connection.headers
    if !headers.nil?
      connection.connection.headers.merge(headers)
    else
      connection.connection.headers
    end
  else
    headers
  end
end

#perform_request(method, path, params = {}, body = nil, headers = nil, opts = {}) ⇒ Response

Performs the request by invoking Base#perform_request with a block.

Returns:

See Also:



35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/elastic/transport/transport/http/faraday.rb', line 35

def perform_request(method, path, params = {}, body = nil, headers = nil, opts = {})
  super do |connection, url|
    capture_otel_span_attributes(connection, url)
    headers = parse_headers(headers, connection)
    body = body ? __convert_to_json(body) : nil
    body, headers = compress_request(body, headers)

    response = connection.connection.run_request(method.downcase.to_sym, url, body, headers)

    Response.new(response.status, decompress_response(response.body), response.headers)
  end
end