elasticsearch-transport 1.0.15 → 1.0.16.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +3 -3
- data/README.md +0 -1
- data/elasticsearch-transport.gemspec +2 -2
- data/lib/elasticsearch/transport/transport/base.rb +12 -6
- data/lib/elasticsearch/transport/transport/connections/connection.rb +1 -0
- data/lib/elasticsearch/transport/transport/connections/selector.rb +1 -1
- data/lib/elasticsearch/transport/transport/http/curb.rb +1 -1
- data/lib/elasticsearch/transport/transport/http/manticore.rb +14 -6
- data/lib/elasticsearch/transport/version.rb +1 -1
- data/test/unit/transport_base_test.rb +22 -0
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9ed68a35342a6cb66f67c6bd8de44bbb21a4eea6
|
4
|
+
data.tar.gz: 8e7cb53702e1103a44555a3d6364aec3c759b2b4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4927b38e7a37068ed3893fd4441e052d6c49cb8f5bbeb346400a5dd5fb58e75a6a31a1b7aae368e580bf63f20624ff4fcb9ede1db950feaeef954eabdd3f0707
|
7
|
+
data.tar.gz: fb1bd274b0d768529d453efa5b27194c61ff00b214c642818c9cb890ea2ca772772ec47e7cc04f8c5fc9a99222f8f25825d38b72bed1d91d8185d7aba5847f1e
|
data/Gemfile
CHANGED
@@ -3,14 +3,14 @@ source 'https://rubygems.org'
|
|
3
3
|
# Specify your gem's dependencies in elasticsearch-transport.gemspec
|
4
4
|
gemspec
|
5
5
|
|
6
|
-
if File.
|
6
|
+
if File.exist? File.expand_path("../../elasticsearch-api/elasticsearch-api.gemspec", __FILE__)
|
7
7
|
gem 'elasticsearch-api', :path => File.expand_path("../../elasticsearch-api", __FILE__), :require => false
|
8
8
|
end
|
9
9
|
|
10
|
-
if File.
|
10
|
+
if File.exist? File.expand_path("../../elasticsearch-extensions", __FILE__)
|
11
11
|
gem 'elasticsearch-extensions', :path => File.expand_path("../../elasticsearch-extensions", __FILE__), :require => false
|
12
12
|
end
|
13
13
|
|
14
|
-
if File.
|
14
|
+
if File.exist? File.expand_path("../../elasticsearch/elasticsearch.gemspec", __FILE__)
|
15
15
|
gem 'elasticsearch', :path => File.expand_path("../../elasticsearch", __FILE__), :require => false
|
16
16
|
end
|
data/README.md
CHANGED
@@ -295,7 +295,6 @@ To configure the _Faraday_ instance directly, use a block:
|
|
295
295
|
You can use any standard Faraday middleware and plugins in the configuration block,
|
296
296
|
for example sign the requests for the [AWS Elasticsearch service](https://aws.amazon.com/elasticsearch-service/):
|
297
297
|
|
298
|
-
require 'patron'
|
299
298
|
require 'faraday_middleware/aws_signers_v4'
|
300
299
|
|
301
300
|
client = Elasticsearch::Client.new url: 'https://search-my-cluster-abc123....es.amazonaws.com' do |f|
|
@@ -28,7 +28,7 @@ Gem::Specification.new do |s|
|
|
28
28
|
end
|
29
29
|
|
30
30
|
s.add_development_dependency "bundler", "> 1"
|
31
|
-
s.add_development_dependency "rake"
|
31
|
+
s.add_development_dependency "rake", "< 11.0"
|
32
32
|
|
33
33
|
if defined?(RUBY_VERSION) && RUBY_VERSION > '1.9'
|
34
34
|
s.add_development_dependency "elasticsearch-extensions"
|
@@ -47,7 +47,7 @@ Gem::Specification.new do |s|
|
|
47
47
|
s.add_development_dependency "patron" unless defined? JRUBY_VERSION
|
48
48
|
s.add_development_dependency "typhoeus", '~> 0.6'
|
49
49
|
s.add_development_dependency "net-http-persistent"
|
50
|
-
s.add_development_dependency "manticore", '~> 0.
|
50
|
+
s.add_development_dependency "manticore", '~> 0.5.2' if defined? JRUBY_VERSION
|
51
51
|
s.add_development_dependency "hashie"
|
52
52
|
|
53
53
|
# Prevent unit test failures on Ruby 1.8
|
@@ -11,6 +11,7 @@ module Elasticsearch
|
|
11
11
|
DEFAULT_RESURRECT_AFTER = 60 # Seconds
|
12
12
|
DEFAULT_MAX_RETRIES = 3 # Requests
|
13
13
|
DEFAULT_SERIALIZER_CLASS = Serializer::MultiJson
|
14
|
+
SANITIZED_PASSWORD = '*'*rand(15)
|
14
15
|
|
15
16
|
attr_reader :hosts, :options, :connections, :counter, :last_request_at, :protocol
|
16
17
|
attr_accessor :serializer, :sniffer, :logger, :tracer,
|
@@ -28,6 +29,8 @@ module Elasticsearch
|
|
28
29
|
# @see Client#initialize
|
29
30
|
#
|
30
31
|
def initialize(arguments={}, &block)
|
32
|
+
@state_mutex = Mutex.new
|
33
|
+
|
31
34
|
@hosts = arguments[:hosts] || []
|
32
35
|
@options = arguments[:options] || {}
|
33
36
|
@block = block
|
@@ -94,10 +97,12 @@ module Elasticsearch
|
|
94
97
|
# @api private
|
95
98
|
#
|
96
99
|
def __rebuild_connections(arguments={})
|
97
|
-
@
|
98
|
-
|
99
|
-
|
100
|
-
|
100
|
+
@state_mutex.synchronize do
|
101
|
+
@hosts = arguments[:hosts] || []
|
102
|
+
@options = arguments[:options] || {}
|
103
|
+
__close_connections
|
104
|
+
@connections = __build_connections
|
105
|
+
end
|
101
106
|
end
|
102
107
|
|
103
108
|
# Closes the connections collection.
|
@@ -113,7 +118,8 @@ module Elasticsearch
|
|
113
118
|
# @api private
|
114
119
|
#
|
115
120
|
def __log(method, path, params, body, url, response, json, took, duration)
|
116
|
-
|
121
|
+
sanitized_url = url.to_s.gsub(/\/\/(.+):(.+)@/, '//' + '\1:' + SANITIZED_PASSWORD + '@')
|
122
|
+
logger.info "#{method.to_s.upcase} #{sanitized_url} " +
|
117
123
|
"[status:#{response.status}, request:#{sprintf('%.3fs', duration)}, query:#{took}]"
|
118
124
|
logger.debug "> #{__convert_to_json(body)}" if body
|
119
125
|
logger.debug "< #{response.body}"
|
@@ -160,7 +166,7 @@ module Elasticsearch
|
|
160
166
|
# @api private
|
161
167
|
def __full_url(host)
|
162
168
|
url = "#{host[:protocol]}://"
|
163
|
-
url += "#{host[:user]}:#{host[:password]}@" if host[:user]
|
169
|
+
url += "#{CGI.escape(host[:user])}:#{CGI.escape(host[:password])}@" if host[:user]
|
164
170
|
url += "#{host[:host]}:#{host[:port]}"
|
165
171
|
url += "#{host[:path]}" if host[:path]
|
166
172
|
url
|
@@ -50,7 +50,7 @@ module Elasticsearch
|
|
50
50
|
#
|
51
51
|
def select(options={})
|
52
52
|
# On Ruby 1.9, Array#rotate could be used instead
|
53
|
-
@current = @current.nil? ? 0 : @current+1
|
53
|
+
@current = !defined?(@current) || @current.nil? ? 0 : @current+1
|
54
54
|
@current = 0 if @current >= connections.size
|
55
55
|
connections[@current]
|
56
56
|
end
|
@@ -45,6 +45,19 @@ module Elasticsearch
|
|
45
45
|
class Manticore
|
46
46
|
include Base
|
47
47
|
|
48
|
+
def initialize(arguments={}, &block)
|
49
|
+
@manticore = build_client(arguments[:options] || {})
|
50
|
+
super(arguments, &block)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Should just be run once at startup
|
54
|
+
def build_client(options={})
|
55
|
+
client_options = options[:transport_options] || {}
|
56
|
+
client_options[:ssl] = options[:ssl] || {}
|
57
|
+
|
58
|
+
@manticore = ::Manticore::Client.new(client_options)
|
59
|
+
end
|
60
|
+
|
48
61
|
# Performs the request by invoking {Transport::Base#perform_request} with a block.
|
49
62
|
#
|
50
63
|
# @return [Response]
|
@@ -84,9 +97,6 @@ module Elasticsearch
|
|
84
97
|
@request_options[:headers] = options[:headers]
|
85
98
|
end
|
86
99
|
|
87
|
-
client_options = options[:transport_options] || {}
|
88
|
-
client_options[:ssl] = options[:ssl] || {}
|
89
|
-
|
90
100
|
Connections::Collection.new \
|
91
101
|
:connections => hosts.map { |host|
|
92
102
|
host[:protocol] = host[:scheme] || DEFAULT_PROTOCOL
|
@@ -95,11 +105,9 @@ module Elasticsearch
|
|
95
105
|
host.delete(:user) # auth is not supported here.
|
96
106
|
host.delete(:password) # use the headers
|
97
107
|
|
98
|
-
url = __full_url(host)
|
99
|
-
|
100
108
|
Connections::Connection.new \
|
101
109
|
:host => host,
|
102
|
-
:connection =>
|
110
|
+
:connection => @manticore
|
103
111
|
},
|
104
112
|
:selector_class => options[:selector_class],
|
105
113
|
:selector => options[:selector]
|
@@ -75,6 +75,11 @@ class Elasticsearch::Transport::Transport::BaseTest < Test::Unit::TestCase
|
|
75
75
|
should "combine authentication credentials" do
|
76
76
|
assert_equal 'http://U:P@myhost:8080', @transport.__full_url(@basic_parts.merge :user => 'U', :password => 'P')
|
77
77
|
end
|
78
|
+
|
79
|
+
should "escape the username and password" do
|
80
|
+
assert_equal 'http://user%40domain:foo%2Fbar@myhost:8080',
|
81
|
+
@transport.__full_url(@basic_parts.merge :user => 'user@domain', :password => 'foo/bar')
|
82
|
+
end
|
78
83
|
end
|
79
84
|
end
|
80
85
|
|
@@ -370,6 +375,23 @@ class Elasticsearch::Transport::Transport::BaseTest < Test::Unit::TestCase
|
|
370
375
|
end
|
371
376
|
end
|
372
377
|
|
378
|
+
should "sanitize password in the URL" do
|
379
|
+
fake_connection = stub :full_url => 'http://user:password@localhost:9200/_search?size=1',
|
380
|
+
:host => 'localhost',
|
381
|
+
:connection => stub_everything,
|
382
|
+
:failures => 0,
|
383
|
+
:healthy! => true
|
384
|
+
@transport.stubs(:get_connection).returns(fake_connection)
|
385
|
+
|
386
|
+
@transport.logger.expects(:info).with do |message|
|
387
|
+
assert_match /http:\/\/user:\*{1,15}@localhost\:9200/, message
|
388
|
+
true
|
389
|
+
end
|
390
|
+
|
391
|
+
|
392
|
+
@transport.perform_request('GET', '/') {Elasticsearch::Transport::Transport::Response.new 200, '{"foo":"bar"}' }
|
393
|
+
end
|
394
|
+
|
373
395
|
should "log a failed Elasticsearch request" do
|
374
396
|
@block = Proc.new { |c, u| puts "ERROR" }
|
375
397
|
@block.expects(:call).returns(Elasticsearch::Transport::Transport::Response.new 500, 'ERROR')
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elasticsearch-transport
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.16.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Karel Minarik
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_json
|
@@ -56,16 +56,16 @@ dependencies:
|
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "<"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
61
|
+
version: '11.0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "<"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
68
|
+
version: '11.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: elasticsearch-extensions
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -394,9 +394,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
394
394
|
version: '0'
|
395
395
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
396
396
|
requirements:
|
397
|
-
- - "
|
397
|
+
- - ">"
|
398
398
|
- !ruby/object:Gem::Version
|
399
|
-
version:
|
399
|
+
version: 1.3.1
|
400
400
|
requirements: []
|
401
401
|
rubyforge_project:
|
402
402
|
rubygems_version: 2.2.2
|