fluent-plugin-elasticsearch 1.18.2 → 2.0.0.rc.1
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 +5 -5
- data/.gitignore +0 -1
- data/.travis.yml +0 -1
- data/History.md +4 -96
- data/README.md +23 -162
- data/fluent-plugin-elasticsearch.gemspec +5 -5
- data/lib/fluent/plugin/elasticsearch_index_template.rb +3 -8
- data/lib/fluent/plugin/out_elasticsearch.rb +314 -420
- data/lib/fluent/plugin/out_elasticsearch_dynamic.rb +206 -220
- data/test/plugin/test_out_elasticsearch.rb +303 -806
- data/test/plugin/test_out_elasticsearch_dynamic.rb +180 -257
- metadata +13 -24
- data/Gemfile.v0.12 +0 -11
- data/lib/fluent/log-ext.rb +0 -38
- data/lib/fluent/plugin/elasticsearch_constants.rb +0 -11
- data/lib/fluent/plugin/elasticsearch_error_handler.rb +0 -89
- data/lib/fluent/plugin/elasticsearch_simple_sniffer.rb +0 -10
- data/lib/fluent/plugin/filter_elasticsearch_genid.rb +0 -25
- data/test/plugin/test_elasticsearch_error_handler.rb +0 -264
- data/test/plugin/test_filter_elasticsearch_genid.rb +0 -40
- data/test/test_log-ext.rb +0 -33
@@ -1,10 +1,8 @@
|
|
1
1
|
require 'helper'
|
2
2
|
require 'date'
|
3
|
-
require '
|
3
|
+
require 'fluent/test/driver/output'
|
4
4
|
|
5
5
|
class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
6
|
-
include FlexMock::TestCase
|
7
|
-
|
8
6
|
attr_accessor :index_cmds, :index_command_counts
|
9
7
|
|
10
8
|
def setup
|
@@ -13,8 +11,8 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
13
11
|
@driver = nil
|
14
12
|
end
|
15
13
|
|
16
|
-
def driver(
|
17
|
-
@driver ||= Fluent::Test::
|
14
|
+
def driver(conf='')
|
15
|
+
@driver ||= Fluent::Test::Driver::Output.new(Fluent::Plugin::ElasticsearchOutputDynamic) {
|
18
16
|
# v0.12's test driver assume format definition. This simulates ObjectBufferedOutput format
|
19
17
|
if !defined?(Fluent::Plugin::Output)
|
20
18
|
def format(tag, time, record)
|
@@ -63,20 +61,14 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
63
61
|
user john
|
64
62
|
password doe
|
65
63
|
}
|
66
|
-
instance = driver(
|
64
|
+
instance = driver(config).instance
|
67
65
|
|
68
66
|
conf = instance.dynamic_config
|
69
67
|
assert_equal 'logs.google.com', conf['host']
|
70
68
|
assert_equal "777", conf['port']
|
71
|
-
assert_equal :https, instance.scheme
|
72
69
|
assert_equal 'john', instance.user
|
73
70
|
assert_equal 'doe', instance.password
|
74
71
|
assert_equal '/es/', instance.path
|
75
|
-
assert_equal :TLSv1, instance.ssl_version
|
76
|
-
assert_nil instance.client_key
|
77
|
-
assert_nil instance.client_cert
|
78
|
-
assert_nil instance.client_key_pass
|
79
|
-
assert_false instance.with_transporter_log
|
80
72
|
end
|
81
73
|
|
82
74
|
def test_defaults
|
@@ -87,7 +79,7 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
87
79
|
user john
|
88
80
|
password doe
|
89
81
|
}
|
90
|
-
instance = driver(
|
82
|
+
instance = driver(config).instance
|
91
83
|
|
92
84
|
conf = instance.dynamic_config
|
93
85
|
assert_equal "9200", conf['port']
|
@@ -103,7 +95,7 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
103
95
|
path /es/
|
104
96
|
port 123
|
105
97
|
}
|
106
|
-
instance = driver(
|
98
|
+
instance = driver(config).instance
|
107
99
|
|
108
100
|
assert_equal 3, instance.get_connection_options(nil)[:hosts].length
|
109
101
|
host1, host2, host3 = instance.get_connection_options(nil)[:hosts]
|
@@ -125,7 +117,7 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
125
117
|
user default_user
|
126
118
|
password default_password
|
127
119
|
}
|
128
|
-
instance = driver(
|
120
|
+
instance = driver(config).instance
|
129
121
|
|
130
122
|
assert_equal 2, instance.get_connection_options(nil)[:hosts].length
|
131
123
|
host1, host2 = instance.get_connection_options(nil)[:hosts]
|
@@ -144,39 +136,13 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
144
136
|
assert_equal '/default_path', host2[:path]
|
145
137
|
end
|
146
138
|
|
147
|
-
def test_hosts_list_with_escape_placeholders
|
148
|
-
config = %{
|
149
|
-
hosts https://%{j+hn}:%{passw@rd}@host1:443/elastic/,http://host2
|
150
|
-
path /default_path
|
151
|
-
user default_user
|
152
|
-
password default_password
|
153
|
-
}
|
154
|
-
instance = driver('test', config).instance
|
155
|
-
|
156
|
-
assert_equal 2, instance.get_connection_options(nil)[:hosts].length
|
157
|
-
host1, host2 = instance.get_connection_options(nil)[:hosts]
|
158
|
-
|
159
|
-
assert_equal 'host1', host1[:host]
|
160
|
-
assert_equal 443, host1[:port]
|
161
|
-
assert_equal 'https', host1[:scheme]
|
162
|
-
assert_equal 'j%2Bhn', host1[:user]
|
163
|
-
assert_equal 'passw%40rd', host1[:password]
|
164
|
-
assert_equal '/elastic/', host1[:path]
|
165
|
-
|
166
|
-
assert_equal 'host2', host2[:host]
|
167
|
-
assert_equal 'http', host2[:scheme]
|
168
|
-
assert_equal 'default_user', host2[:user]
|
169
|
-
assert_equal 'default_password', host2[:password]
|
170
|
-
assert_equal '/default_path', host2[:path]
|
171
|
-
end
|
172
|
-
|
173
139
|
def test_single_host_params_and_defaults
|
174
140
|
config = %{
|
175
141
|
host logs.google.com
|
176
142
|
user john
|
177
143
|
password doe
|
178
144
|
}
|
179
|
-
instance = driver(
|
145
|
+
instance = driver(config).instance
|
180
146
|
|
181
147
|
assert_equal 1, instance.get_connection_options(nil)[:hosts].length
|
182
148
|
host1 = instance.get_connection_options(nil)[:hosts][0]
|
@@ -189,98 +155,82 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
189
155
|
assert_equal nil, host1[:path]
|
190
156
|
end
|
191
157
|
|
192
|
-
def test_single_host_params_and_defaults_with_escape_placeholders
|
193
|
-
config = %{
|
194
|
-
host logs.google.com
|
195
|
-
user %{j+hn}
|
196
|
-
password %{d@e}
|
197
|
-
}
|
198
|
-
instance = driver('test', config).instance
|
199
|
-
|
200
|
-
assert_equal 1, instance.get_connection_options(nil)[:hosts].length
|
201
|
-
host1 = instance.get_connection_options(nil)[:hosts][0]
|
202
|
-
|
203
|
-
assert_equal 'logs.google.com', host1[:host]
|
204
|
-
assert_equal 9200, host1[:port]
|
205
|
-
assert_equal 'http', host1[:scheme]
|
206
|
-
assert_equal 'j%2Bhn', host1[:user]
|
207
|
-
assert_equal 'd%40e', host1[:password]
|
208
|
-
assert_equal nil, host1[:path]
|
209
|
-
end
|
210
|
-
|
211
158
|
def test_content_type_header
|
212
159
|
stub_request(:head, "http://localhost:9200/").
|
213
160
|
to_return(:status => 200, :body => "", :headers => {})
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
with(headers: { "Content-Type" => "application/json" })
|
220
|
-
end
|
221
|
-
driver.emit(sample_record)
|
222
|
-
driver.run
|
161
|
+
elastic_request = stub_request(:post, "http://localhost:9200/_bulk").
|
162
|
+
with(headers: { "Content-Type" => "application/json" })
|
163
|
+
driver.run(default_tag: 'test') do
|
164
|
+
driver.feed(sample_record)
|
165
|
+
end
|
223
166
|
assert_requested(elastic_request)
|
224
167
|
end
|
225
168
|
|
226
169
|
def test_writes_to_default_index
|
227
170
|
stub_elastic_ping
|
228
171
|
stub_elastic
|
229
|
-
driver.
|
230
|
-
|
172
|
+
driver.run(default_tag: 'test') do
|
173
|
+
driver.feed(sample_record)
|
174
|
+
end
|
231
175
|
assert_equal('fluentd', index_cmds.first['index']['_index'])
|
232
176
|
end
|
233
177
|
|
234
178
|
def test_writes_to_default_type
|
235
179
|
stub_elastic_ping
|
236
180
|
stub_elastic
|
237
|
-
driver.
|
238
|
-
|
181
|
+
driver.run(default_tag: 'test') do
|
182
|
+
driver.feed(sample_record)
|
183
|
+
end
|
239
184
|
assert_equal('fluentd', index_cmds.first['index']['_type'])
|
240
185
|
end
|
241
186
|
|
242
|
-
def
|
187
|
+
def test_writes_to_speficied_index
|
243
188
|
driver.configure("index_name myindex\n")
|
244
189
|
stub_elastic_ping
|
245
190
|
stub_elastic
|
246
|
-
driver.
|
247
|
-
|
191
|
+
driver.run(default_tag: 'test') do
|
192
|
+
driver.feed(sample_record)
|
193
|
+
end
|
248
194
|
assert_equal('myindex', index_cmds.first['index']['_index'])
|
249
195
|
end
|
250
196
|
|
251
|
-
def
|
197
|
+
def test_writes_to_speficied_index_uppercase
|
252
198
|
driver.configure("index_name MyIndex\n")
|
253
199
|
stub_elastic_ping
|
254
200
|
stub_elastic
|
255
|
-
driver.
|
256
|
-
|
201
|
+
driver.run(default_tag: 'test') do
|
202
|
+
driver.feed(sample_record)
|
203
|
+
end
|
257
204
|
assert_equal('myindex', index_cmds.first['index']['_index'])
|
258
205
|
end
|
259
206
|
|
260
|
-
def
|
207
|
+
def test_writes_to_speficied_type
|
261
208
|
driver.configure("type_name mytype\n")
|
262
209
|
stub_elastic_ping
|
263
210
|
stub_elastic
|
264
|
-
driver.
|
265
|
-
|
211
|
+
driver.run(default_tag: 'test') do
|
212
|
+
driver.feed(sample_record)
|
213
|
+
end
|
266
214
|
assert_equal('mytype', index_cmds.first['index']['_type'])
|
267
215
|
end
|
268
216
|
|
269
|
-
def
|
217
|
+
def test_writes_to_speficied_host
|
270
218
|
driver.configure("host 192.168.33.50\n")
|
271
219
|
stub_elastic_ping("http://192.168.33.50:9200")
|
272
220
|
elastic_request = stub_elastic("http://192.168.33.50:9200/_bulk")
|
273
|
-
driver.
|
274
|
-
|
221
|
+
driver.run(default_tag: 'test') do
|
222
|
+
driver.feed(sample_record)
|
223
|
+
end
|
275
224
|
assert_requested(elastic_request)
|
276
225
|
end
|
277
226
|
|
278
|
-
def
|
227
|
+
def test_writes_to_speficied_port
|
279
228
|
driver.configure("port 9201\n")
|
280
229
|
stub_elastic_ping("http://localhost:9201")
|
281
230
|
elastic_request = stub_elastic("http://localhost:9201/_bulk")
|
282
|
-
driver.
|
283
|
-
|
231
|
+
driver.run(default_tag: 'test') do
|
232
|
+
driver.feed(sample_record)
|
233
|
+
end
|
284
234
|
assert_requested(elastic_request)
|
285
235
|
end
|
286
236
|
|
@@ -296,12 +246,11 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
296
246
|
stub_elastic_with_store_index_command_counts("http://#{host}:#{port}/_bulk")
|
297
247
|
end
|
298
248
|
|
299
|
-
|
300
|
-
|
249
|
+
driver.run(default_tag: 'test') do
|
250
|
+
1000.times do
|
251
|
+
driver.feed(sample_record.merge('age'=>rand(100)))
|
252
|
+
end
|
301
253
|
end
|
302
|
-
|
303
|
-
driver.run
|
304
|
-
|
305
254
|
# @note: we cannot make multi chunks with options (flush_interval, buffer_chunk_limit)
|
306
255
|
# it's Fluentd test driver's constraint
|
307
256
|
# so @index_command_counts.size is always 1
|
@@ -318,78 +267,85 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
318
267
|
def test_makes_bulk_request
|
319
268
|
stub_elastic_ping
|
320
269
|
stub_elastic
|
321
|
-
driver.
|
322
|
-
|
323
|
-
|
270
|
+
driver.run(default_tag: 'test') do
|
271
|
+
driver.feed(sample_record)
|
272
|
+
driver.feed(sample_record.merge('age' => 27))
|
273
|
+
end
|
324
274
|
assert_equal(4, index_cmds.count)
|
325
275
|
end
|
326
276
|
|
327
277
|
def test_all_records_are_preserved_in_bulk
|
328
278
|
stub_elastic_ping
|
329
279
|
stub_elastic
|
330
|
-
driver.
|
331
|
-
|
332
|
-
|
280
|
+
driver.run(default_tag: 'test') do
|
281
|
+
driver.feed(sample_record)
|
282
|
+
driver.feed(sample_record.merge('age' => 27))
|
283
|
+
end
|
333
284
|
assert_equal(26, index_cmds[1]['age'])
|
334
285
|
assert_equal(27, index_cmds[3]['age'])
|
335
286
|
end
|
336
287
|
|
337
288
|
def test_writes_to_logstash_index
|
338
289
|
driver.configure("logstash_format true\n")
|
339
|
-
time = Time.parse Date.today.
|
290
|
+
time = Time.parse Date.today.to_s
|
340
291
|
logstash_index = "logstash-#{time.getutc.strftime("%Y.%m.%d")}"
|
341
292
|
stub_elastic_ping
|
342
293
|
stub_elastic
|
343
|
-
driver.
|
344
|
-
|
294
|
+
driver.run(default_tag: 'test') do
|
295
|
+
driver.feed(time.to_i, sample_record)
|
296
|
+
end
|
345
297
|
assert_equal(logstash_index, index_cmds.first['index']['_index'])
|
346
298
|
end
|
347
299
|
|
348
300
|
def test_writes_to_logstash_utc_index
|
349
301
|
driver.configure("logstash_format true
|
350
302
|
utc_index false")
|
351
|
-
time = Time.parse Date.today.
|
303
|
+
time = Time.parse Date.today.to_s
|
352
304
|
utc_index = "logstash-#{time.strftime("%Y.%m.%d")}"
|
353
305
|
stub_elastic_ping
|
354
306
|
stub_elastic
|
355
|
-
driver.
|
356
|
-
|
307
|
+
driver.run(default_tag: 'test') do
|
308
|
+
driver.feed(time.to_i, sample_record)
|
309
|
+
end
|
357
310
|
assert_equal(utc_index, index_cmds.first['index']['_index'])
|
358
311
|
end
|
359
312
|
|
360
313
|
def test_writes_to_logstash_index_with_specified_prefix
|
361
314
|
driver.configure("logstash_format true
|
362
315
|
logstash_prefix myprefix")
|
363
|
-
time = Time.parse Date.today.
|
316
|
+
time = Time.parse Date.today.to_s
|
364
317
|
logstash_index = "myprefix-#{time.getutc.strftime("%Y.%m.%d")}"
|
365
318
|
stub_elastic_ping
|
366
319
|
stub_elastic
|
367
|
-
driver.
|
368
|
-
|
320
|
+
driver.run(default_tag: 'test') do
|
321
|
+
driver.feed(time.to_i, sample_record)
|
322
|
+
end
|
369
323
|
assert_equal(logstash_index, index_cmds.first['index']['_index'])
|
370
324
|
end
|
371
325
|
|
372
326
|
def test_writes_to_logstash_index_with_specified_prefix_uppercase
|
373
327
|
driver.configure("logstash_format true
|
374
328
|
logstash_prefix MyPrefix")
|
375
|
-
time = Time.parse Date.today.
|
329
|
+
time = Time.parse Date.today.to_s
|
376
330
|
logstash_index = "myprefix-#{time.getutc.strftime("%Y.%m.%d")}"
|
377
331
|
stub_elastic_ping
|
378
332
|
stub_elastic
|
379
|
-
driver.
|
380
|
-
|
333
|
+
driver.run(default_tag: 'test') do
|
334
|
+
driver.feed(time.to_i, sample_record)
|
335
|
+
end
|
381
336
|
assert_equal(logstash_index, index_cmds.first['index']['_index'])
|
382
337
|
end
|
383
338
|
|
384
339
|
def test_writes_to_logstash_index_with_specified_dateformat
|
385
340
|
driver.configure("logstash_format true
|
386
341
|
logstash_dateformat %Y.%m")
|
387
|
-
time = Time.parse Date.today.
|
342
|
+
time = Time.parse Date.today.to_s
|
388
343
|
logstash_index = "logstash-#{time.getutc.strftime("%Y.%m")}"
|
389
344
|
stub_elastic_ping
|
390
345
|
stub_elastic
|
391
|
-
driver.
|
392
|
-
|
346
|
+
driver.run(default_tag: 'test') do
|
347
|
+
driver.feed(time.to_i, sample_record)
|
348
|
+
end
|
393
349
|
assert_equal(logstash_index, index_cmds.first['index']['_index'])
|
394
350
|
end
|
395
351
|
|
@@ -397,20 +353,22 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
397
353
|
driver.configure("logstash_format true
|
398
354
|
logstash_prefix myprefix
|
399
355
|
logstash_dateformat %Y.%m")
|
400
|
-
time = Time.parse Date.today.
|
356
|
+
time = Time.parse Date.today.to_s
|
401
357
|
logstash_index = "myprefix-#{time.getutc.strftime("%Y.%m")}"
|
402
358
|
stub_elastic_ping
|
403
359
|
stub_elastic
|
404
|
-
driver.
|
405
|
-
|
360
|
+
driver.run(default_tag: 'test') do
|
361
|
+
driver.feed(time.to_i, sample_record)
|
362
|
+
end
|
406
363
|
assert_equal(logstash_index, index_cmds.first['index']['_index'])
|
407
364
|
end
|
408
365
|
|
409
366
|
def test_doesnt_add_logstash_timestamp_by_default
|
410
367
|
stub_elastic_ping
|
411
368
|
stub_elastic
|
412
|
-
driver.
|
413
|
-
|
369
|
+
driver.run(default_tag: 'test') do
|
370
|
+
driver.feed(sample_record)
|
371
|
+
end
|
414
372
|
assert_nil(index_cmds[1]['@timestamp'])
|
415
373
|
end
|
416
374
|
|
@@ -418,111 +376,69 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
418
376
|
driver.configure("logstash_format true\n")
|
419
377
|
stub_elastic_ping
|
420
378
|
stub_elastic
|
421
|
-
ts = DateTime.now
|
422
|
-
|
423
|
-
driver.run
|
379
|
+
ts = DateTime.now
|
380
|
+
time = Fluent::EventTime.from_time(ts.to_time)
|
381
|
+
driver.run(default_tag: 'test') do
|
382
|
+
driver.feed(time, sample_record)
|
383
|
+
end
|
424
384
|
assert(index_cmds[1].has_key? '@timestamp')
|
425
|
-
assert_equal(index_cmds[1]['@timestamp'], ts)
|
385
|
+
assert_equal(index_cmds[1]['@timestamp'], ts.to_s)
|
426
386
|
end
|
427
387
|
|
428
388
|
def test_uses_custom_timestamp_when_included_in_record
|
429
|
-
driver.configure("include_timestamp true\n")
|
430
|
-
stub_elastic_ping
|
431
|
-
stub_elastic
|
432
|
-
ts = DateTime.new(2001,2,3).iso8601
|
433
|
-
driver.emit(sample_record.merge!('@timestamp' => ts))
|
434
|
-
driver.run
|
435
|
-
assert(index_cmds[1].has_key? '@timestamp')
|
436
|
-
assert_equal(index_cmds[1]['@timestamp'], ts)
|
437
|
-
end
|
438
|
-
|
439
|
-
def test_uses_custom_timestamp_when_included_in_record_logstash
|
440
389
|
driver.configure("logstash_format true\n")
|
441
390
|
stub_elastic_ping
|
442
391
|
stub_elastic
|
443
|
-
ts = DateTime.new(2001,2,3).
|
444
|
-
driver.
|
445
|
-
|
392
|
+
ts = DateTime.new(2001,2,3).to_s
|
393
|
+
driver.run(default_tag: 'test') do
|
394
|
+
driver.feed(sample_record.merge!('@timestamp' => ts))
|
395
|
+
end
|
446
396
|
assert(index_cmds[1].has_key? '@timestamp')
|
447
397
|
assert_equal(index_cmds[1]['@timestamp'], ts)
|
448
398
|
end
|
449
399
|
|
450
|
-
def
|
400
|
+
def test_uses_custom_time_key
|
451
401
|
driver.configure("logstash_format true
|
452
402
|
time_key vtm\n")
|
453
403
|
stub_elastic_ping
|
454
404
|
stub_elastic
|
455
|
-
ts = DateTime.new(2001,2,3).
|
456
|
-
driver.
|
457
|
-
|
458
|
-
|
459
|
-
assert_equal(index_cmds[1]['@timestamp'], ts)
|
460
|
-
end
|
461
|
-
|
462
|
-
def test_uses_custom_time_key_timestamp
|
463
|
-
driver.configure("include_timestamp true
|
464
|
-
time_key vtm\n")
|
465
|
-
stub_elastic_ping
|
466
|
-
stub_elastic
|
467
|
-
ts = DateTime.new(2001,2,3).iso8601
|
468
|
-
driver.emit(sample_record.merge!('vtm' => ts))
|
469
|
-
driver.run
|
470
|
-
assert(index_cmds[1].has_key? '@timestamp')
|
471
|
-
assert_equal(index_cmds[1]['@timestamp'], ts)
|
472
|
-
end
|
473
|
-
|
474
|
-
def test_uses_custom_time_key_timestamp_custom_index
|
475
|
-
driver.configure("include_timestamp true
|
476
|
-
index_name test
|
477
|
-
time_key vtm\n")
|
478
|
-
stub_elastic_ping
|
479
|
-
stub_elastic
|
480
|
-
ts = DateTime.new(2001,2,3).iso8601
|
481
|
-
driver.emit(sample_record.merge!('vtm' => ts))
|
482
|
-
driver.run
|
405
|
+
ts = DateTime.new(2001,2,3).to_s
|
406
|
+
driver.run(default_tag: 'test') do
|
407
|
+
driver.feed(sample_record.merge!('vtm' => ts))
|
408
|
+
end
|
483
409
|
assert(index_cmds[1].has_key? '@timestamp')
|
484
410
|
assert_equal(index_cmds[1]['@timestamp'], ts)
|
485
|
-
assert_equal('test', index_cmds.first['index']['_index'])
|
486
411
|
end
|
487
412
|
|
488
413
|
def test_uses_custom_time_key_exclude_timestamp
|
489
|
-
driver.configure("include_timestamp true
|
490
|
-
time_key vtm
|
491
|
-
time_key_exclude_timestamp true\n")
|
492
|
-
stub_elastic_ping
|
493
|
-
stub_elastic
|
494
|
-
ts = DateTime.new(2001,2,3).iso8601
|
495
|
-
driver.emit(sample_record.merge!('vtm' => ts))
|
496
|
-
driver.run
|
497
|
-
assert(!index_cmds[1].key?('@timestamp'), '@timestamp should be missing')
|
498
|
-
end
|
499
|
-
|
500
|
-
def test_uses_custom_time_key_exclude_timestamp_logstash
|
501
414
|
driver.configure("logstash_format true
|
502
415
|
time_key vtm
|
503
416
|
time_key_exclude_timestamp true\n")
|
504
417
|
stub_elastic_ping
|
505
418
|
stub_elastic
|
506
|
-
ts = DateTime.new(2001,2,3).
|
507
|
-
driver.
|
508
|
-
|
419
|
+
ts = DateTime.new(2001,2,3).to_s
|
420
|
+
driver.run(default_tag: 'test') do
|
421
|
+
driver.feed(sample_record.merge!('vtm' => ts))
|
422
|
+
end
|
509
423
|
assert(!index_cmds[1].key?('@timestamp'), '@timestamp should be missing')
|
510
424
|
end
|
511
425
|
|
512
426
|
def test_doesnt_add_tag_key_by_default
|
513
427
|
stub_elastic_ping
|
514
428
|
stub_elastic
|
515
|
-
driver.
|
516
|
-
|
429
|
+
driver.run(default_tag: 'test') do
|
430
|
+
driver.feed(sample_record)
|
431
|
+
end
|
517
432
|
assert_nil(index_cmds[1]['tag'])
|
518
433
|
end
|
519
434
|
|
520
435
|
def test_adds_tag_key_when_configured
|
521
|
-
driver
|
436
|
+
driver.configure("include_tag_key true\n")
|
522
437
|
stub_elastic_ping
|
523
438
|
stub_elastic
|
524
|
-
driver.
|
525
|
-
|
439
|
+
driver.run(default_tag: 'mytag') do
|
440
|
+
driver.feed(sample_record)
|
441
|
+
end
|
526
442
|
assert(index_cmds[1].has_key?('tag'))
|
527
443
|
assert_equal(index_cmds[1]['tag'], 'mytag')
|
528
444
|
end
|
@@ -531,8 +447,9 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
531
447
|
driver.configure("id_key request_id\n")
|
532
448
|
stub_elastic_ping
|
533
449
|
stub_elastic
|
534
|
-
driver.
|
535
|
-
|
450
|
+
driver.run(default_tag: 'test') do
|
451
|
+
driver.feed(sample_record)
|
452
|
+
end
|
536
453
|
assert_equal(index_cmds[0]['index']['_id'], '42')
|
537
454
|
end
|
538
455
|
|
@@ -540,16 +457,18 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
540
457
|
driver.configure("id_key another_request_id\n")
|
541
458
|
stub_elastic_ping
|
542
459
|
stub_elastic
|
543
|
-
driver.
|
544
|
-
|
460
|
+
driver.run(default_tag: 'test') do
|
461
|
+
driver.feed(sample_record)
|
462
|
+
end
|
545
463
|
assert(!index_cmds[0]['index'].has_key?('_id'))
|
546
464
|
end
|
547
465
|
|
548
466
|
def test_adds_id_key_when_not_configured
|
549
467
|
stub_elastic_ping
|
550
468
|
stub_elastic
|
551
|
-
driver.
|
552
|
-
|
469
|
+
driver.run(default_tag: 'test') do
|
470
|
+
driver.feed(sample_record)
|
471
|
+
end
|
553
472
|
assert(!index_cmds[0]['index'].has_key?('_id'))
|
554
473
|
end
|
555
474
|
|
@@ -557,8 +476,9 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
557
476
|
driver.configure("parent_key parent_id\n")
|
558
477
|
stub_elastic_ping
|
559
478
|
stub_elastic
|
560
|
-
driver.
|
561
|
-
|
479
|
+
driver.run(default_tag: 'test') do
|
480
|
+
driver.feed(sample_record)
|
481
|
+
end
|
562
482
|
assert_equal(index_cmds[0]['index']['_parent'], 'parent')
|
563
483
|
end
|
564
484
|
|
@@ -566,16 +486,18 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
566
486
|
driver.configure("parent_key another_parent_id\n")
|
567
487
|
stub_elastic_ping
|
568
488
|
stub_elastic
|
569
|
-
driver.
|
570
|
-
|
489
|
+
driver.run(default_tag: 'test') do
|
490
|
+
driver.feed(sample_record)
|
491
|
+
end
|
571
492
|
assert(!index_cmds[0]['index'].has_key?('_parent'))
|
572
493
|
end
|
573
494
|
|
574
495
|
def test_adds_parent_key_when_not_configured
|
575
496
|
stub_elastic_ping
|
576
497
|
stub_elastic
|
577
|
-
driver.
|
578
|
-
|
498
|
+
driver.run(default_tag: 'test') do
|
499
|
+
driver.feed(sample_record)
|
500
|
+
end
|
579
501
|
assert(!index_cmds[0]['index'].has_key?('_parent'))
|
580
502
|
end
|
581
503
|
|
@@ -583,8 +505,9 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
583
505
|
driver.configure("routing_key routing_id\n")
|
584
506
|
stub_elastic_ping
|
585
507
|
stub_elastic
|
586
|
-
driver.
|
587
|
-
|
508
|
+
driver.run(default_tag: 'test') do
|
509
|
+
driver.feed(sample_record)
|
510
|
+
end
|
588
511
|
assert_equal(index_cmds[0]['index']['_routing'], 'routing')
|
589
512
|
end
|
590
513
|
|
@@ -592,16 +515,18 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
592
515
|
driver.configure("routing_key another_routing_id\n")
|
593
516
|
stub_elastic_ping
|
594
517
|
stub_elastic
|
595
|
-
driver.
|
596
|
-
|
518
|
+
driver.run(default_tag: 'test') do
|
519
|
+
driver.feed(sample_record)
|
520
|
+
end
|
597
521
|
assert(!index_cmds[0]['index'].has_key?('_routing'))
|
598
522
|
end
|
599
523
|
|
600
524
|
def test_adds_routing_key_when_not_configured
|
601
525
|
stub_elastic_ping
|
602
526
|
stub_elastic
|
603
|
-
driver.
|
604
|
-
|
527
|
+
driver.run(default_tag: 'test') do
|
528
|
+
driver.feed(sample_record)
|
529
|
+
end
|
605
530
|
assert(!index_cmds[0]['index'].has_key?('_routing'))
|
606
531
|
end
|
607
532
|
|
@@ -609,8 +534,9 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
609
534
|
driver.configure("remove_keys key1\n")
|
610
535
|
stub_elastic_ping
|
611
536
|
stub_elastic
|
612
|
-
driver.
|
613
|
-
|
537
|
+
driver.run(default_tag: 'test') do
|
538
|
+
driver.feed(sample_record.merge('key1' => 'v1', 'key2' => 'v2'))
|
539
|
+
end
|
614
540
|
assert(!index_cmds[1].has_key?('key1'))
|
615
541
|
assert(index_cmds[1].has_key?('key2'))
|
616
542
|
end
|
@@ -619,8 +545,9 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
619
545
|
driver.configure("remove_keys key1, key2\n")
|
620
546
|
stub_elastic_ping
|
621
547
|
stub_elastic
|
622
|
-
driver.
|
623
|
-
|
548
|
+
driver.run(default_tag: 'test') do
|
549
|
+
driver.feed(sample_record.merge('key1' => 'v1', 'key2' => 'v2'))
|
550
|
+
end
|
624
551
|
assert(!index_cmds[1].has_key?('key1'))
|
625
552
|
assert(!index_cmds[1].has_key?('key2'))
|
626
553
|
end
|
@@ -628,29 +555,13 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
628
555
|
def test_request_error
|
629
556
|
stub_elastic_ping
|
630
557
|
stub_elastic_unavailable
|
631
|
-
driver.emit(sample_record)
|
632
558
|
assert_raise(Elasticsearch::Transport::Transport::Errors::ServiceUnavailable) {
|
633
|
-
driver.run
|
559
|
+
driver.run(default_tag: 'test') do
|
560
|
+
driver.feed(sample_record)
|
561
|
+
end
|
634
562
|
}
|
635
563
|
end
|
636
564
|
|
637
|
-
def test_garbage_record_error
|
638
|
-
stub_elastic_ping
|
639
|
-
stub_elastic
|
640
|
-
driver.emit("some garbage string")
|
641
|
-
driver.run
|
642
|
-
end
|
643
|
-
|
644
|
-
def test_tag_parts_index_error_event
|
645
|
-
stub_elastic_ping
|
646
|
-
stub_elastic
|
647
|
-
driver.configure("logstash_prefix ${tag_parts[1]}\n")
|
648
|
-
flexmock(driver.instance.router).should_receive(:emit_error_event)
|
649
|
-
.with('test', Integer, Hash, TypeError).once
|
650
|
-
driver.emit(sample_record)
|
651
|
-
driver.run
|
652
|
-
end
|
653
|
-
|
654
565
|
def test_connection_failed_retry
|
655
566
|
connection_resets = 0
|
656
567
|
|
@@ -662,11 +573,9 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
662
573
|
raise Faraday::ConnectionFailed, "Test message"
|
663
574
|
end
|
664
575
|
|
665
|
-
driver.
|
666
|
-
|
667
|
-
|
668
|
-
driver.run
|
669
|
-
}
|
576
|
+
driver.run(default_tag: 'test') do
|
577
|
+
driver.feed(sample_record)
|
578
|
+
end
|
670
579
|
assert_equal(connection_resets, 3)
|
671
580
|
end
|
672
581
|
|
@@ -680,18 +589,23 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
680
589
|
stub_request(:post, "http://localhost:9200/_bulk").with do |req|
|
681
590
|
raise ZeroDivisionError, "any not host_unreachable_exceptions exception"
|
682
591
|
end
|
683
|
-
|
592
|
+
|
684
593
|
driver.configure("reconnect_on_error true\n")
|
685
|
-
driver.emit(sample_record)
|
686
594
|
|
687
595
|
assert_raise(ZeroDivisionError) {
|
688
|
-
driver.run
|
596
|
+
driver.run(default_tag: 'test', shutdown: false) do
|
597
|
+
driver.feed(sample_record)
|
598
|
+
end
|
689
599
|
}
|
690
600
|
|
691
|
-
assert_raise(
|
692
|
-
driver.run
|
601
|
+
assert_raise(Timeout::Error) {
|
602
|
+
driver.run(default_tag: 'test', shutdown: false) do
|
603
|
+
driver.feed(sample_record)
|
604
|
+
end
|
693
605
|
}
|
694
|
-
|
606
|
+
# FIXME: Consider keywords arguments in #run and how to test this later.
|
607
|
+
# Because v0.14 test driver does not have 1 to 1 correspondence between #run and #flush in tests.
|
608
|
+
assert_equal(connection_resets, 1)
|
695
609
|
end
|
696
610
|
|
697
611
|
def test_reconnect_on_error_disabled
|
@@ -704,16 +618,19 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
704
618
|
stub_request(:post, "http://localhost:9200/_bulk").with do |req|
|
705
619
|
raise ZeroDivisionError, "any not host_unreachable_exceptions exception"
|
706
620
|
end
|
707
|
-
|
621
|
+
|
708
622
|
driver.configure("reconnect_on_error false\n")
|
709
|
-
driver.emit(sample_record)
|
710
623
|
|
711
624
|
assert_raise(ZeroDivisionError) {
|
712
|
-
driver.run
|
625
|
+
driver.run(default_tag: 'test', shutdown: false) do
|
626
|
+
driver.feed(sample_record)
|
627
|
+
end
|
713
628
|
}
|
714
629
|
|
715
|
-
assert_raise(
|
716
|
-
driver.run
|
630
|
+
assert_raise(Timeout::Error) {
|
631
|
+
driver.run(default_tag: 'test', shutdown: false) do
|
632
|
+
driver.feed(sample_record)
|
633
|
+
end
|
717
634
|
}
|
718
635
|
assert_equal(connection_resets, 1)
|
719
636
|
end
|
@@ -722,8 +639,9 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
722
639
|
driver.configure("write_operation update\n")
|
723
640
|
stub_elastic_ping
|
724
641
|
stub_elastic
|
725
|
-
driver.
|
726
|
-
|
642
|
+
driver.run(default_tag: 'test') do
|
643
|
+
driver.feed(sample_record)
|
644
|
+
end
|
727
645
|
assert_nil(index_cmds)
|
728
646
|
end
|
729
647
|
|
@@ -731,8 +649,9 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
731
649
|
driver.configure("write_operation upsert\n")
|
732
650
|
stub_elastic_ping
|
733
651
|
stub_elastic
|
734
|
-
driver.
|
735
|
-
|
652
|
+
driver.run(default_tag: 'test') do
|
653
|
+
driver.feed(sample_record)
|
654
|
+
end
|
736
655
|
assert_nil(index_cmds)
|
737
656
|
end
|
738
657
|
|
@@ -740,8 +659,9 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
740
659
|
driver.configure("write_operation create\n")
|
741
660
|
stub_elastic_ping
|
742
661
|
stub_elastic
|
743
|
-
driver.
|
744
|
-
|
662
|
+
driver.run(default_tag: 'test') do
|
663
|
+
driver.feed(sample_record)
|
664
|
+
end
|
745
665
|
assert_nil(index_cmds)
|
746
666
|
end
|
747
667
|
|
@@ -750,8 +670,9 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
750
670
|
id_key request_id")
|
751
671
|
stub_elastic_ping
|
752
672
|
stub_elastic
|
753
|
-
driver.
|
754
|
-
|
673
|
+
driver.run(default_tag: 'test') do
|
674
|
+
driver.feed(sample_record)
|
675
|
+
end
|
755
676
|
assert(index_cmds[0].has_key?("update"))
|
756
677
|
assert(!index_cmds[1]["doc_as_upsert"])
|
757
678
|
end
|
@@ -761,8 +682,9 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
761
682
|
id_key request_id")
|
762
683
|
stub_elastic_ping
|
763
684
|
stub_elastic
|
764
|
-
driver.
|
765
|
-
|
685
|
+
driver.run(default_tag: 'test') do
|
686
|
+
driver.feed(sample_record)
|
687
|
+
end
|
766
688
|
assert(index_cmds[0].has_key?("update"))
|
767
689
|
assert(index_cmds[1]["doc_as_upsert"])
|
768
690
|
end
|
@@ -772,8 +694,9 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
772
694
|
id_key request_id")
|
773
695
|
stub_elastic_ping
|
774
696
|
stub_elastic
|
775
|
-
driver.
|
776
|
-
|
697
|
+
driver.run(default_tag: 'test') do
|
698
|
+
driver.feed(sample_record)
|
699
|
+
end
|
777
700
|
assert(index_cmds[0].has_key?("create"))
|
778
701
|
end
|
779
702
|
end
|