logstash-output-elasticsearch 9.3.0-java → 9.3.1-java
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 +4 -4
- data/CHANGELOG.md +3 -0
- data/lib/logstash/outputs/elasticsearch/http_client/manticore_adapter.rb +17 -6
- data/logstash-output-elasticsearch.gemspec +1 -1
- data/spec/es_spec_helper.rb +9 -3
- data/spec/integration/outputs/parent_spec.rb +9 -1
- data/spec/integration/outputs/templates_5x_spec.rb +1 -1
- data/spec/unit/outputs/elasticsearch/http_client/manticore_adapter_spec.rb +21 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d94e36b467260ee9b470252edef5d67e3d1915a1f1e5d3c7edac1dec879de06d
|
4
|
+
data.tar.gz: 65a256a1b84f2f1ae8de8915423cb3c7e32a756428d2f1110fcaa36e9175181e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19f7d8f5ac61a23caf78d0fa919e7a99b35b491a505620f00f3699a5112a38d64c0599f4db543fd9a90e51286393db1ce8e980d5bec0e49ca3d14f7218657def
|
7
|
+
data.tar.gz: ab59d63c93734f63f33d3750bdbd873976f637c57155787c2ebb0aef2459573ba07d74bc85deff9242dfb2bfb144080e56e721117f55fa626beb30b75ddfe126
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
## 9.3.1
|
2
|
+
- Fixed issue with escaping index names which was causing writing aliases for ILM to fail [#831](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/831)
|
3
|
+
|
1
4
|
## 9.3.0
|
2
5
|
- Adds support for Index Lifecycle Management for Elasticsearch 6.6.0 and above, running with at least a Basic License(Beta) [#805](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/805)
|
3
6
|
|
@@ -65,8 +65,8 @@ module LogStash; module Outputs; class ElasticSearch; class HttpClient;
|
|
65
65
|
end
|
66
66
|
|
67
67
|
request_uri = format_url(url, path)
|
68
|
-
|
69
|
-
resp = @manticore.send(method.downcase,
|
68
|
+
request_uri_as_string = remove_double_escaping(request_uri.to_s)
|
69
|
+
resp = @manticore.send(method.downcase, request_uri_as_string, params)
|
70
70
|
|
71
71
|
# Manticore returns lazy responses by default
|
72
72
|
# We want to block for our usage, this will wait for the repsonse
|
@@ -83,6 +83,7 @@ module LogStash; module Outputs; class ElasticSearch; class HttpClient;
|
|
83
83
|
resp
|
84
84
|
end
|
85
85
|
|
86
|
+
# Returned urls from this method should be checked for double escaping.
|
86
87
|
def format_url(url, path_and_query=nil)
|
87
88
|
request_uri = url.clone
|
88
89
|
|
@@ -92,23 +93,33 @@ module LogStash; module Outputs; class ElasticSearch; class HttpClient;
|
|
92
93
|
request_uri.password = nil
|
93
94
|
|
94
95
|
return request_uri.to_s if path_and_query.nil?
|
95
|
-
|
96
|
+
|
96
97
|
parsed_path_and_query = java.net.URI.new(path_and_query)
|
97
|
-
|
98
|
+
|
98
99
|
query = request_uri.query
|
99
100
|
parsed_query = parsed_path_and_query.query
|
100
|
-
|
101
|
+
|
101
102
|
new_query_parts = [request_uri.query, parsed_path_and_query.query].select do |part|
|
102
103
|
part && !part.empty? # Skip empty nil and ""
|
103
104
|
end
|
104
105
|
|
105
106
|
request_uri.query = new_query_parts.join("&") unless new_query_parts.empty?
|
106
107
|
|
108
|
+
# use `raw_path`` as `path` will unescape any escaped '/' in the path
|
107
109
|
request_uri.path = "#{request_uri.path}/#{parsed_path_and_query.raw_path}".gsub(/\/{2,}/, "/")
|
108
|
-
|
109
110
|
request_uri
|
110
111
|
end
|
111
112
|
|
113
|
+
# Later versions of SafeURI will also escape the '%' sign in an already escaped URI.
|
114
|
+
# (If the path variable is used, it constructs a new java.net.URI object using the multi-arg constructor,
|
115
|
+
# which will escape any '%' characters in the path, as opposed to the single-arg constructor which requires illegal
|
116
|
+
# characters to be already escaped, and will throw otherwise)
|
117
|
+
# The URI needs to have been previously escaped, as it does not play nice with an escaped '/' in the
|
118
|
+
# middle of a URI, as required by date math, treating it as a path separator
|
119
|
+
def remove_double_escaping(url)
|
120
|
+
url.gsub(/%25([0-9A-F]{2})/i, '%\1')
|
121
|
+
end
|
122
|
+
|
112
123
|
def close
|
113
124
|
@manticore.close
|
114
125
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-output-elasticsearch'
|
3
|
-
s.version = '9.3.
|
3
|
+
s.version = '9.3.1'
|
4
4
|
s.licenses = ['apache-2.0']
|
5
5
|
s.summary = "Stores logs in Elasticsearch"
|
6
6
|
s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
|
data/spec/es_spec_helper.rb
CHANGED
@@ -30,13 +30,19 @@ module ESHelper
|
|
30
30
|
Time.now.strftime("%Y.%m.%d")
|
31
31
|
end
|
32
32
|
|
33
|
-
|
33
|
+
|
34
|
+
def default_mapping_from_mappings(mappings)
|
34
35
|
if ESHelper.es_version_satisfies?(">=7")
|
35
|
-
|
36
|
+
mappings
|
36
37
|
else
|
37
|
-
"_default_"
|
38
|
+
mappings["_default_"]
|
38
39
|
end
|
40
|
+
end
|
39
41
|
|
42
|
+
def field_properties_from_template(template_name, field)
|
43
|
+
mappings = @es.indices.get_template(name: template_name)[template_name]["mappings"]
|
44
|
+
mapping = default_mapping_from_mappings(mappings)
|
45
|
+
mapping["properties"][field]["properties"]
|
40
46
|
end
|
41
47
|
|
42
48
|
def routing_field_name
|
@@ -76,7 +76,15 @@ if ESHelper.es_version_satisfies?(">= 5.6")
|
|
76
76
|
|
77
77
|
shared_examples "a join field based parent indexer" do
|
78
78
|
let(:index) { 10.times.collect { rand(10).to_s }.join("") }
|
79
|
-
|
79
|
+
|
80
|
+
let(:type) do
|
81
|
+
if ESHelper.es_version_satisfies?('<7')
|
82
|
+
10.times.collect { rand(10).to_s }.join("")
|
83
|
+
else
|
84
|
+
"_doc"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
80
88
|
let(:event_count) { 10000 + rand(500) }
|
81
89
|
let(:parent) { "not_implemented" }
|
82
90
|
let(:config) { "not_implemented" }
|
@@ -82,7 +82,7 @@ if ESHelper.es_version_satisfies?(">= 5")
|
|
82
82
|
end
|
83
83
|
|
84
84
|
it "make [geoip][location] a geo_point" do
|
85
|
-
expect(
|
85
|
+
expect(field_properties_from_template("logstash", "geoip")["location"]["type"]).to eq("geo_point")
|
86
86
|
end
|
87
87
|
|
88
88
|
it "aggregate .keyword results correctly " do
|
@@ -102,6 +102,7 @@ describe LogStash::Outputs::ElasticSearch::HttpClient::ManticoreAdapter do
|
|
102
102
|
|
103
103
|
it "should add the path correctly" do
|
104
104
|
expect(formatted.path).to eq("#{url.path}special_bulk")
|
105
|
+
expect(subject.remove_double_escaping(formatted.path)).to eq("#{url.path}special_bulk")
|
105
106
|
end
|
106
107
|
|
107
108
|
it "should add the query parameters correctly" do
|
@@ -117,6 +118,26 @@ describe LogStash::Outputs::ElasticSearch::HttpClient::ManticoreAdapter do
|
|
117
118
|
expect(formatted.userinfo).to be_nil
|
118
119
|
end
|
119
120
|
end
|
121
|
+
|
122
|
+
context 'when uri contains date math' do
|
123
|
+
let(:url) { ::LogStash::Util::SafeURI.new("http://localhost:9200") }
|
124
|
+
let(:path) { CGI.escape("<logstash-{now/d}-0001>") }
|
125
|
+
let(:formatted) { subject.format_url(url, path) }
|
126
|
+
|
127
|
+
it 'should escape the uri correctly' do
|
128
|
+
expect(subject.remove_double_escaping(formatted.path)).to eq("/%3Clogstash-%7Bnow%2Fd%7D-0001%3E")
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
context 'when uri does not contain date math' do
|
133
|
+
let(:url) { ::LogStash::Util::SafeURI.new("http://localhost:9200") }
|
134
|
+
let(:path) { CGI.escape("logstash-0001") }
|
135
|
+
let(:formatted) { subject.format_url(url, path) }
|
136
|
+
|
137
|
+
it 'should escape the uri correctly' do
|
138
|
+
expect(subject.remove_double_escaping(formatted.path)).to eq("/logstash-0001")
|
139
|
+
end
|
140
|
+
end
|
120
141
|
end
|
121
142
|
|
122
143
|
describe "integration specs", :integration => true do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-output-elasticsearch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 9.3.
|
4
|
+
version: 9.3.1
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|