fluent-plugin-elasticsearch 5.1.2 → 5.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/History.md +15 -0
- data/README.md +16 -1
- data/fluent-plugin-elasticsearch.gemspec +1 -1
- data/lib/fluent/plugin/elasticsearch_compat.rb +27 -0
- data/lib/fluent/plugin/elasticsearch_fallback_selector.rb +2 -2
- data/lib/fluent/plugin/elasticsearch_index_lifecycle_management.rb +18 -4
- data/lib/fluent/plugin/elasticsearch_index_template.rb +8 -4
- data/lib/fluent/plugin/elasticsearch_simple_sniffer.rb +2 -1
- data/lib/fluent/plugin/in_elasticsearch.rb +2 -1
- data/lib/fluent/plugin/oj_serializer.rb +2 -1
- data/lib/fluent/plugin/out_elasticsearch.rb +6 -9
- data/lib/fluent/plugin/out_elasticsearch_data_stream.rb +56 -30
- data/lib/fluent/plugin/out_elasticsearch_dynamic.rb +1 -1
- data/test/plugin/test_elasticsearch_fallback_selector.rb +15 -7
- data/test/plugin/test_elasticsearch_index_lifecycle_management.rb +47 -17
- data/test/plugin/test_in_elasticsearch.rb +10 -2
- data/test/plugin/test_out_elasticsearch.rb +220 -122
- data/test/plugin/test_out_elasticsearch_data_stream.rb +187 -33
- data/test/plugin/test_out_elasticsearch_dynamic.rb +57 -20
- metadata +4 -3
@@ -6,12 +6,14 @@ class TestElasticsearchIndexLifecycleManagement < Test::Unit::TestCase
|
|
6
6
|
include Fluent::Plugin::ElasticsearchIndexLifecycleManagement
|
7
7
|
|
8
8
|
def setup
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
if Gem::Version.new(Elasticsearch::VERSION) < Gem::Version.new("7.14.0")
|
10
|
+
begin
|
11
|
+
require "elasticsearch/xpack"
|
12
|
+
rescue LoadError
|
13
|
+
omit "ILM testcase needs elasticsearch-xpack gem."
|
14
|
+
end
|
13
15
|
end
|
14
|
-
if Gem::Version.create(::
|
16
|
+
if Gem::Version.create(::TRANSPORT_CLASS::VERSION) < Gem::Version.create("7.4.0")
|
15
17
|
omit "elastisearch-ruby v7.4.0 or later is needed for ILM."
|
16
18
|
end
|
17
19
|
Fluent::Plugin::ElasticsearchIndexLifecycleManagement.module_eval(<<-CODE)
|
@@ -27,50 +29,78 @@ class TestElasticsearchIndexLifecycleManagement < Test::Unit::TestCase
|
|
27
29
|
CODE
|
28
30
|
end
|
29
31
|
|
30
|
-
def
|
32
|
+
def elasticsearch_version
|
33
|
+
if Gem::Version.new(TRANSPORT_CLASS::VERSION) >= Gem::Version.new("8.0.0")
|
34
|
+
TRANSPORT_CLASS::VERSION
|
35
|
+
else
|
36
|
+
'6.4.2'.freeze
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def ilm_existence_endpoint(policy_id)
|
41
|
+
if Gem::Version.new(TRANSPORT_CLASS::VERSION) >= Gem::Version.new("8.0.0")
|
42
|
+
"_enrich/policy/#{policy_id}"
|
43
|
+
else
|
44
|
+
"_ilm/policy/%7B:policy_id=%3E%22#{policy_id}%22%7D"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def ilm_creation_endpoint(policy_id)
|
49
|
+
if Gem::Version.new(TRANSPORT_CLASS::VERSION) >= Gem::Version.new("8.0.0")
|
50
|
+
"_enrich/policy/#{policy_id}"
|
51
|
+
else
|
52
|
+
"_ilm/policy/#{policy_id}"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def stub_elastic_info(url="http://localhost:9200/", version=elasticsearch_version)
|
31
57
|
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' } })
|
58
|
+
stub_request(:get, url).to_return({:status => 200, :body => body, :headers => { 'Content-Type' => 'json', 'x-elastic-product' => 'Elasticsearch' } })
|
33
59
|
end
|
34
60
|
|
35
61
|
def test_xpack_info
|
36
62
|
stub_request(:get, "http://localhost:9200/_xpack").
|
37
|
-
to_return(:status => 200, :body => '{"features":{"ilm":{"available":true,"enabled":true}}}', :headers => {"Content-Type"=> "application/json"})
|
63
|
+
to_return(:status => 200, :body => '{"features":{"ilm":{"available":true,"enabled":true}}}', :headers => {"Content-Type"=> "application/json" })
|
38
64
|
stub_elastic_info
|
39
65
|
expected = {"features"=>{"ilm"=>{"available"=>true, "enabled"=>true}}}
|
40
|
-
|
66
|
+
if xpack_info.is_a?(Elasticsearch::API::Response)
|
67
|
+
assert_equal(expected, xpack_info.body)
|
68
|
+
else
|
69
|
+
assert_equal(expected, xpack_info)
|
70
|
+
end
|
41
71
|
end
|
42
72
|
|
43
73
|
def test_verify_ilm_working
|
44
74
|
stub_request(:get, "http://localhost:9200/_xpack").
|
45
|
-
to_return(:status => 200, :body => '{"features":{"ilm":{"available":true,"enabled":true}}}', :headers => {"Content-Type"=> "application/json"})
|
75
|
+
to_return(:status => 200, :body => '{"features":{"ilm":{"available":true,"enabled":true}}}', :headers => {"Content-Type"=> "application/json" })
|
46
76
|
stub_elastic_info
|
47
77
|
assert_nothing_raised { verify_ilm_working }
|
48
78
|
end
|
49
79
|
|
50
80
|
def test_ilm_policy_doesnt_exists
|
51
|
-
stub_request(:get, "http://localhost:9200
|
81
|
+
stub_request(:get, "http://localhost:9200/#{ilm_existence_endpoint("fluentd-policy")}").
|
52
82
|
to_return(:status => 404, :body => "", :headers => {})
|
53
83
|
stub_elastic_info
|
54
|
-
assert_false(ilm_policy_exists?(
|
84
|
+
assert_false(ilm_policy_exists?("fluentd-policy"))
|
55
85
|
end
|
56
86
|
|
57
87
|
def test_ilm_policy_exists
|
58
|
-
stub_request(:get, "http://localhost:9200
|
88
|
+
stub_request(:get, "http://localhost:9200/#{ilm_existence_endpoint("fluent-policy")}").
|
59
89
|
to_return(:status => 200, :body => "", :headers => {})
|
60
90
|
stub_elastic_info
|
61
|
-
assert_true(ilm_policy_exists?(
|
91
|
+
assert_true(ilm_policy_exists?("fluent-policy"))
|
62
92
|
end
|
63
93
|
|
64
94
|
def test_create_ilm_policy
|
65
|
-
stub_request(:get, "http://localhost:9200
|
95
|
+
stub_request(:get, "http://localhost:9200/#{ilm_creation_endpoint("fluent-policy")}").
|
66
96
|
to_return(:status => 404, :body => "", :headers => {})
|
67
|
-
stub_request(:put, "http://localhost:9200
|
97
|
+
stub_request(:put, "http://localhost:9200/#{ilm_creation_endpoint("fluent-policy")}").
|
68
98
|
with(:body => "{\"policy\":{\"phases\":{\"hot\":{\"actions\":{\"rollover\":{\"max_size\":\"50gb\",\"max_age\":\"30d\"}}}}}}",
|
69
99
|
:headers => {'Content-Type'=>'application/json'}).
|
70
100
|
to_return(:status => 200, :body => "", :headers => {})
|
71
101
|
stub_elastic_info
|
72
102
|
create_ilm_policy("fluent-policy")
|
73
103
|
|
74
|
-
assert_requested(:put, "http://localhost:9200
|
104
|
+
assert_requested(:put, "http://localhost:9200/#{ilm_creation_endpoint("fluent-policy")}", times: 1)
|
75
105
|
end
|
76
106
|
end
|
@@ -31,9 +31,17 @@ 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
|
34
|
+
def elasticsearch_version
|
35
|
+
if Gem::Version.new(TRANSPORT_CLASS::VERSION) >= Gem::Version.new("7.14.0")
|
36
|
+
TRANSPORT_CLASS::VERSION
|
37
|
+
else
|
38
|
+
'7.9.0'.freeze
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def stub_elastic_info(url="http://localhost:9200/", version=elasticsearch_version)
|
35
43
|
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' } })
|
44
|
+
stub_request(:get, url).to_return({:status => 200, :body => body, :headers => { 'Content-Type' => 'json', 'x-elastic-product' => 'Elasticsearch' } })
|
37
45
|
end
|
38
46
|
|
39
47
|
def sample_response(index_name="fluentd")
|