logstash-filter-xml 2.2.0 → 3.0.0
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 +5 -13
- data/Gemfile +3 -1
- data/lib/logstash/filters/xml.rb +6 -30
- data/logstash-filter-xml.gemspec +2 -2
- data/spec/filters/xml_spec.rb +44 -137
- metadata +36 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1840e844c5ece350a424e0cebe3277defc8c5e8b
|
4
|
+
data.tar.gz: 61fb53f8feba4439c651c834fa64393191c2c4a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4130e7435dc522d2c1d92d598eb6284c051b5ffad47f147281c679cdc49fff2b28568c5d02e36b84bec2e0633a06f051c62709cf849c83c3efca0cff88687d62
|
7
|
+
data.tar.gz: 75e3d58462c5f088c164c55b5fc2fd9fad38f6543974796b65bbd58c97b8346082213886632699cc46460f94d00fdd8ff8f13cf1e20062345c0a9b11c39966c2
|
data/CHANGELOG.md
CHANGED
@@ -1,19 +1,11 @@
|
|
1
|
-
##
|
2
|
-
|
3
|
-
|
4
|
-
- config: New configuration `force_content`. By default the filter expands attributes differently from content in xml elements.
|
5
|
-
This option allows you to force text content and attributes to always parse to a hash value.
|
6
|
-
- config: Ensure that `target` is set when storing xml content in the event (`store_xml => true`)
|
7
|
-
|
8
|
-
## 2.1.4
|
1
|
+
## 3.0.0
|
2
|
+
- Update the plugin to the version 2.0 of the plugin api, this change is required for Logstash 5.0 compatibility. See https://github.com/elastic/logstash/issues/5141
|
3
|
+
# 2.1.4
|
9
4
|
- Added setting to disable forcing single values to be added in arrays. Ref: https://github.com/logstash-plugins/logstash-filter-xml/pull/28.
|
10
|
-
|
11
|
-
## 2.1.3
|
5
|
+
# 2.1.3
|
12
6
|
- Depend on logstash-core-plugin-api instead of logstash-core, removing the need to mass update plugins on major releases of logstash
|
13
|
-
|
14
|
-
## 2.1.2
|
7
|
+
# 2.1.2
|
15
8
|
- New dependency requirements for logstash-core for the 5.0 release
|
16
|
-
|
17
9
|
## 2.1.1
|
18
10
|
- Refactored field references, code cleanups
|
19
11
|
|
data/Gemfile
CHANGED
data/lib/logstash/filters/xml.rb
CHANGED
@@ -51,10 +51,10 @@ class LogStash::Filters::Xml < LogStash::Filters::Base
|
|
51
51
|
# destination field as an array. As such, multiple matches across
|
52
52
|
# multiple source fields will produce duplicate entries in the field.
|
53
53
|
#
|
54
|
-
# More on XPath: http://www.w3schools.com/
|
54
|
+
# More on XPath: http://www.w3schools.com/xpath/
|
55
55
|
#
|
56
56
|
# The XPath functions are particularly powerful:
|
57
|
-
# http://www.w3schools.com/
|
57
|
+
# http://www.w3schools.com/xpath/xpath_functions.asp
|
58
58
|
#
|
59
59
|
config :xpath, :validate => :hash, :default => {}
|
60
60
|
|
@@ -66,11 +66,6 @@ class LogStash::Filters::Xml < LogStash::Filters::Base
|
|
66
66
|
# false will prevent storing single elements in arrays.
|
67
67
|
config :force_array, :validate => :boolean, :default => true
|
68
68
|
|
69
|
-
# By default the filter will expand attributes differently from content inside
|
70
|
-
# of tags. This option allows you to force text content and attributes to always
|
71
|
-
# parse to a hash value.
|
72
|
-
config :force_content, :validate => :boolean, :default => false
|
73
|
-
|
74
69
|
# By default only namespaces declarations on the root element are considered.
|
75
70
|
# This allows to configure all namespace declarations to parse the XML document.
|
76
71
|
#
|
@@ -92,24 +87,11 @@ class LogStash::Filters::Xml < LogStash::Filters::Base
|
|
92
87
|
# Of course, if the document had nodes with the same names but different namespaces, they will now be ambiguous.
|
93
88
|
config :remove_namespaces, :validate => :boolean, :default => false
|
94
89
|
|
95
|
-
# By default, empty element will result in an empty hash object
|
96
|
-
# If set to `true`, output nothing if the element is empty..
|
97
|
-
config :suppress_empty, :validate => :boolean, :default => false
|
98
|
-
|
99
90
|
XMLPARSEFAILURE_TAG = "_xmlparsefailure"
|
100
91
|
|
101
92
|
def register
|
102
93
|
require "nokogiri"
|
103
94
|
require "xmlsimple"
|
104
|
-
|
105
|
-
if @store_xml && (!@target || @target.empty?)
|
106
|
-
raise LogStash::ConfigurationError, I18n.t(
|
107
|
-
"logstash.agent.configuration.invalid_plugin_register",
|
108
|
-
:plugin => "filter",
|
109
|
-
:type => "xml",
|
110
|
-
:error => "When the 'store_xml' configuration option is true, 'target' must also be set"
|
111
|
-
)
|
112
|
-
end
|
113
95
|
end
|
114
96
|
|
115
97
|
def filter(event)
|
@@ -117,7 +99,7 @@ class LogStash::Filters::Xml < LogStash::Filters::Base
|
|
117
99
|
|
118
100
|
@logger.debug? && @logger.debug("Running xml filter", :event => event)
|
119
101
|
|
120
|
-
value = event
|
102
|
+
value = event.get(@source)
|
121
103
|
return unless value
|
122
104
|
|
123
105
|
if value.is_a?(Array)
|
@@ -167,13 +149,9 @@ class LogStash::Filters::Xml < LogStash::Filters::Base
|
|
167
149
|
# the array should probably be created once, filled in the loop and set at after the loop but the return
|
168
150
|
# statement above screws this strategy and is likely a bug anyway so I will not touch this until I can
|
169
151
|
# deep a big deeper and verify there is a sufficient test harness to refactor this.
|
170
|
-
data = event
|
152
|
+
data = event.get(xpath_dest) || []
|
171
153
|
data << value.to_s
|
172
|
-
event
|
173
|
-
|
174
|
-
# do not use the following construct to set the event, we cannot assume anymore that the field values are in-place mutable
|
175
|
-
# event[xpath_dest] ||= []
|
176
|
-
# event[xpath_dest] << value.to_s
|
154
|
+
event.set(xpath_dest, data)
|
177
155
|
end
|
178
156
|
end
|
179
157
|
end
|
@@ -181,9 +159,7 @@ class LogStash::Filters::Xml < LogStash::Filters::Base
|
|
181
159
|
|
182
160
|
if @store_xml
|
183
161
|
begin
|
184
|
-
|
185
|
-
xml_options["SuppressEmpty"] = true if @suppress_empty
|
186
|
-
event[@target] = XmlSimple.xml_in(value, xml_options)
|
162
|
+
event.set(@target, XmlSimple.xml_in(value, "ForceArray" => @force_array))
|
187
163
|
matched = true
|
188
164
|
rescue => e
|
189
165
|
event.tag(XMLPARSEFAILURE_TAG)
|
data/logstash-filter-xml.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
|
3
3
|
s.name = 'logstash-filter-xml'
|
4
|
-
s.version = '
|
4
|
+
s.version = '3.0.0'
|
5
5
|
s.licenses = ['Apache License (2.0)']
|
6
6
|
s.summary = "Takes a field that contains XML and expands it into an actual datastructure."
|
7
7
|
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"
|
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.metadata = { "logstash_plugin" => "true", "logstash_group" => "filter" }
|
21
21
|
|
22
22
|
# Gem dependencies
|
23
|
-
s.add_runtime_dependency "logstash-core-plugin-api", "~>
|
23
|
+
s.add_runtime_dependency "logstash-core-plugin-api", "~> 2.0"
|
24
24
|
s.add_runtime_dependency 'nokogiri'
|
25
25
|
s.add_runtime_dependency 'xml-simple'
|
26
26
|
|
data/spec/filters/xml_spec.rb
CHANGED
@@ -15,55 +15,55 @@ describe LogStash::Filters::Xml do
|
|
15
15
|
CONFIG
|
16
16
|
|
17
17
|
sample("raw" => '<foo key="value"/>') do
|
18
|
-
insist { subject
|
19
|
-
insist { subject
|
18
|
+
insist { subject.get("tags") }.nil?
|
19
|
+
insist { subject.get("data")} == {"key" => "value"}
|
20
20
|
end
|
21
21
|
|
22
22
|
#From parse xml with array as a value
|
23
23
|
sample("raw" => '<foo><key>value1</key><key>value2</key></foo>') do
|
24
|
-
insist { subject
|
25
|
-
insist { subject
|
24
|
+
insist { subject.get("tags") }.nil?
|
25
|
+
insist { subject.get("data")} == {"key" => ["value1", "value2"]}
|
26
26
|
end
|
27
27
|
|
28
28
|
#From parse xml with hash as a value
|
29
29
|
sample("raw" => '<foo><key1><key2>value</key2></key1></foo>') do
|
30
|
-
insist { subject
|
31
|
-
insist { subject
|
30
|
+
insist { subject.get("tags") }.nil?
|
31
|
+
insist { subject.get("data")} == {"key1" => [{"key2" => ["value"]}]}
|
32
32
|
end
|
33
33
|
|
34
34
|
# parse xml in single item array
|
35
35
|
sample("raw" => ["<foo bar=\"baz\"/>"]) do
|
36
|
-
insist { subject
|
37
|
-
insist { subject
|
36
|
+
insist { subject.get("tags") }.nil?
|
37
|
+
insist { subject.get("data")} == {"bar" => "baz"}
|
38
38
|
end
|
39
39
|
|
40
40
|
# fail in multi items array
|
41
41
|
sample("raw" => ["<foo bar=\"baz\"/>", "jojoba"]) do
|
42
|
-
insist { subject
|
43
|
-
insist { subject
|
42
|
+
insist { subject.get("tags") }.include?("_xmlparsefailure")
|
43
|
+
insist { subject.get("data")} == nil
|
44
44
|
end
|
45
45
|
|
46
46
|
# fail in empty array
|
47
47
|
sample("raw" => []) do
|
48
|
-
insist { subject
|
49
|
-
insist { subject
|
48
|
+
insist { subject.get("tags") }.include?("_xmlparsefailure")
|
49
|
+
insist { subject.get("data")} == nil
|
50
50
|
end
|
51
51
|
|
52
52
|
# fail for non string field
|
53
53
|
sample("raw" => {"foo" => "bar"}) do
|
54
|
-
insist { subject
|
55
|
-
insist { subject
|
54
|
+
insist { subject.get("tags") }.include?("_xmlparsefailure")
|
55
|
+
insist { subject.get("data")} == nil
|
56
56
|
end
|
57
57
|
|
58
58
|
# fail for non string single item array
|
59
59
|
sample("raw" => [{"foo" => "bar"}]) do
|
60
|
-
insist { subject
|
61
|
-
insist { subject
|
60
|
+
insist { subject.get("tags") }.include?("_xmlparsefailure")
|
61
|
+
insist { subject.get("data")} == nil
|
62
62
|
end
|
63
63
|
|
64
64
|
#From bad xml
|
65
65
|
sample("raw" => '<foo /') do
|
66
|
-
insist { subject
|
66
|
+
insist { subject.get("tags") }.include?("_xmlparsefailure")
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
@@ -79,8 +79,8 @@ describe LogStash::Filters::Xml do
|
|
79
79
|
CONFIG
|
80
80
|
|
81
81
|
sample("raw" => '<foo key="value"/>') do
|
82
|
-
insist { subject
|
83
|
-
insist { subject
|
82
|
+
insist { subject.get("tags") }.nil?
|
83
|
+
insist { subject.get("data")} == nil
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
@@ -97,14 +97,14 @@ describe LogStash::Filters::Xml do
|
|
97
97
|
|
98
98
|
# Single value
|
99
99
|
sample("raw" => '<foo><key>value</key></foo>') do
|
100
|
-
insist { subject
|
101
|
-
insist { subject
|
100
|
+
insist { subject.get("tags") }.nil?
|
101
|
+
insist { subject.get("xpath_field")} == ["value"]
|
102
102
|
end
|
103
103
|
|
104
104
|
#Multiple values
|
105
105
|
sample("raw" => '<foo><key>value1</key><key>value2</key></foo>') do
|
106
|
-
insist { subject
|
107
|
-
insist { subject
|
106
|
+
insist { subject.get("tags") }.nil?
|
107
|
+
insist { subject.get("xpath_field")} == ["value1","value2"]
|
108
108
|
end
|
109
109
|
end
|
110
110
|
|
@@ -121,25 +121,25 @@ describe LogStash::Filters::Xml do
|
|
121
121
|
CONFIG
|
122
122
|
|
123
123
|
sample("xmldata" => '<foo key="value"/>') do
|
124
|
-
insist { subject
|
125
|
-
insist { subject
|
124
|
+
insist { subject.get("tags") }.nil?
|
125
|
+
insist { subject.get("data") } == {"key" => "value"}
|
126
126
|
end
|
127
127
|
|
128
128
|
#From parse xml with array as a value
|
129
129
|
sample("xmldata" => '<foo><key>value1</key><key>value2</key></foo>') do
|
130
|
-
insist { subject
|
131
|
-
insist { subject
|
130
|
+
insist { subject.get("tags") }.nil?
|
131
|
+
insist { subject.get("data") } == {"key" => ["value1", "value2"]}
|
132
132
|
end
|
133
133
|
|
134
134
|
#From parse xml with hash as a value
|
135
135
|
sample("xmldata" => '<foo><key1><key2>value</key2></key1></foo>') do
|
136
|
-
insist { subject
|
137
|
-
insist { subject
|
136
|
+
insist { subject.get("tags") }.nil?
|
137
|
+
insist { subject.get("data") } == {"key1" => [{"key2" => ["value"]}]}
|
138
138
|
end
|
139
139
|
|
140
140
|
#From bad xml
|
141
141
|
sample("xmldata" => '<foo /') do
|
142
|
-
insist { subject
|
142
|
+
insist { subject.get("tags") }.include?("_xmlparsefailure")
|
143
143
|
end
|
144
144
|
end
|
145
145
|
|
@@ -155,8 +155,8 @@ describe LogStash::Filters::Xml do
|
|
155
155
|
CONFIG
|
156
156
|
|
157
157
|
sample("xmldata" => '<foo key="value"/>') do
|
158
|
-
insist { subject
|
159
|
-
insist { subject
|
158
|
+
insist { subject.get("tags") }.nil?
|
159
|
+
insist { subject.get("data")} == nil
|
160
160
|
end
|
161
161
|
end
|
162
162
|
|
@@ -173,14 +173,14 @@ describe LogStash::Filters::Xml do
|
|
173
173
|
|
174
174
|
# Single value
|
175
175
|
sample("xmldata" => '<foo><key>value</key></foo>') do
|
176
|
-
insist { subject
|
177
|
-
insist { subject
|
176
|
+
insist { subject.get("tags") }.nil?
|
177
|
+
insist { subject.get("xpath_field") } == ["value"]
|
178
178
|
end
|
179
179
|
|
180
180
|
#Multiple values
|
181
181
|
sample("xmldata" => '<foo><key>value1</key><key>value2</key></foo>') do
|
182
|
-
insist { subject
|
183
|
-
insist { subject
|
182
|
+
insist { subject.get("tags") }.nil?
|
183
|
+
insist { subject.get("xpath_field") } == ["value1","value2"]
|
184
184
|
end
|
185
185
|
end
|
186
186
|
|
@@ -197,8 +197,8 @@ describe LogStash::Filters::Xml do
|
|
197
197
|
|
198
198
|
# Single value
|
199
199
|
sample("xmldata" => '<foo><key>Français</key></foo>') do
|
200
|
-
insist { subject
|
201
|
-
insist { subject
|
200
|
+
insist { subject.get("tags") }.nil?
|
201
|
+
insist { subject.get("xpath_field")} == ["Français"]
|
202
202
|
end
|
203
203
|
end
|
204
204
|
|
@@ -209,14 +209,13 @@ describe LogStash::Filters::Xml do
|
|
209
209
|
source => "xmldata"
|
210
210
|
xpath => [ "/foo/h:div", "xpath_field" ]
|
211
211
|
remove_namespaces => false
|
212
|
-
store_xml => false
|
213
212
|
}
|
214
213
|
}
|
215
214
|
CONFIG
|
216
215
|
|
217
216
|
# Single value
|
218
217
|
sample("xmldata" => '<foo xmlns:h="http://www.w3.org/TR/html4/"><h:div>Content</h:div></foo>') do
|
219
|
-
insist { subject
|
218
|
+
insist { subject.get("xpath_field") } == ["<h:div>Content</h:div>"]
|
220
219
|
end
|
221
220
|
end
|
222
221
|
|
@@ -228,14 +227,13 @@ describe LogStash::Filters::Xml do
|
|
228
227
|
xpath => [ "/foo/h:div", "xpath_field" ]
|
229
228
|
namespaces => {"h" => "http://www.w3.org/TR/html4/"}
|
230
229
|
remove_namespaces => false
|
231
|
-
store_xml => false
|
232
230
|
}
|
233
231
|
}
|
234
232
|
CONFIG
|
235
233
|
|
236
234
|
# Single value
|
237
235
|
sample("xmldata" => '<foo xmlns:h="http://www.w3.org/TR/html4/"><h:div>Content</h:div></foo>') do
|
238
|
-
insist { subject
|
236
|
+
insist { subject.get("xpath_field") } == ["<h:div>Content</h:div>"]
|
239
237
|
end
|
240
238
|
end
|
241
239
|
|
@@ -247,14 +245,13 @@ describe LogStash::Filters::Xml do
|
|
247
245
|
xpath => [ "/foo/h:div", "xpath_field" ]
|
248
246
|
namespaces => {"h" => "http://www.w3.org/TR/html4/"}
|
249
247
|
remove_namespaces => false
|
250
|
-
store_xml => false
|
251
248
|
}
|
252
249
|
}
|
253
250
|
CONFIG
|
254
251
|
|
255
252
|
# Single value
|
256
253
|
sample("xmldata" => '<foo><h:div xmlns:h="http://www.w3.org/TR/html4/">Content</h:div></foo>') do
|
257
|
-
insist { subject
|
254
|
+
insist { subject.get("xpath_field") } == ["<h:div xmlns:h=\"http://www.w3.org/TR/html4/\">Content</h:div>"]
|
258
255
|
end
|
259
256
|
end
|
260
257
|
|
@@ -265,14 +262,13 @@ describe LogStash::Filters::Xml do
|
|
265
262
|
source => "xmldata"
|
266
263
|
xpath => [ "/foo/div", "xpath_field" ]
|
267
264
|
remove_namespaces => true
|
268
|
-
store_xml => false
|
269
265
|
}
|
270
266
|
}
|
271
267
|
CONFIG
|
272
268
|
|
273
269
|
# Single value
|
274
270
|
sample("xmldata" => '<foo xmlns:h="http://www.w3.org/TR/html4/"><h:div>Content</h:div></foo>') do
|
275
|
-
insist { subject
|
271
|
+
insist { subject.get("xpath_field") } == ["<div>Content</div>"]
|
276
272
|
end
|
277
273
|
end
|
278
274
|
|
@@ -289,7 +285,7 @@ describe LogStash::Filters::Xml do
|
|
289
285
|
|
290
286
|
# Single value
|
291
287
|
sample("xmldata" => '<foo><bar>Content</bar></foo>') do
|
292
|
-
insist { subject
|
288
|
+
insist { subject.get("parseddata") } == { "bar" => ["Content"] }
|
293
289
|
end
|
294
290
|
end
|
295
291
|
|
@@ -306,96 +302,7 @@ describe LogStash::Filters::Xml do
|
|
306
302
|
|
307
303
|
# Single value
|
308
304
|
sample("xmldata" => '<foo><bar>Content</bar></foo>') do
|
309
|
-
insist { subject
|
310
|
-
end
|
311
|
-
end
|
312
|
-
|
313
|
-
context "Using suppress_empty option" do
|
314
|
-
describe "suppress_empty => false" do
|
315
|
-
config <<-CONFIG
|
316
|
-
filter {
|
317
|
-
xml {
|
318
|
-
source => "xmldata"
|
319
|
-
target => "data"
|
320
|
-
suppress_empty => false
|
321
|
-
}
|
322
|
-
}
|
323
|
-
CONFIG
|
324
|
-
|
325
|
-
sample("xmldata" => '<foo><key>value1</key><key></key></foo>') do
|
326
|
-
insist { subject["tags"] }.nil?
|
327
|
-
insist { subject["data"] } == {"key" => ["value1", {}]}
|
328
|
-
end
|
329
|
-
end
|
330
|
-
|
331
|
-
describe "suppress_empty => true" do
|
332
|
-
config <<-CONFIG
|
333
|
-
filter {
|
334
|
-
xml {
|
335
|
-
source => "xmldata"
|
336
|
-
target => "data"
|
337
|
-
suppress_empty => true
|
338
|
-
}
|
339
|
-
}
|
340
|
-
CONFIG
|
341
|
-
|
342
|
-
sample("xmldata" => '<foo><key>value1</key><key></key></foo>') do
|
343
|
-
insist { subject["tags"] }.nil?
|
344
|
-
insist { subject["data"] } == {"key" => ["value1"]}
|
345
|
-
end
|
346
|
-
end
|
347
|
-
end
|
348
|
-
|
349
|
-
context "Using force content option" do
|
350
|
-
describe "force_content => false" do
|
351
|
-
config <<-CONFIG
|
352
|
-
filter {
|
353
|
-
xml {
|
354
|
-
source => "xmldata"
|
355
|
-
target => "data"
|
356
|
-
force_array => false
|
357
|
-
force_content => false
|
358
|
-
}
|
359
|
-
}
|
360
|
-
CONFIG
|
361
|
-
|
362
|
-
sample("xmldata" => '<opt><x>text1</x><y a="2">text2</y></opt>') do
|
363
|
-
insist { subject["tags"] }.nil?
|
364
|
-
insist { subject["data"] } == { 'x' => 'text1', 'y' => { 'a' => '2', 'content' => 'text2' } }
|
365
|
-
end
|
366
|
-
end
|
367
|
-
describe "force_content => true" do
|
368
|
-
config <<-CONFIG
|
369
|
-
filter {
|
370
|
-
xml {
|
371
|
-
source => "xmldata"
|
372
|
-
target => "data"
|
373
|
-
force_array => false
|
374
|
-
force_content => true
|
375
|
-
}
|
376
|
-
}
|
377
|
-
CONFIG
|
378
|
-
|
379
|
-
sample("xmldata" => '<opt><x>text1</x><y a="2">text2</y></opt>') do
|
380
|
-
insist { subject["tags"] }.nil?
|
381
|
-
insist { subject["data"] } == { 'x' => { 'content' => 'text1' }, 'y' => { 'a' => '2', 'content' => 'text2' } }
|
382
|
-
end
|
383
|
-
end
|
384
|
-
end
|
385
|
-
|
386
|
-
describe "plugin registration" do
|
387
|
-
config <<-CONFIG
|
388
|
-
filter {
|
389
|
-
xml {
|
390
|
-
xmldata => "message"
|
391
|
-
store_xml => true
|
392
|
-
}
|
393
|
-
}
|
394
|
-
CONFIG
|
395
|
-
|
396
|
-
sample("xmldata" => "<foo>random message</foo>") do
|
397
|
-
insist { subject }.raises(LogStash::ConfigurationError)
|
305
|
+
insist { subject.get("parseddata") } == { "bar" => "Content" }
|
398
306
|
end
|
399
307
|
end
|
400
|
-
|
401
308
|
end
|
metadata
CHANGED
@@ -1,72 +1,74 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-filter-xml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-05-
|
11
|
+
date: 2016-05-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: logstash-core-plugin-api
|
15
|
-
version_requirements: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ~>
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.0'
|
20
15
|
requirement: !ruby/object:Gem::Requirement
|
21
16
|
requirements:
|
22
|
-
- - ~>
|
17
|
+
- - "~>"
|
23
18
|
- !ruby/object:Gem::Version
|
24
|
-
version: '
|
25
|
-
prerelease: false
|
19
|
+
version: '2.0'
|
26
20
|
type: :runtime
|
27
|
-
|
28
|
-
name: nokogiri
|
21
|
+
prerelease: false
|
29
22
|
version_requirements: !ruby/object:Gem::Requirement
|
30
23
|
requirements:
|
31
|
-
- -
|
24
|
+
- - "~>"
|
32
25
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
26
|
+
version: '2.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: nokogiri
|
34
29
|
requirement: !ruby/object:Gem::Requirement
|
35
30
|
requirements:
|
36
|
-
- -
|
31
|
+
- - ">="
|
37
32
|
- !ruby/object:Gem::Version
|
38
33
|
version: '0'
|
39
|
-
prerelease: false
|
40
34
|
type: :runtime
|
41
|
-
|
42
|
-
name: xml-simple
|
35
|
+
prerelease: false
|
43
36
|
version_requirements: !ruby/object:Gem::Requirement
|
44
37
|
requirements:
|
45
|
-
- -
|
38
|
+
- - ">="
|
46
39
|
- !ruby/object:Gem::Version
|
47
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: xml-simple
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
44
|
requirements:
|
50
|
-
- -
|
45
|
+
- - ">="
|
51
46
|
- !ruby/object:Gem::Version
|
52
47
|
version: '0'
|
53
|
-
prerelease: false
|
54
48
|
type: :runtime
|
55
|
-
|
56
|
-
name: logstash-devutils
|
49
|
+
prerelease: false
|
57
50
|
version_requirements: !ruby/object:Gem::Requirement
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - ">="
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: logstash-devutils
|
62
57
|
requirement: !ruby/object:Gem::Requirement
|
63
58
|
requirements:
|
64
|
-
- -
|
59
|
+
- - ">="
|
65
60
|
- !ruby/object:Gem::Version
|
66
61
|
version: '0'
|
67
|
-
prerelease: false
|
68
62
|
type: :development
|
69
|
-
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: This gem is a Logstash plugin required to be installed on top of the
|
70
|
+
Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This
|
71
|
+
gem is not a stand-alone program
|
70
72
|
email: info@elastic.co
|
71
73
|
executables: []
|
72
74
|
extensions: []
|
@@ -87,24 +89,24 @@ licenses:
|
|
87
89
|
metadata:
|
88
90
|
logstash_plugin: 'true'
|
89
91
|
logstash_group: filter
|
90
|
-
post_install_message:
|
92
|
+
post_install_message:
|
91
93
|
rdoc_options: []
|
92
94
|
require_paths:
|
93
95
|
- lib
|
94
96
|
required_ruby_version: !ruby/object:Gem::Requirement
|
95
97
|
requirements:
|
96
|
-
- -
|
98
|
+
- - ">="
|
97
99
|
- !ruby/object:Gem::Version
|
98
100
|
version: '0'
|
99
101
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
102
|
requirements:
|
101
|
-
- -
|
103
|
+
- - ">="
|
102
104
|
- !ruby/object:Gem::Version
|
103
105
|
version: '0'
|
104
106
|
requirements: []
|
105
|
-
rubyforge_project:
|
106
|
-
rubygems_version: 2.
|
107
|
-
signing_key:
|
107
|
+
rubyforge_project:
|
108
|
+
rubygems_version: 2.5.1
|
109
|
+
signing_key:
|
108
110
|
specification_version: 4
|
109
111
|
summary: Takes a field that contains XML and expands it into an actual datastructure.
|
110
112
|
test_files:
|