logstash-filter-kv 2.1.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +2 -3
- data/Gemfile +3 -1
- data/lib/logstash/filters/kv.rb +3 -43
- data/logstash-filter-kv.gemspec +2 -2
- data/spec/filters/kv_spec.rb +102 -162
- metadata +18 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce56ac9539711025a45de58bdac21db2b31cc422
|
4
|
+
data.tar.gz: 10efa6007a01d8489895835362d3d30ba9c3fa07
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d9e9c20fb456e6030793b40e88ddc2e82a94c46f72caafb2a27945d574bd5d976caabffb01520f1cffdd9c7780d49304d4c26e7939c8269d5e514c6c6459d41
|
7
|
+
data.tar.gz: cf72c8ae0888c2e6a69c9ce0644929ed93b409b76b1ac849fe646a951819ca515adf8179f76ac10ef62de274d9de0d1d16b635ac7194b5151b09995bca2b2c69
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,5 @@
|
|
1
|
-
|
2
|
-
-
|
3
|
-
|
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
|
4
3
|
# 2.0.7
|
5
4
|
- With include_brackets enabled, angle brackets (\< and \>) are treated the same as square brackets and parentheses, making it easy to parse strings like "a=\<b\> c=\<d\>".
|
6
5
|
- An empty value_split option value now gives a useful error message.
|
data/Gemfile
CHANGED
data/lib/logstash/filters/kv.rb
CHANGED
@@ -29,11 +29,6 @@ require "logstash/namespace"
|
|
29
29
|
class LogStash::Filters::KV < LogStash::Filters::Base
|
30
30
|
config_name "kv"
|
31
31
|
|
32
|
-
# Constants used for transform check
|
33
|
-
TRANSFORM_LOWERCASE_KEY = "lowercase"
|
34
|
-
TRANSFORM_UPPERCASE_KEY = "uppercase"
|
35
|
-
TRANSFORM_CAPITALIZE_KEY = "capitalize"
|
36
|
-
|
37
32
|
# A string of characters to trim from the value. This is useful if your
|
38
33
|
# values are wrapped in brackets or are terminated with commas (like postfix
|
39
34
|
# logs).
|
@@ -65,28 +60,6 @@ class LogStash::Filters::KV < LogStash::Filters::Base
|
|
65
60
|
# }
|
66
61
|
config :trimkey, :validate => :string
|
67
62
|
|
68
|
-
# Transform values to lower case, upper case or capitals.
|
69
|
-
#
|
70
|
-
# For example, to capitalize all values:
|
71
|
-
# [source,ruby]
|
72
|
-
# filter {
|
73
|
-
# kv {
|
74
|
-
# transform_value => "capitalize"
|
75
|
-
# }
|
76
|
-
# }
|
77
|
-
config :transform_value, :validate => [TRANSFORM_LOWERCASE_KEY, TRANSFORM_UPPERCASE_KEY, TRANSFORM_CAPITALIZE_KEY]
|
78
|
-
|
79
|
-
# Transform keys to lower case, upper case or capitals.
|
80
|
-
#
|
81
|
-
# For example, to lowercase all keys:
|
82
|
-
# [source,ruby]
|
83
|
-
# filter {
|
84
|
-
# kv {
|
85
|
-
# transform_key => "lowercase"
|
86
|
-
# }
|
87
|
-
# }
|
88
|
-
config :transform_key, :validate => [TRANSFORM_LOWERCASE_KEY, TRANSFORM_UPPERCASE_KEY, TRANSFORM_CAPITALIZE_KEY]
|
89
|
-
|
90
63
|
# A string of characters to use as delimiters for parsing out key-value pairs.
|
91
64
|
#
|
92
65
|
# These characters form a regex character class and thus you must escape special regex
|
@@ -262,7 +235,7 @@ class LogStash::Filters::KV < LogStash::Filters::Base
|
|
262
235
|
|
263
236
|
def filter(event)
|
264
237
|
kv = Hash.new
|
265
|
-
value = event
|
238
|
+
value = event.get(@source)
|
266
239
|
|
267
240
|
case value
|
268
241
|
when nil
|
@@ -282,9 +255,9 @@ class LogStash::Filters::KV < LogStash::Filters::Base
|
|
282
255
|
|
283
256
|
if @target
|
284
257
|
@logger.debug? && @logger.debug("Overwriting existing target field", :target => @target)
|
285
|
-
event
|
258
|
+
event.set(@target, kv)
|
286
259
|
else
|
287
|
-
kv.each{|k, v| event
|
260
|
+
kv.each{|k, v| event.set(k, v)}
|
288
261
|
end
|
289
262
|
|
290
263
|
filter_matched(event)
|
@@ -296,17 +269,6 @@ class LogStash::Filters::KV < LogStash::Filters::Base
|
|
296
269
|
s =~ @value_split_re
|
297
270
|
end
|
298
271
|
|
299
|
-
def transform(text, method)
|
300
|
-
case method
|
301
|
-
when TRANSFORM_LOWERCASE_KEY
|
302
|
-
return text.downcase
|
303
|
-
when TRANSFORM_UPPERCASE_KEY
|
304
|
-
return text.upcase
|
305
|
-
when TRANSFORM_CAPITALIZE_KEY
|
306
|
-
return text.capitalize
|
307
|
-
end
|
308
|
-
end
|
309
|
-
|
310
272
|
def parse(text, event, kv_keys)
|
311
273
|
# short circuit parsing if the text does not contain the @value_split
|
312
274
|
return kv_keys unless has_value_splitter?(text)
|
@@ -318,7 +280,6 @@ class LogStash::Filters::KV < LogStash::Filters::Base
|
|
318
280
|
text.scan(@scan_re) do |key, v1, v2, v3, v4, v5, v6|
|
319
281
|
value = v1 || v2 || v3 || v4 || v5 || v6
|
320
282
|
key = @trimkey ? key.gsub(@trimkey_re, "") : key
|
321
|
-
key = @transform_key ? transform(key, @transform_key) : key
|
322
283
|
|
323
284
|
# Bail out as per the values of include_keys and exclude_keys
|
324
285
|
next if not include_keys.empty? and not include_keys.include?(key)
|
@@ -328,7 +289,6 @@ class LogStash::Filters::KV < LogStash::Filters::Base
|
|
328
289
|
key = event.sprintf(@prefix) + key
|
329
290
|
|
330
291
|
value = @trim ? value.gsub(@trim_re, "") : value
|
331
|
-
value = @transform_value ? transform(value, @transform_value) : value
|
332
292
|
|
333
293
|
# Bail out if inserting duplicate value in key mapping when unique_values
|
334
294
|
# option is set to true.
|
data/logstash-filter-kv.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
|
3
3
|
s.name = 'logstash-filter-kv'
|
4
|
-
s.version = '
|
4
|
+
s.version = '3.0.0'
|
5
5
|
s.licenses = ['Apache License (2.0)']
|
6
6
|
s.summary = "This filter helps automatically parse messages (or specific event fields) which are of the 'foo=bar' variety."
|
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
|
|
25
25
|
s.add_development_dependency 'logstash-devutils'
|
26
26
|
end
|
data/spec/filters/kv_spec.rb
CHANGED
@@ -15,74 +15,14 @@ describe LogStash::Filters::KV do
|
|
15
15
|
CONFIG
|
16
16
|
|
17
17
|
sample "hello=world foo=bar baz=fizz doublequoted=\"hello world\" singlequoted='hello world' bracketsone=(hello world) bracketstwo=[hello world] bracketsthree=<hello world>" do
|
18
|
-
insist { subject
|
19
|
-
insist { subject
|
20
|
-
insist { subject
|
21
|
-
insist { subject
|
22
|
-
insist { subject
|
23
|
-
insist { subject
|
24
|
-
insist { subject
|
25
|
-
insist { subject
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe "test transforming keys to uppercase and values to lowercase" do
|
30
|
-
config <<-CONFIG
|
31
|
-
filter {
|
32
|
-
kv {
|
33
|
-
transform_key => "uppercase"
|
34
|
-
transform_value => "lowercase"
|
35
|
-
}
|
36
|
-
}
|
37
|
-
CONFIG
|
38
|
-
|
39
|
-
sample "hello = world Foo =Bar BAZ= FIZZ doublequoteD = \"hellO worlD\" Singlequoted= 'Hello World' brAckets =(hello World)" do
|
40
|
-
insist { subject["HELLO"] } == "world"
|
41
|
-
insist { subject["FOO"] } == "bar"
|
42
|
-
insist { subject["BAZ"] } == "fizz"
|
43
|
-
insist { subject["DOUBLEQUOTED"] } == "hello world"
|
44
|
-
insist { subject["SINGLEQUOTED"] } == "hello world"
|
45
|
-
insist { subject["BRACKETS"] } == "hello world"
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
describe "test transforming keys to lowercase and values to uppercase" do
|
50
|
-
config <<-CONFIG
|
51
|
-
filter {
|
52
|
-
kv {
|
53
|
-
transform_key => "lowercase"
|
54
|
-
transform_value => "uppercase"
|
55
|
-
}
|
56
|
-
}
|
57
|
-
CONFIG
|
58
|
-
|
59
|
-
sample "Hello = World fOo =bar baz= FIZZ DOUBLEQUOTED = \"hellO worlD\" singlequoted= 'hEllo wOrld' brackets =(HELLO world)" do
|
60
|
-
insist { subject["hello"] } == "WORLD"
|
61
|
-
insist { subject["foo"] } == "BAR"
|
62
|
-
insist { subject["baz"] } == "FIZZ"
|
63
|
-
insist { subject["doublequoted"] } == "HELLO WORLD"
|
64
|
-
insist { subject["singlequoted"] } == "HELLO WORLD"
|
65
|
-
insist { subject["brackets"] } == "HELLO WORLD"
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
describe "test transforming keys and values to capitals" do
|
70
|
-
config <<-CONFIG
|
71
|
-
filter {
|
72
|
-
kv {
|
73
|
-
transform_key => "capitalize"
|
74
|
-
transform_value => "capitalize"
|
75
|
-
}
|
76
|
-
}
|
77
|
-
CONFIG
|
78
|
-
|
79
|
-
sample "Hello = World fOo =bar baz= FIZZ DOUBLEQUOTED = \"hellO worlD\" singlequoted= 'hEllo wOrld' brackets =(HELLO world)" do
|
80
|
-
insist { subject["Hello"] } == "World"
|
81
|
-
insist { subject["Foo"] } == "Bar"
|
82
|
-
insist { subject["Baz"] } == "Fizz"
|
83
|
-
insist { subject["Doublequoted"] } == "Hello world"
|
84
|
-
insist { subject["Singlequoted"] } == "Hello world"
|
85
|
-
insist { subject["Brackets"] } == "Hello world"
|
18
|
+
insist { subject.get("hello") } == "world"
|
19
|
+
insist { subject.get("foo") } == "bar"
|
20
|
+
insist { subject.get("baz") } == "fizz"
|
21
|
+
insist { subject.get("doublequoted") } == "hello world"
|
22
|
+
insist { subject.get("singlequoted") } == "hello world"
|
23
|
+
insist { subject.get("bracketsone") } == "hello world"
|
24
|
+
insist { subject.get("bracketstwo") } == "hello world"
|
25
|
+
insist { subject.get("bracketsthree") } == "hello world"
|
86
26
|
end
|
87
27
|
end
|
88
28
|
|
@@ -94,12 +34,12 @@ describe LogStash::Filters::KV do
|
|
94
34
|
CONFIG
|
95
35
|
|
96
36
|
sample "hello = world foo =bar baz= fizz doublequoted = \"hello world\" singlequoted= 'hello world' brackets =(hello world)" do
|
97
|
-
insist { subject
|
98
|
-
insist { subject
|
99
|
-
insist { subject
|
100
|
-
insist { subject
|
101
|
-
insist { subject
|
102
|
-
insist { subject
|
37
|
+
insist { subject.get("hello") } == "world"
|
38
|
+
insist { subject.get("foo") } == "bar"
|
39
|
+
insist { subject.get("baz") } == "fizz"
|
40
|
+
insist { subject.get("doublequoted") } == "hello world"
|
41
|
+
insist { subject.get("singlequoted") } == "hello world"
|
42
|
+
insist { subject.get("brackets") } == "hello world"
|
103
43
|
end
|
104
44
|
end
|
105
45
|
|
@@ -111,8 +51,8 @@ describe LogStash::Filters::KV do
|
|
111
51
|
CONFIG
|
112
52
|
|
113
53
|
sample 'IKE:=Quick\ Mode\ completion IKE\ IDs:=subnet:\ x.x.x.x\ (mask=\ 255.255.255.254)\ and\ host:\ y.y.y.y' do
|
114
|
-
insist { subject
|
115
|
-
insist { subject
|
54
|
+
insist { subject.get("IKE") } == '=Quick\ Mode\ completion'
|
55
|
+
insist { subject.get('IKE\ IDs') } == '=subnet:\ x.x.x.x\ (mask=\ 255.255.255.254)\ and\ host:\ y.y.y.y'
|
116
56
|
end
|
117
57
|
end
|
118
58
|
|
@@ -125,12 +65,12 @@ describe LogStash::Filters::KV do
|
|
125
65
|
CONFIG
|
126
66
|
|
127
67
|
sample "hello:=world foo:bar baz=:fizz doublequoted:\"hello world\" singlequoted:'hello world' brackets:(hello world)" do
|
128
|
-
insist { subject
|
129
|
-
insist { subject
|
130
|
-
insist { subject
|
131
|
-
insist { subject
|
132
|
-
insist { subject
|
133
|
-
insist { subject
|
68
|
+
insist { subject.get("hello") } == "=world"
|
69
|
+
insist { subject.get("foo") } == "bar"
|
70
|
+
insist { subject.get("baz=") } == "fizz"
|
71
|
+
insist { subject.get("doublequoted") } == "hello world"
|
72
|
+
insist { subject.get("singlequoted") } == "hello world"
|
73
|
+
insist { subject.get("brackets") } == "hello world"
|
134
74
|
end
|
135
75
|
end
|
136
76
|
end
|
@@ -177,7 +117,7 @@ describe LogStash::Filters::KV do
|
|
177
117
|
|
178
118
|
it "should extract kv" do
|
179
119
|
subject.filter(event)
|
180
|
-
expect(event
|
120
|
+
expect(event.get("foo")).to eq(inner)
|
181
121
|
end
|
182
122
|
|
183
123
|
it "should short circuit" do
|
@@ -198,8 +138,8 @@ describe LogStash::Filters::KV do
|
|
198
138
|
|
199
139
|
it "should extract kv" do
|
200
140
|
subject.filter(event)
|
201
|
-
expect(event
|
202
|
-
expect(event
|
141
|
+
expect(event.get("foo")).to eq(foo_val)
|
142
|
+
expect(event.get("[bar][baz]")).to eq(baz_val)
|
203
143
|
end
|
204
144
|
|
205
145
|
it "should short circuit" do
|
@@ -229,12 +169,12 @@ describe LogStash::Filters::KV do
|
|
229
169
|
CONFIG
|
230
170
|
|
231
171
|
sample "?hello=world&foo=bar&baz=fizz&doublequoted=\"hello world\"&singlequoted='hello world'&ignoreme&foo12=bar12" do
|
232
|
-
insist { subject
|
233
|
-
insist { subject
|
234
|
-
insist { subject
|
235
|
-
insist { subject
|
236
|
-
insist { subject
|
237
|
-
insist { subject
|
172
|
+
insist { subject.get("hello") } == "world"
|
173
|
+
insist { subject.get("foo") } == "bar"
|
174
|
+
insist { subject.get("baz") } == "fizz"
|
175
|
+
insist { subject.get("doublequoted") } == "hello world"
|
176
|
+
insist { subject.get("singlequoted") } == "hello world"
|
177
|
+
insist { subject.get("foo12") } == "bar12"
|
238
178
|
end
|
239
179
|
end
|
240
180
|
|
@@ -246,8 +186,8 @@ describe LogStash::Filters::KV do
|
|
246
186
|
CONFIG
|
247
187
|
|
248
188
|
sample "bracketsone=(hello world) bracketstwo=[hello world]" do
|
249
|
-
insist { subject
|
250
|
-
insist { subject
|
189
|
+
insist { subject.get("bracketsone") } == "(hello"
|
190
|
+
insist { subject.get("bracketstwo") } == "[hello"
|
251
191
|
end
|
252
192
|
end
|
253
193
|
|
@@ -261,10 +201,10 @@ describe LogStash::Filters::KV do
|
|
261
201
|
CONFIG
|
262
202
|
|
263
203
|
sample 'IKE="Quick Mode completion" IKE\ IDs = (subnet= x.x.x.x mask= 255.255.255.254 and host=y.y.y.y)' do
|
264
|
-
insist { subject
|
265
|
-
insist { subject
|
266
|
-
insist { subject
|
267
|
-
insist { subject
|
204
|
+
insist { subject.get("IKE") } == 'Quick Mode completion'
|
205
|
+
insist { subject.get('IKE\ IDs')['subnet'] } == 'x.x.x.x'
|
206
|
+
insist { subject.get('IKE\ IDs')['mask'] } == '255.255.255.254'
|
207
|
+
insist { subject.get('IKE\ IDs')['host'] } == 'y.y.y.y'
|
268
208
|
end
|
269
209
|
end
|
270
210
|
|
@@ -276,9 +216,9 @@ describe LogStash::Filters::KV do
|
|
276
216
|
CONFIG
|
277
217
|
|
278
218
|
sample "field1=test|field2=another test|field3=test3" do
|
279
|
-
insist { subject
|
280
|
-
insist { subject
|
281
|
-
insist { subject
|
219
|
+
insist { subject.get("field1") } == "test"
|
220
|
+
insist { subject.get("field2") } == "another test"
|
221
|
+
insist { subject.get("field3") } == "test3"
|
282
222
|
end
|
283
223
|
end
|
284
224
|
|
@@ -290,11 +230,11 @@ describe LogStash::Filters::KV do
|
|
290
230
|
CONFIG
|
291
231
|
|
292
232
|
sample "hello=world foo=bar baz=fizz doublequoted=\"hello world\" singlequoted='hello world'" do
|
293
|
-
insist { subject
|
294
|
-
insist { subject
|
295
|
-
insist { subject
|
296
|
-
insist { subject
|
297
|
-
insist { subject
|
233
|
+
insist { subject.get("__hello") } == "world"
|
234
|
+
insist { subject.get("__foo") } == "bar"
|
235
|
+
insist { subject.get("__baz") } == "fizz"
|
236
|
+
insist { subject.get("__doublequoted") } == "hello world"
|
237
|
+
insist { subject.get("__singlequoted") } == "hello world"
|
298
238
|
end
|
299
239
|
|
300
240
|
end
|
@@ -335,8 +275,8 @@ describe LogStash::Filters::KV do
|
|
335
275
|
CONFIG
|
336
276
|
|
337
277
|
sample "hello=world" do
|
338
|
-
insist { subject
|
339
|
-
insist { subject
|
278
|
+
insist { subject.get("hello") } == "world"
|
279
|
+
insist { subject.get("tags") }.include?("hello")
|
340
280
|
end
|
341
281
|
end
|
342
282
|
context "should not activate when failing" do
|
@@ -347,7 +287,7 @@ describe LogStash::Filters::KV do
|
|
347
287
|
CONFIG
|
348
288
|
|
349
289
|
sample "this is not key value" do
|
350
|
-
insist { subject
|
290
|
+
insist { subject.get("tags") }.nil?
|
351
291
|
end
|
352
292
|
end
|
353
293
|
end
|
@@ -361,8 +301,8 @@ describe LogStash::Filters::KV do
|
|
361
301
|
CONFIG
|
362
302
|
|
363
303
|
sample "hello=world" do
|
364
|
-
insist { subject
|
365
|
-
insist { subject
|
304
|
+
insist { subject.get("hello") } == "world"
|
305
|
+
insist { subject.get("whoa") } == "fancypants"
|
366
306
|
end
|
367
307
|
end
|
368
308
|
|
@@ -374,7 +314,7 @@ describe LogStash::Filters::KV do
|
|
374
314
|
CONFIG
|
375
315
|
|
376
316
|
sample "this is not key value" do
|
377
|
-
reject { subject
|
317
|
+
reject { subject.get("whoa") } == "fancypants"
|
378
318
|
end
|
379
319
|
end
|
380
320
|
end
|
@@ -388,12 +328,12 @@ describe LogStash::Filters::KV do
|
|
388
328
|
CONFIG
|
389
329
|
|
390
330
|
sample "hello=world foo=bar baz=fizz doublequoted=\"hello world\" singlequoted='hello world'" do
|
391
|
-
insist { subject
|
392
|
-
insist { subject
|
393
|
-
insist { subject
|
394
|
-
insist { subject
|
395
|
-
insist { subject
|
396
|
-
insist {subject
|
331
|
+
insist { subject.get("kv")["hello"] } == "world"
|
332
|
+
insist { subject.get("kv")["foo"] } == "bar"
|
333
|
+
insist { subject.get("kv")["baz"] } == "fizz"
|
334
|
+
insist { subject.get("kv")["doublequoted"] } == "hello world"
|
335
|
+
insist { subject.get("kv")["singlequoted"] } == "hello world"
|
336
|
+
insist {subject.get("kv").count } == 5
|
397
337
|
end
|
398
338
|
|
399
339
|
end
|
@@ -406,7 +346,7 @@ describe LogStash::Filters::KV do
|
|
406
346
|
CONFIG
|
407
347
|
|
408
348
|
sample "hello:world:foo:bar:baz:fizz" do
|
409
|
-
insist { subject
|
349
|
+
insist { subject.get("kv") } == nil
|
410
350
|
end
|
411
351
|
end
|
412
352
|
|
@@ -420,11 +360,11 @@ describe LogStash::Filters::KV do
|
|
420
360
|
}
|
421
361
|
CONFIG
|
422
362
|
sample("data" => "hello=world foo=bar baz=fizz doublequoted=\"hello world\" singlequoted='hello world'") do
|
423
|
-
insist { subject
|
424
|
-
insist { subject
|
425
|
-
insist { subject
|
426
|
-
insist { subject
|
427
|
-
insist { subject
|
363
|
+
insist { subject.get("hello") } == "world"
|
364
|
+
insist { subject.get("foo") } == "bar"
|
365
|
+
insist { subject.get("baz") } == "fizz"
|
366
|
+
insist { subject.get("doublequoted") } == "hello world"
|
367
|
+
insist { subject.get("singlequoted") } == "hello world"
|
428
368
|
end
|
429
369
|
end
|
430
370
|
|
@@ -437,11 +377,11 @@ describe LogStash::Filters::KV do
|
|
437
377
|
}
|
438
378
|
CONFIG
|
439
379
|
sample({"@data" => "hello=world foo=bar baz=fizz doublequoted=\"hello world\" singlequoted='hello world'"}) do
|
440
|
-
insist { subject
|
441
|
-
insist { subject
|
442
|
-
insist { subject
|
443
|
-
insist { subject
|
444
|
-
insist { subject
|
380
|
+
insist { subject.get("hello") } == "world"
|
381
|
+
insist { subject.get("foo") } == "bar"
|
382
|
+
insist { subject.get("baz") } == "fizz"
|
383
|
+
insist { subject.get("doublequoted") } == "hello world"
|
384
|
+
insist { subject.get("singlequoted") } == "hello world"
|
445
385
|
end
|
446
386
|
end
|
447
387
|
|
@@ -456,12 +396,12 @@ describe LogStash::Filters::KV do
|
|
456
396
|
}
|
457
397
|
CONFIG
|
458
398
|
sample("data" => "hello=world foo=bar baz=fizz doublequoted=\"hello world\" singlequoted='hello world'") do
|
459
|
-
insist { subject
|
460
|
-
insist { subject
|
461
|
-
insist { subject
|
462
|
-
insist { subject
|
463
|
-
insist { subject
|
464
|
-
insist { subject
|
399
|
+
insist { subject.get("kv")["hello"] } == "world"
|
400
|
+
insist { subject.get("kv")["foo"] } == "bar"
|
401
|
+
insist { subject.get("kv")["baz"] } == "fizz"
|
402
|
+
insist { subject.get("kv")["doublequoted"] } == "hello world"
|
403
|
+
insist { subject.get("kv")["singlequoted"] } == "hello world"
|
404
|
+
insist { subject.get("kv").count } == 5
|
465
405
|
end
|
466
406
|
end
|
467
407
|
|
@@ -475,8 +415,8 @@ describe LogStash::Filters::KV do
|
|
475
415
|
}
|
476
416
|
CONFIG
|
477
417
|
sample "" do
|
478
|
-
insist { subject
|
479
|
-
insist { subject
|
418
|
+
insist { subject.get("non-exisiting-field") } == nil
|
419
|
+
insist { subject.get("kv") } == nil
|
480
420
|
end
|
481
421
|
end
|
482
422
|
|
@@ -490,8 +430,8 @@ describe LogStash::Filters::KV do
|
|
490
430
|
CONFIG
|
491
431
|
|
492
432
|
sample "hello=world foo=bar baz=fizz doublequoted=\"hello world\" singlequoted='hello world'" do
|
493
|
-
insist { subject
|
494
|
-
insist { subject
|
433
|
+
insist { subject.get("foo") } == "bar"
|
434
|
+
insist { subject.get("singlequoted") } == "hello world"
|
495
435
|
end
|
496
436
|
end
|
497
437
|
|
@@ -505,9 +445,9 @@ describe LogStash::Filters::KV do
|
|
505
445
|
CONFIG
|
506
446
|
|
507
447
|
sample "hello=world foo=bar baz=fizz doublequoted=\"hello world\" singlequoted='hello world'" do
|
508
|
-
insist { subject
|
509
|
-
insist { subject
|
510
|
-
insist { subject
|
448
|
+
insist { subject.get("hello") } == "world"
|
449
|
+
insist { subject.get("baz") } == "fizz"
|
450
|
+
insist { subject.get("doublequoted") } == "hello world"
|
511
451
|
end
|
512
452
|
end
|
513
453
|
|
@@ -522,8 +462,8 @@ describe LogStash::Filters::KV do
|
|
522
462
|
CONFIG
|
523
463
|
|
524
464
|
sample "hello=world foo=bar baz=fizz doublequoted=\"hello world\" singlequoted='hello world'" do
|
525
|
-
insist { subject
|
526
|
-
insist { subject
|
465
|
+
insist { subject.get("__foo") } == "bar"
|
466
|
+
insist { subject.get("__singlequoted") } == "hello world"
|
527
467
|
end
|
528
468
|
end
|
529
469
|
|
@@ -538,9 +478,9 @@ describe LogStash::Filters::KV do
|
|
538
478
|
CONFIG
|
539
479
|
|
540
480
|
sample "hello=world foo=bar baz=fizz doublequoted=\"hello world\" singlequoted='hello world'" do
|
541
|
-
insist { subject
|
542
|
-
insist { subject
|
543
|
-
insist { subject
|
481
|
+
insist { subject.get("__hello") } == "world"
|
482
|
+
insist { subject.get("__baz") } == "fizz"
|
483
|
+
insist { subject.get("__doublequoted") } == "hello world"
|
544
484
|
end
|
545
485
|
end
|
546
486
|
|
@@ -555,8 +495,8 @@ describe LogStash::Filters::KV do
|
|
555
495
|
CONFIG
|
556
496
|
|
557
497
|
sample({"data" => "foo=bar baz=fizz", "key" => "foo"}) do
|
558
|
-
insist { subject
|
559
|
-
insist { subject
|
498
|
+
insist { subject.get("foo") } == "bar"
|
499
|
+
insist { subject.get("baz") } == nil
|
560
500
|
end
|
561
501
|
end
|
562
502
|
|
@@ -571,8 +511,8 @@ describe LogStash::Filters::KV do
|
|
571
511
|
CONFIG
|
572
512
|
|
573
513
|
sample({"data" => "foo=bar baz=fizz", "key" => "foo"}) do
|
574
|
-
insist { subject
|
575
|
-
insist { subject
|
514
|
+
insist { subject.get("foo") } == nil
|
515
|
+
insist { subject.get("baz") } == "fizz"
|
576
516
|
end
|
577
517
|
end
|
578
518
|
|
@@ -605,12 +545,12 @@ describe LogStash::Filters::KV do
|
|
605
545
|
CONFIG
|
606
546
|
|
607
547
|
sample "hello=world foo=bar baz=fizz doublequoted=\"hello world\" singlequoted='hello world'" do
|
608
|
-
insist { subject
|
609
|
-
insist { subject
|
610
|
-
insist { subject
|
611
|
-
insist { subject
|
612
|
-
insist { subject
|
613
|
-
insist { subject
|
548
|
+
insist { subject.get("hello") } == "world"
|
549
|
+
insist { subject.get("foo") } == "bar"
|
550
|
+
insist { subject.get("goo") } == "yyy"
|
551
|
+
insist { subject.get("baz") } == "fizz"
|
552
|
+
insist { subject.get("doublequoted") } == "hello world"
|
553
|
+
insist { subject.get("singlequoted") } == "hello world"
|
614
554
|
end
|
615
555
|
end
|
616
556
|
|
@@ -625,8 +565,8 @@ describe LogStash::Filters::KV do
|
|
625
565
|
CONFIG
|
626
566
|
|
627
567
|
sample("happy" => "foo=bar baz=fizz") do
|
628
|
-
insist { subject
|
629
|
-
insist { subject
|
568
|
+
insist { subject.get("[happy][foo]") } == "bar"
|
569
|
+
insist { subject.get("[happy][baz]") } == "fizz"
|
630
570
|
end
|
631
571
|
|
632
572
|
end
|
@@ -643,7 +583,7 @@ describe LogStash::Filters::KV do
|
|
643
583
|
CONFIG
|
644
584
|
|
645
585
|
sample("source" => "foo=bar&foo=yeah&foo=yeah") do
|
646
|
-
insist { subject
|
586
|
+
insist { subject.get("[foo]") } == ["bar", "yeah"]
|
647
587
|
end
|
648
588
|
end
|
649
589
|
|
@@ -658,7 +598,7 @@ describe LogStash::Filters::KV do
|
|
658
598
|
CONFIG
|
659
599
|
|
660
600
|
sample("source" => "foo=bar&foo=yeah&foo=yeah") do
|
661
|
-
insist { subject
|
601
|
+
insist { subject.get("[foo]") } == ["bar", "yeah", "yeah"]
|
662
602
|
end
|
663
603
|
end
|
664
604
|
|
@@ -683,8 +623,8 @@ describe LogStash::Filters::KV do
|
|
683
623
|
context "key and splitters with no value" do
|
684
624
|
it "should ignore the incomplete key/value pairs" do
|
685
625
|
subject.filter(event)
|
686
|
-
expect(event
|
687
|
-
expect(event
|
626
|
+
expect(event.get("AccountStatus")).to eq("4")
|
627
|
+
expect(event.get("IsSuccess")).to eq("True")
|
688
628
|
expect(event.to_hash.keys.sort).to eq(
|
689
629
|
["@timestamp", "@version", "AccountStatus", "IsSuccess", "message"])
|
690
630
|
end
|
metadata
CHANGED
@@ -1,44 +1,46 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-filter-kv
|
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
|
+
name: logstash-core-plugin-api
|
14
15
|
requirement: !ruby/object:Gem::Requirement
|
15
16
|
requirements:
|
16
17
|
- - "~>"
|
17
18
|
- !ruby/object:Gem::Version
|
18
|
-
version: '
|
19
|
-
name: logstash-core-plugin-api
|
20
|
-
prerelease: false
|
19
|
+
version: '2.0'
|
21
20
|
type: :runtime
|
21
|
+
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '2.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
+
name: logstash-devutils
|
28
29
|
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
31
|
- - ">="
|
31
32
|
- !ruby/object:Gem::Version
|
32
33
|
version: '0'
|
33
|
-
name: logstash-devutils
|
34
|
-
prerelease: false
|
35
34
|
type: :development
|
35
|
+
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
-
description: This gem is a Logstash plugin required to be installed on top of the
|
41
|
+
description: This gem is a Logstash plugin required to be installed on top of the
|
42
|
+
Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This
|
43
|
+
gem is not a stand-alone program
|
42
44
|
email: info@elastic.co
|
43
45
|
executables: []
|
44
46
|
extensions: []
|
@@ -59,7 +61,7 @@ licenses:
|
|
59
61
|
metadata:
|
60
62
|
logstash_plugin: 'true'
|
61
63
|
logstash_group: filter
|
62
|
-
post_install_message:
|
64
|
+
post_install_message:
|
63
65
|
rdoc_options: []
|
64
66
|
require_paths:
|
65
67
|
- lib
|
@@ -74,10 +76,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
74
76
|
- !ruby/object:Gem::Version
|
75
77
|
version: '0'
|
76
78
|
requirements: []
|
77
|
-
rubyforge_project:
|
78
|
-
rubygems_version: 2.
|
79
|
-
signing_key:
|
79
|
+
rubyforge_project:
|
80
|
+
rubygems_version: 2.5.1
|
81
|
+
signing_key:
|
80
82
|
specification_version: 4
|
81
|
-
summary: This filter helps automatically parse messages (or specific event fields)
|
83
|
+
summary: This filter helps automatically parse messages (or specific event fields)
|
84
|
+
which are of the 'foo=bar' variety.
|
82
85
|
test_files:
|
83
86
|
- spec/filters/kv_spec.rb
|