class Elasticsearch::Transport::Transport::HTTP::Manticore
Alternative HTTP
transport implementation for JRuby, using the [Manticore](github.com/cheald/manticore) client,
@example HTTP
require 'elasticsearch/transport/transport/http/manticore' client = Elasticsearch::Client.new transport_class: Elasticsearch::Transport::Transport::HTTP::Manticore client.transport.connections.first.connection => #<Manticore::Client:0x56bf7ca6 ...> client.info['status'] => 200 @example HTTPS (All SSL settings are optional, see http://www.rubydoc.info/gems/manticore/Manticore/Client:initialize) require 'elasticsearch/transport/transport/http/manticore' client = Elasticsearch::Client.new \ url: 'https://elasticsearch.example.com', transport_class: Elasticsearch::Transport::Transport::HTTP::Manticore, ssl: { truststore: '/tmp/truststore.jks', truststore_password: 'password', keystore: '/tmp/keystore.jks', keystore_password: 'secret', } client.transport.connections.first.connection => #<Manticore::Client:0xdeadbeef ...> client.info['status'] => 200
@see Transport::Base
Public Class Methods
new(arguments = {}, &block)
click to toggle source
Calls superclass method
Elasticsearch::Transport::Transport::Base::new
# File lib/elasticsearch/transport/transport/http/manticore.rb, line 65 def initialize(arguments = {}, &block) @request_options = { headers: ( arguments.dig(:transport_options, :headers) || arguments.dig(:options, :transport_options, :headers) || {} ) } @manticore = build_client(arguments[:options] || {}) super(arguments, &block) end
Public Instance Methods
__build_connections()
click to toggle source
Builds and returns a collection of connections. Each connection is a Manticore::Client
@return [Connections::Collection]
# File lib/elasticsearch/transport/transport/http/manticore.rb, line 120 def __build_connections apply_headers(options) Connections::Collection.new( connections: hosts.map do |host| host[:protocol] = host[:scheme] || DEFAULT_PROTOCOL host[:port] ||= DEFAULT_PORT host.delete(:user) # auth is not supported here. host.delete(:password) # use the headers Connections::Connection.new(host: host, connection: @manticore) end, selector_class: options[:selector_class], selector: options[:selector] ) end
__close_connections()
click to toggle source
Closes all connections by marking them as dead and closing the underlying HttpClient instances
@return [Connections::Collection]
# File lib/elasticsearch/transport/transport/http/manticore.rb, line 143 def __close_connections # The Manticore adapter uses a single long-lived instance # of Manticore::Client, so we don't close the connections. end
build_client(options = {})
click to toggle source
Should just be run once at startup
# File lib/elasticsearch/transport/transport/http/manticore.rb, line 78 def build_client(options = {}) client_options = options[:transport_options] || {} client_options[:ssl] = options[:ssl] || {} @manticore = ::Manticore::Client.new(client_options) end
host_unreachable_exceptions()
click to toggle source
Returns an array of implementation specific connection errors.
@return [Array]
# File lib/elasticsearch/transport/transport/http/manticore.rb, line 152 def host_unreachable_exceptions [ ::Manticore::Timeout, ::Manticore::SocketException, ::Manticore::ClientProtocolException, ::Manticore::ResolutionFailure ] end
perform_request(method, path, params = {}, body = nil, headers = nil, opts = {})
click to toggle source
Performs the request by invoking {Transport::Base#perform_request} with a block.
@return [Response] @see Transport::Base#perform_request
Calls superclass method
Elasticsearch::Transport::Transport::Base#perform_request
# File lib/elasticsearch/transport/transport/http/manticore.rb, line 90 def perform_request(method, path, params = {}, body = nil, headers = nil, opts = {}) super do |connection, url| body = body ? __convert_to_json(body) : nil body, headers = compress_request(body, parse_headers(headers)) params[:body] = body if body params[:headers] = headers if headers case method when 'GET' resp = connection.connection.get(url, params) when 'HEAD' resp = connection.connection.head(url, params) when 'PUT' resp = connection.connection.put(url, params) when 'POST' resp = connection.connection.post(url, params) when 'DELETE' resp = connection.connection.delete(url, params) else raise ArgumentError.new "Method #{method} not supported" end Response.new(resp.code, resp.read_body, resp.headers) end end
Private Instance Methods
apply_headers(options)
click to toggle source
# File lib/elasticsearch/transport/transport/http/manticore.rb, line 169 def apply_headers(options) headers = options[:headers].clone || options.dig(:transport_options, :headers).clone || {} headers[CONTENT_TYPE_STR] = find_value(headers, CONTENT_TYPE_REGEX) || DEFAULT_CONTENT_TYPE headers[USER_AGENT_STR] = find_value(headers, USER_AGENT_REGEX) || find_value(@request_options[:headers], USER_AGENT_REGEX) || user_agent_header headers[ACCEPT_ENCODING] = GZIP if use_compression? @request_options[:headers].merge!(headers) end
parse_headers(headers)
click to toggle source
# File lib/elasticsearch/transport/transport/http/manticore.rb, line 163 def parse_headers(headers) request_headers = @request_options.fetch(:headers, {}) headers = request_headers.merge(headers || {}) headers.empty? ? nil : headers end
user_agent_header()
click to toggle source
# File lib/elasticsearch/transport/transport/http/manticore.rb, line 177 def user_agent_header @user_agent_header ||= begin meta = ["RUBY_VERSION: #{JRUBY_VERSION}"] if RbConfig::CONFIG && RbConfig::CONFIG['host_os'] meta << "#{RbConfig::CONFIG['host_os'].split('_').first[/[a-z]+/i].downcase} #{RbConfig::CONFIG['target_cpu']}" end meta << "Manticore #{::Manticore::VERSION}" "elasticsearch-ruby/#{VERSION} (#{meta.join('; ')})" end end