Class: LogStash::Outputs::ElasticSearch::HttpClient::ManticoreAdapter
- Inherits:
-
Object
- Object
- LogStash::Outputs::ElasticSearch::HttpClient::ManticoreAdapter
- Defined in:
- lib/logstash/outputs/elasticsearch/http_client/manticore_adapter.rb
Instance Attribute Summary collapse
-
#logger ⇒ Object
readonly
Returns the value of attribute logger.
-
#manticore ⇒ Object
readonly
Returns the value of attribute manticore.
Instance Method Summary collapse
- #client ⇒ Object
- #close ⇒ Object
- #format_url(url, path_and_query = nil) ⇒ Object
- #host_unreachable_exceptions ⇒ Object
-
#initialize(logger, options = {}) ⇒ ManticoreAdapter
constructor
A new instance of ManticoreAdapter.
-
#manticore_proxy_hash(proxy_uri) ⇒ Object
Transform the proxy option to a hash.
-
#perform_request(url, method, path, params = {}, body = nil) ⇒ Response
Performs the request by invoking Transport::Base#perform_request with a block.
Constructor Details
#initialize(logger, options = {}) ⇒ ManticoreAdapter
Returns a new instance of ManticoreAdapter.
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/logstash/outputs/elasticsearch/http_client/manticore_adapter.rb', line 10 def initialize(logger, ={}) @logger = logger = .clone || {} [:ssl] = [:ssl] || {} # We manage our own retries directly, so let's disable them here [:automatic_retries] = 0 # We definitely don't need cookies [:cookies] = false @client_params = {:headers => DEFAULT_HEADERS.merge([:headers] || {})} if [:proxy] [:proxy] = manticore_proxy_hash([:proxy]) end @manticore = ::Manticore::Client.new() end |
Instance Attribute Details
#logger ⇒ Object (readonly)
Returns the value of attribute logger.
8 9 10 |
# File 'lib/logstash/outputs/elasticsearch/http_client/manticore_adapter.rb', line 8 def logger @logger end |
#manticore ⇒ Object (readonly)
Returns the value of attribute manticore.
8 9 10 |
# File 'lib/logstash/outputs/elasticsearch/http_client/manticore_adapter.rb', line 8 def manticore @manticore end |
Instance Method Details
#client ⇒ Object
40 41 42 |
# File 'lib/logstash/outputs/elasticsearch/http_client/manticore_adapter.rb', line 40 def client @manticore end |
#close ⇒ Object
112 113 114 |
# File 'lib/logstash/outputs/elasticsearch/http_client/manticore_adapter.rb', line 112 def close @manticore.close end |
#format_url(url, path_and_query = nil) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/logstash/outputs/elasticsearch/http_client/manticore_adapter.rb', line 86 def format_url(url, path_and_query=nil) request_uri = url.clone # We excise auth info from the URL in case manticore itself tries to stick # sensitive data in a thrown exception or log data request_uri.user = nil request_uri.password = nil return request_uri.to_s if path_and_query.nil? parsed_path_and_query = java.net.URI.new(path_and_query) query = request_uri.query parsed_query = parsed_path_and_query.query new_query_parts = [request_uri.query, parsed_path_and_query.query].select do |part| part && !part.empty? # Skip empty nil and "" end request_uri.query = new_query_parts.join("&") unless new_query_parts.empty? request_uri.path = "#{request_uri.path}/#{parsed_path_and_query.path}".gsub(/\/{2,}/, "/") request_uri end |
#host_unreachable_exceptions ⇒ Object
116 117 118 |
# File 'lib/logstash/outputs/elasticsearch/http_client/manticore_adapter.rb', line 116 def host_unreachable_exceptions [::Manticore::Timeout,::Manticore::SocketException, ::Manticore::ClientProtocolException, ::Manticore::ResolutionFailure, Manticore::SocketTimeout] end |
#manticore_proxy_hash(proxy_uri) ⇒ Object
Transform the proxy option to a hash. Manticore’s support for non-hash proxy options is broken. This was fixed in github.com/cheald/manticore/commit/34a00cee57a56148629ed0a47c329181e7319af5 but this is not yet released
32 33 34 35 36 37 38 |
# File 'lib/logstash/outputs/elasticsearch/http_client/manticore_adapter.rb', line 32 def manticore_proxy_hash(proxy_uri) [:scheme, :port, :user, :password, :path].reduce(:host => proxy_uri.host) do |acc,opt| value = proxy_uri.send(opt) acc[opt] = value unless value.nil? || (value.is_a?(String) && value.empty?) acc end end |
#perform_request(url, method, path, params = {}, body = nil) ⇒ Response
Performs the request by invoking Transport::Base#perform_request with a block.
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/logstash/outputs/elasticsearch/http_client/manticore_adapter.rb', line 49 def perform_request(url, method, path, params={}, body=nil) # Perform 2-level deep merge on the params, so if the passed params and client params will both have hashes stored on a key they # will be merged as well, instead of choosing just one of the values params = (params || {}).merge(@client_params) { |key, oldval, newval| (oldval.is_a?(Hash) && newval.is_a?(Hash)) ? oldval.merge(newval) : newval } params[:body] = body if body if url.user params[:auth] = { :user => CGI.unescape(url.user), # We have to unescape the password here since manticore won't do it # for us unless its part of the URL :password => CGI.unescape(url.password), :eager => true } end request_uri = format_url(url, path) resp = @manticore.send(method.downcase, request_uri.to_s, params) # Manticore returns lazy responses by default # We want to block for our usage, this will wait for the repsonse # to finish resp.call # 404s are excluded because they are valid codes in the case of # template installation. We might need a better story around this later # but for our current purposes this is correct if resp.code < 200 || resp.code > 299 && resp.code != 404 raise ::LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError.new(resp.code, request_uri, body, resp.body) end resp end |