fluent-plugin-elasticsearch 5.0.5 → 5.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0e7a5cd238a268dd3f141ce4ad1dedfacbacc98fdd22f73839bb0e1cdbccc586
4
- data.tar.gz: 8077a55fae311fd0bd9cd84fc2b2eb34fad8f7a2a890b2707d37c7ac1c753975
3
+ metadata.gz: 6ad91e234f95a4d2536ac1de2630c6af572e249f5b1ff9a40a83d427f8901413
4
+ data.tar.gz: 91fbf4c3d8fe17e05094f5fa991ec08ee5491a528d39d3d048678adfc30f1192
5
5
  SHA512:
6
- metadata.gz: 7bede6c6213db75e2636c6bf31e65b3256ae709ef600b9f3fca8973943344e07421daf4ed04fc0f3dd06f6b1f662c93c27d9240a323f8139aee3bf2a99ed0f9b
7
- data.tar.gz: caed0a434434c903451cdd4b92ae4427ca39984a8405154308d70a2b68351c6a05b7e505c08cd776230cef9dbbda46f4256cd7de138f3549a1860b5b6cee8e3c
6
+ metadata.gz: 531ba1b0b8824894925a502eb310ea7b9288314dbe940bcee1190f60abea5f9d398c1b815ad24f47cc213342e93d87e1ddc74172f7a8ca931ea59da5527f5060
7
+ data.tar.gz: c8820ca2ae83a2b9082b35f806669cd5783b3ee6cb3e4baa960a937cb2a2b5554b6665bfe9dea666bfd9b5b6b2f462fc7147d9f28ccf4d2281ba4620de0f4acf
data/History.md CHANGED
@@ -2,6 +2,21 @@
2
2
 
3
3
  ### [Unreleased]
4
4
 
5
+ ### 5.1.3
6
+ - fixing execution order for dynamic data stream creation (#928)
7
+
8
+ ### 5.1.2
9
+ - Fix default values of datastream parameters (#926)
10
+
11
+ ### 5.1.1
12
+ - Report appropriate error for data_stream parameters (#922)
13
+ - Add ILM and template parameters for data streams (#920)
14
+ - Support Buffer in Data Stream Output (#917)
15
+
16
+ ### 5.1.0
17
+ - Correct default target bytes value (#914)
18
+ - Handle elasticsearch-ruby 7.14 properly (#913)
19
+
5
20
  ### 5.0.5
6
21
  - Drop json_parse_exception messages for bulk failures (#900)
7
22
  - GitHub Actions: Drop Ruby 2.5 due to EOL (#894)
data/README.md CHANGED
@@ -11,7 +11,7 @@ Send your logs to Elasticsearch (and search them with Kibana maybe?)
11
11
 
12
12
  Note: For Amazon Elasticsearch Service please consider using [fluent-plugin-aws-elasticsearch-service](https://github.com/atomita/fluent-plugin-aws-elasticsearch-service)
13
13
 
14
- Current maintainers: @cosmo0920
14
+ Current maintainers: [Hiroshi Hatake | @cosmo0920](https://github.com/cosmo0920), [Kentaro Hayashi | @kenhys](https://github.com/kenhys)
15
15
 
16
16
  * [Installation](#installation)
17
17
  * [Usage](#usage)
@@ -1521,7 +1521,7 @@ You can enable this feature by specifying `@type elasticsearch_data_stream`.
1521
1521
  data_stream_name test
1522
1522
  ```
1523
1523
 
1524
- When `@type elasticsearch_data_stream` is used, ILM default policy is set to the specified data stream.
1524
+ When `@type elasticsearch_data_stream` is used, unless specified with `data_stream_ilm_name` and `data_stream_template_name`, ILM default policy is set to the specified data stream.
1525
1525
  Then, the matching index template is also created automatically.
1526
1526
 
1527
1527
  ### data_stream_name
@@ -1529,6 +1529,18 @@ Then, the matching index template is also created automatically.
1529
1529
  You can specify Elasticsearch data stream name by this parameter.
1530
1530
  This parameter is mandatory for `elasticsearch_data_stream`.
1531
1531
 
1532
+ ### data_stream_template_name
1533
+
1534
+ You can specify an existing matching index template for the data stream. If not present, it creates a new matching index template.
1535
+
1536
+ Default value is `data_stream_name`.
1537
+
1538
+ ### data_stream_ilm_name
1539
+
1540
+ You can specify the name of an existing ILM policy, which will be applied to the data stream. If not present, it creates a new ILM default policy (unless `data_stream_template_name` is defined, in that case the ILM will be set to the one specified in the matching index template).
1541
+
1542
+ Default value is `data_stream_name`.
1543
+
1532
1544
  There are some limitations about naming rule.
1533
1545
 
1534
1546
  In more detail, please refer to the [Path parameters](https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-create-data-stream.html#indices-create-data-stream-api-path-params).
@@ -3,7 +3,7 @@ $:.push File.expand_path('../lib', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = 'fluent-plugin-elasticsearch'
6
- s.version = '5.0.5'
6
+ s.version = '5.1.3'
7
7
  s.authors = ['diogo', 'pitr', 'Hiroshi Hatake']
8
8
  s.email = ['pitr.vern@gmail.com', 'me@diogoterror.com', 'cosmo0920.wp@gmail.com']
9
9
  s.description = %q{Elasticsearch output plugin for Fluent event collector}
@@ -32,13 +32,25 @@ module Fluent::ElasticsearchIndexTemplate
32
32
  return false
33
33
  end
34
34
 
35
+ def host_unreachable_exceptions
36
+ if Gem::Version.new(::Elasticsearch::Transport::VERSION) >= Gem::Version.new("7.14.0")
37
+ # elasticsearch-ruby 7.14.0's elasticsearch-transport does not extends
38
+ # Elasticsearch class on Transport.
39
+ # This is why #host_unreachable_exceptions is not callable directly
40
+ # via transport (not transport's transport instance accessor) any more.
41
+ client.transport.transport.host_unreachable_exceptions
42
+ else
43
+ client.transport.host_unreachable_exceptions
44
+ end
45
+ end
46
+
35
47
  def retry_operate(max_retries, fail_on_retry_exceed = true, catch_trasport_exceptions = true)
36
48
  return unless block_given?
37
49
  retries = 0
38
50
  transport_errors = Elasticsearch::Transport::Transport::Errors.constants.map{ |c| Elasticsearch::Transport::Transport::Errors.const_get c } if catch_trasport_exceptions
39
51
  begin
40
52
  yield
41
- rescue *client.transport.host_unreachable_exceptions, *transport_errors, Timeout::Error => e
53
+ rescue *host_unreachable_exceptions, *transport_errors, Timeout::Error => e
42
54
  @_es = nil
43
55
  @_es_info = nil
44
56
  if retries < max_retries
@@ -72,7 +72,7 @@ module Fluent::Plugin
72
72
  DEFAULT_TYPE_NAME_ES_7x = "_doc".freeze
73
73
  DEFAULT_TYPE_NAME = "fluentd".freeze
74
74
  DEFAULT_RELOAD_AFTER = -1
75
- TARGET_BULK_BYTES = 20 * 1024 * 1024
75
+ DEFAULT_TARGET_BULK_BYTES = -1
76
76
  DEFAULT_POLICY_ID = "logstash-policy"
77
77
 
78
78
  config_param :host, :string, :default => 'localhost'
@@ -166,7 +166,7 @@ EOC
166
166
  config_param :suppress_doc_wrap, :bool, :default => false
167
167
  config_param :ignore_exceptions, :array, :default => [], value_type: :string, :desc => "Ignorable exception list"
168
168
  config_param :exception_backup, :bool, :default => true, :desc => "Chunk backup flag when ignore exception occured"
169
- config_param :bulk_message_request_threshold, :size, :default => TARGET_BULK_BYTES
169
+ config_param :bulk_message_request_threshold, :size, :default => DEFAULT_TARGET_BULK_BYTES
170
170
  config_param :compression_level, :enum, list: [:no_compression, :best_speed, :best_compression, :default_compression], :default => :no_compression
171
171
  config_param :enable_ilm, :bool, :default => false
172
172
  config_param :ilm_policy_id, :string, :default => DEFAULT_POLICY_ID
@@ -1,3 +1,4 @@
1
+
1
2
  require_relative 'out_elasticsearch'
2
3
 
3
4
  module Fluent::Plugin
@@ -8,6 +9,8 @@ module Fluent::Plugin
8
9
  helpers :event_emitter
9
10
 
10
11
  config_param :data_stream_name, :string
12
+ config_param :data_stream_ilm_name, :string, :default => nil
13
+ config_param :data_stream_template_name, :string, :default => nil
11
14
  # Elasticsearch 7.9 or later always support new style of index template.
12
15
  config_set_default :use_legacy_template, false
13
16
 
@@ -24,9 +27,12 @@ module Fluent::Plugin
24
27
  raise Fluent::ConfigError, "'elasticsearch/api', 'elasticsearch/xpack' are required for <@elasticsearch_data_stream>."
25
28
  end
26
29
 
30
+ @data_stream_ilm_name = "#{@data_stream_name}_policy" if @data_stream_ilm_name.nil?
31
+ @data_stream_template_name = "#{@data_stream_name}_template" if @data_stream_template_name.nil?
32
+
27
33
  # ref. https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-create-data-stream.html
28
34
  unless placeholder?(:data_stream_name_placeholder, @data_stream_name)
29
- validate_data_stream_name
35
+ validate_data_stream_parameters
30
36
  else
31
37
  @use_placeholder = true
32
38
  @data_stream_names = []
@@ -36,8 +42,8 @@ module Fluent::Plugin
36
42
  unless @use_placeholder
37
43
  begin
38
44
  @data_stream_names = [@data_stream_name]
39
- create_ilm_policy(@data_stream_name)
40
- create_index_template(@data_stream_name)
45
+ create_ilm_policy(@data_stream_name, @data_stream_template_name, @data_stream_ilm_name, @host)
46
+ create_index_template(@data_stream_name, @data_stream_template_name, @data_stream_ilm_name, @host)
41
47
  create_data_stream(@data_stream_name)
42
48
  rescue => e
43
49
  raise Fluent::ConfigError, "Failed to create data stream: <#{@data_stream_name}> #{e.message}"
@@ -45,31 +51,35 @@ module Fluent::Plugin
45
51
  end
46
52
  end
47
53
 
48
- def validate_data_stream_name
49
- unless valid_data_stream_name?
50
- unless start_with_valid_characters?
51
- if not_dots?
52
- raise Fluent::ConfigError, "'data_stream_name' must not start with #{INVALID_START_CHRACTERS.join(",")}: <#{@data_stream_name}>"
53
- else
54
- raise Fluent::ConfigError, "'data_stream_name' must not be . or ..: <#{@data_stream_name}>"
54
+ def validate_data_stream_parameters
55
+ {"data_stream_name" => @data_stream_name,
56
+ "data_stream_template_name"=> @data_stream_template_name,
57
+ "data_stream_ilm_name" => @data_stream_ilm_name}.each do |parameter, value|
58
+ unless valid_data_stream_parameters?(value)
59
+ unless start_with_valid_characters?(value)
60
+ if not_dots?(value)
61
+ raise Fluent::ConfigError, "'#{parameter}' must not start with #{INVALID_START_CHRACTERS.join(",")}: <#{value}>"
62
+ else
63
+ raise Fluent::ConfigError, "'#{parameter}' must not be . or ..: <#{value}>"
64
+ end
65
+ end
66
+ unless valid_characters?(value)
67
+ raise Fluent::ConfigError, "'#{parameter}' must not contain invalid characters #{INVALID_CHARACTERS.join(",")}: <#{value}>"
68
+ end
69
+ unless lowercase_only?(value)
70
+ raise Fluent::ConfigError, "'#{parameter}' must be lowercase only: <#{value}>"
71
+ end
72
+ if value.bytes.size > 255
73
+ raise Fluent::ConfigError, "'#{parameter}' must not be longer than 255 bytes: <#{value}>"
55
74
  end
56
- end
57
- unless valid_characters?
58
- raise Fluent::ConfigError, "'data_stream_name' must not contain invalid characters #{INVALID_CHARACTERS.join(",")}: <#{@data_stream_name}>"
59
- end
60
- unless lowercase_only?
61
- raise Fluent::ConfigError, "'data_stream_name' must be lowercase only: <#{@data_stream_name}>"
62
- end
63
- if @data_stream_name.bytes.size > 255
64
- raise Fluent::ConfigError, "'data_stream_name' must not be longer than 255 bytes: <#{@data_stream_name}>"
65
75
  end
66
76
  end
67
77
  end
68
78
 
69
- def create_ilm_policy(name)
70
- return if data_stream_exist?(name)
79
+ def create_ilm_policy(datastream_name, template_name, ilm_name, host)
80
+ return if data_stream_exist?(datastream_name) or template_exists?(template_name, host) or ilm_policy_exists?(ilm_name)
71
81
  params = {
72
- policy_id: "#{name}_policy",
82
+ policy_id: "#{ilm_name}_policy",
73
83
  body: File.read(File.join(File.dirname(__FILE__), "default-ilm-policy.json"))
74
84
  }
75
85
  retry_operate(@max_retry_putting_template,
@@ -79,19 +89,19 @@ module Fluent::Plugin
79
89
  end
80
90
  end
81
91
 
82
- def create_index_template(name)
83
- return if data_stream_exist?(name)
92
+ def create_index_template(datastream_name, template_name, ilm_name, host)
93
+ return if data_stream_exist?(datastream_name) or template_exists?(template_name, host)
84
94
  body = {
85
- "index_patterns" => ["#{name}*"],
95
+ "index_patterns" => ["#{datastream_name}*"],
86
96
  "data_stream" => {},
87
97
  "template" => {
88
98
  "settings" => {
89
- "index.lifecycle.name" => "#{name}_policy"
99
+ "index.lifecycle.name" => "#{ilm_name}"
90
100
  }
91
101
  }
92
102
  }
93
103
  params = {
94
- name: name,
104
+ name: template_name,
95
105
  body: body
96
106
  }
97
107
  retry_operate(@max_retry_putting_template,
@@ -101,9 +111,9 @@ module Fluent::Plugin
101
111
  end
102
112
  end
103
113
 
104
- def data_stream_exist?(name)
114
+ def data_stream_exist?(datastream_name)
105
115
  params = {
106
- "name": name
116
+ name: datastream_name
107
117
  }
108
118
  begin
109
119
  response = @client.indices.get_data_stream(params)
@@ -114,10 +124,10 @@ module Fluent::Plugin
114
124
  end
115
125
  end
116
126
 
117
- def create_data_stream(name)
118
- return if data_stream_exist?(name)
127
+ def create_data_stream(datastream_name)
128
+ return if data_stream_exist?(datastream_name)
119
129
  params = {
120
- "name": name
130
+ name: datastream_name
121
131
  }
122
132
  retry_operate(@max_retry_putting_template,
123
133
  @fail_on_putting_template_retry_exceed,
@@ -126,28 +136,48 @@ module Fluent::Plugin
126
136
  end
127
137
  end
128
138
 
129
- def valid_data_stream_name?
130
- lowercase_only? and
131
- valid_characters? and
132
- start_with_valid_characters? and
133
- not_dots? and
134
- @data_stream_name.bytes.size <= 255
139
+ def ilm_policy_exists?(policy_id)
140
+ begin
141
+ @client.ilm.get_policy(policy_id: policy_id)
142
+ true
143
+ rescue
144
+ false
145
+ end
146
+ end
147
+
148
+ def template_exists?(name, host = nil)
149
+ if @use_legacy_template
150
+ client(host).indices.get_template(:name => name)
151
+ else
152
+ client(host).indices.get_index_template(:name => name)
153
+ end
154
+ return true
155
+ rescue Elasticsearch::Transport::Transport::Errors::NotFound
156
+ return false
157
+ end
158
+
159
+ def valid_data_stream_parameters?(data_stream_parameter)
160
+ lowercase_only?(data_stream_parameter) and
161
+ valid_characters?(data_stream_parameter) and
162
+ start_with_valid_characters?(data_stream_parameter) and
163
+ not_dots?(data_stream_parameter) and
164
+ data_stream_parameter.bytes.size <= 255
135
165
  end
136
166
 
137
- def lowercase_only?
138
- @data_stream_name.downcase == @data_stream_name
167
+ def lowercase_only?(data_stream_parameter)
168
+ data_stream_parameter.downcase == data_stream_parameter
139
169
  end
140
170
 
141
- def valid_characters?
142
- not (INVALID_CHARACTERS.each.any? do |v| @data_stream_name.include?(v) end)
171
+ def valid_characters?(data_stream_parameter)
172
+ not (INVALID_CHARACTERS.each.any? do |v| data_stream_parameter.include?(v) end)
143
173
  end
144
174
 
145
- def start_with_valid_characters?
146
- not (INVALID_START_CHRACTERS.each.any? do |v| @data_stream_name.start_with?(v) end)
175
+ def start_with_valid_characters?(data_stream_parameter)
176
+ not (INVALID_START_CHRACTERS.each.any? do |v| data_stream_parameter.start_with?(v) end)
147
177
  end
148
178
 
149
- def not_dots?
150
- not (@data_stream_name == "." or @data_stream_name == "..")
179
+ def not_dots?(data_stream_parameter)
180
+ not (data_stream_parameter == "." or data_stream_parameter == "..")
151
181
  end
152
182
 
153
183
  def client_library_version
@@ -160,12 +190,17 @@ module Fluent::Plugin
160
190
 
161
191
  def write(chunk)
162
192
  data_stream_name = @data_stream_name
193
+ data_stream_template_name = @data_stream_template_name
194
+ data_stream_ilm_name = @data_stream_ilm_name
195
+ host = @host
163
196
  if @use_placeholder
164
197
  data_stream_name = extract_placeholders(@data_stream_name, chunk)
198
+ data_stream_template_name = extract_placeholders(@data_stream_template_name, chunk)
199
+ data_stream_ilm_name = extract_placeholders(@data_stream_ilm_name, chunk)
165
200
  unless @data_stream_names.include?(data_stream_name)
166
201
  begin
167
- create_ilm_policy(data_stream_name)
168
- create_index_template(data_stream_name)
202
+ create_ilm_policy(data_stream_name, data_stream_template_name, data_stream_ilm_name, host)
203
+ create_index_template(data_stream_name, data_stream_template_name, data_stream_ilm_name, host)
169
204
  create_data_stream(data_stream_name)
170
205
  @data_stream_names << data_stream_name
171
206
  rescue => e
@@ -200,7 +235,7 @@ module Fluent::Plugin
200
235
  log.error "Could not bulk insert to Data Stream: #{data_stream_name} #{response}"
201
236
  end
202
237
  rescue => e
203
- log.error "Could not bulk insert to Data Stream: #{data_stream_name} #{e.message}"
238
+ raise RecoverableRequestFailure, "could not push logs to Elasticsearch cluster (#{data_stream_name}): #{e.message}"
204
239
  end
205
240
  end
206
241
 
@@ -19,7 +19,7 @@ class ElasticsearchFallbackSelectorTest < Test::Unit::TestCase
19
19
  end
20
20
 
21
21
  def stub_elastic_info(url="http://localhost:9200/", version="6.4.2")
22
- body ="{\"version\":{\"number\":\"#{version}\"}}"
22
+ body ="{\"version\":{\"number\":\"#{version}\", \"build_flavor\":\"default\"},\"tagline\" : \"You Know, for Search\"}"
23
23
  stub_request(:get, url).to_return({:status => 200, :body => body, :headers => { 'Content-Type' => 'json' } })
24
24
  end
25
25
 
@@ -27,9 +27,15 @@ class TestElasticsearchIndexLifecycleManagement < Test::Unit::TestCase
27
27
  CODE
28
28
  end
29
29
 
30
+ def stub_elastic_info(url="http://localhost:9200/", version="7.9.0")
31
+ body ="{\"version\":{\"number\":\"#{version}\", \"build_flavor\":\"default\"},\"tagline\" : \"You Know, for Search\"}"
32
+ stub_request(:get, url).to_return({:status => 200, :body => body, :headers => { 'Content-Type' => 'json' } })
33
+ end
34
+
30
35
  def test_xpack_info
31
36
  stub_request(:get, "http://localhost:9200/_xpack").
32
37
  to_return(:status => 200, :body => '{"features":{"ilm":{"available":true,"enabled":true}}}', :headers => {"Content-Type"=> "application/json"})
38
+ stub_elastic_info
33
39
  expected = {"features"=>{"ilm"=>{"available"=>true, "enabled"=>true}}}
34
40
  assert_equal(expected, xpack_info)
35
41
  end
@@ -37,18 +43,21 @@ class TestElasticsearchIndexLifecycleManagement < Test::Unit::TestCase
37
43
  def test_verify_ilm_working
38
44
  stub_request(:get, "http://localhost:9200/_xpack").
39
45
  to_return(:status => 200, :body => '{"features":{"ilm":{"available":true,"enabled":true}}}', :headers => {"Content-Type"=> "application/json"})
46
+ stub_elastic_info
40
47
  assert_nothing_raised { verify_ilm_working }
41
48
  end
42
49
 
43
50
  def test_ilm_policy_doesnt_exists
44
51
  stub_request(:get, "http://localhost:9200/_ilm/policy/%7B:policy_id=%3E%22fluentd-policy%22%7D").
45
52
  to_return(:status => 404, :body => "", :headers => {})
53
+ stub_elastic_info
46
54
  assert_false(ilm_policy_exists?(policy_id: "fluentd-policy"))
47
55
  end
48
56
 
49
57
  def test_ilm_policy_exists
50
58
  stub_request(:get, "http://localhost:9200/_ilm/policy/%7B:policy_id=%3E%22fluent-policy%22%7D").
51
59
  to_return(:status => 200, :body => "", :headers => {})
60
+ stub_elastic_info
52
61
  assert_true(ilm_policy_exists?(policy_id: "fluent-policy"))
53
62
  end
54
63
 
@@ -59,6 +68,7 @@ class TestElasticsearchIndexLifecycleManagement < Test::Unit::TestCase
59
68
  with(:body => "{\"policy\":{\"phases\":{\"hot\":{\"actions\":{\"rollover\":{\"max_size\":\"50gb\",\"max_age\":\"30d\"}}}}}}",
60
69
  :headers => {'Content-Type'=>'application/json'}).
61
70
  to_return(:status => 200, :body => "", :headers => {})
71
+ stub_elastic_info
62
72
  create_ilm_policy("fluent-policy")
63
73
 
64
74
  assert_requested(:put, "http://localhost:9200/_ilm/policy/fluent-policy", times: 1)
@@ -31,6 +31,11 @@ class ElasticsearchInputTest < Test::Unit::TestCase
31
31
  @driver ||= Fluent::Test::Driver::Input.new(Fluent::Plugin::ElasticsearchInput).configure(conf)
32
32
  end
33
33
 
34
+ def stub_elastic_info(url="http://localhost:9200/", version="7.9.0")
35
+ body ="{\"version\":{\"number\":\"#{version}\", \"build_flavor\":\"default\"},\"tagline\" : \"You Know, for Search\"}"
36
+ stub_request(:get, url).to_return({:status => 200, :body => body, :headers => { 'Content-Type' => 'json' } })
37
+ end
38
+
34
39
  def sample_response(index_name="fluentd")
35
40
  {
36
41
  "took"=>4,
@@ -322,6 +327,7 @@ class ElasticsearchInputTest < Test::Unit::TestCase
322
327
  with(body: "{\"sort\":[\"_doc\"]}").
323
328
  to_return(status: 200, body: sample_response.to_s,
324
329
  headers: {'Content-Type' => 'application/json'})
330
+ stub_elastic_info
325
331
 
326
332
  driver(CONFIG)
327
333
  driver.run(expect_emits: 1, timeout: 10)
@@ -337,6 +343,7 @@ class ElasticsearchInputTest < Test::Unit::TestCase
337
343
  with(body: "{\"sort\":[\"_doc\"]}").
338
344
  to_return(status: 200, body: sample_response(index_name).to_s,
339
345
  headers: {'Content-Type' => 'application/json'})
346
+ stub_elastic_info
340
347
 
341
348
  driver(CONFIG + %[index_name #{index_name}])
342
349
  driver.run(expect_emits: 1, timeout: 10)
@@ -352,6 +359,7 @@ class ElasticsearchInputTest < Test::Unit::TestCase
352
359
  with(body: "{\"sort\":[\"_doc\"]}").
353
360
  to_return(status: 200, body: sample_response(index_name).to_s,
354
361
  headers: {'Content-Type' => 'application/json'})
362
+ stub_elastic_info
355
363
 
356
364
  driver(CONFIG + %[parse_timestamp])
357
365
  driver.run(expect_emits: 1, timeout: 10)
@@ -370,6 +378,7 @@ class ElasticsearchInputTest < Test::Unit::TestCase
370
378
  with(body: "{\"sort\":[\"_doc\"]}").
371
379
  to_return(status: 200, body: sample_response(index_name).to_s,
372
380
  headers: {'Content-Type' => 'application/json'})
381
+ stub_elastic_info
373
382
 
374
383
  driver(CONFIG + %[parse_timestamp true
375
384
  timestamp_key_format %Y-%m-%dT%H:%M:%S.%N%z
@@ -389,6 +398,7 @@ class ElasticsearchInputTest < Test::Unit::TestCase
389
398
  with(body: "{\"sort\":[\"_doc\"]}").
390
399
  to_return(status: 200, body: sample_response.to_s,
391
400
  headers: {'Content-Type' => 'application/json'})
401
+ stub_elastic_info
392
402
 
393
403
  driver(CONFIG + %[docinfo true])
394
404
  driver.run(expect_emits: 1, timeout: 10)
@@ -412,6 +422,7 @@ class ElasticsearchInputTest < Test::Unit::TestCase
412
422
  with(body: "{\"sort\":[\"_doc\"],\"slice\":{\"id\":1,\"max\":2}}").
413
423
  to_return(status: 200, body: sample_response.to_s,
414
424
  headers: {'Content-Type' => 'application/json'})
425
+ stub_elastic_info
415
426
 
416
427
  driver(CONFIG + %[num_slices 2])
417
428
  driver.run(expect_emits: 1, timeout: 10)
@@ -434,6 +445,7 @@ class ElasticsearchInputTest < Test::Unit::TestCase
434
445
  body: "{\"scroll_id\":\"WomkoUKG0QPB679Ulo6TqQgh3pIGRUmrl9qXXGK3EeiQh9rbYNasTkspZQcJ01uz\"}") do
435
446
  connection += 1
436
447
  end
448
+ stub_elastic_info
437
449
  scroll_request.to_return(lambda do |req|
438
450
  if connection <= 1
439
451
  {status: 200, body: sample_scroll_response_2.to_s,