logstash-filter-kv 3.1.1 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 39ddb76c9ee42cbde4072495a4e95a11d9b2869f
4
- data.tar.gz: 37a419b9ab32acb5b98aca490cdc8a33ce30fe80
3
+ metadata.gz: bd187e13f268bccf3d773032be91182db9539218
4
+ data.tar.gz: 3869c2cd4527da8298067f4558d809b7c034e87d
5
5
  SHA512:
6
- metadata.gz: d3f8b3dc0f03ea34047b5ca28c6911c5c2a9f500aa8bf711805981415e31996e8356144618dd237a756f76ec781bae83edd1a59aa3e48e689fc387b61b8e805e
7
- data.tar.gz: 043117582b6b089324676523d5f22090ddc50647662433ad8745c84f9211311c00659e8df7a171c92374047a011dc10b1db1c29ec726f0f4e99212b4360afdf5
6
+ metadata.gz: f6d25cd2beb66fad753125e9f0f49806dbf908771ab7ef1ec73584feb5538b36857cec4ba5e6f75df30aecab87d5ee2b573d6c60b9b22096a3cc27484859e42f
7
+ data.tar.gz: 905f6b2f0fc3ab89dfe95a3cfbd2b5e76a7f50835e0722eea69e94b4e01b387386252dacb76200c512d2390d1579647d6863c8138f5e2ee43d3bbb1cd9112552
@@ -1,5 +1,10 @@
1
+ ## 4.0.0
2
+ - breaking: trim and trimkey options are renamed to trim_value and trim_key
3
+ - bugfix: trim_value and trim_key options now remove only leading and trailing characters (#10)
4
+ - feature: new options remove_char_value and remove_char_key to remove all characters from keys/values whatever their position
5
+
1
6
  ## 3.1.1
2
- - Relax constraint on logstash-core-plugin-api to >= 1.60 <= 2.99
7
+ - internal,deps: Relax constraint on logstash-core-plugin-api to >= 1.60 <= 2.99
3
8
 
4
9
  ## 3.1.0
5
10
  - Adds :transform_value and :transform_key options to lowercase/upcase or capitalize all keys/values
@@ -19,6 +19,7 @@ Contributors:
19
19
  * Scott Bessler (scottbessler)
20
20
  * Suyog Rao (suyograo)
21
21
  * piavlo
22
+ * Fabien Baligand (fbaligand)
22
23
 
23
24
  Note: If you've sent us patches, bug reports, or otherwise contributed to
24
25
  Logstash, and you aren't on the list above and want to be, please let us know
@@ -41,14 +41,16 @@ class LogStash::Filters::KV < LogStash::Filters::Base
41
41
  # These characters form a regex character class and thus you must escape special regex
42
42
  # characters like `[` or `]` using `\`.
43
43
  #
44
- # For example, to strip `<`, `>`, `[`, `]` and `,` characters from values:
44
+ # Only leading and trailing characters are trimed from the value.
45
+ #
46
+ # For example, to trim `<`, `>`, `[`, `]` and `,` characters from values:
45
47
  # [source,ruby]
46
48
  # filter {
47
49
  # kv {
48
- # trim => "<>\[\],"
50
+ # trim_value => "<>\[\],"
49
51
  # }
50
52
  # }
51
- config :trim, :validate => :string
53
+ config :trim_value, :validate => :string
52
54
 
53
55
  # A string of characters to trim from the key. This is useful if your
54
56
  # keys are wrapped in brackets or start with space.
@@ -56,14 +58,48 @@ class LogStash::Filters::KV < LogStash::Filters::Base
56
58
  # These characters form a regex character class and thus you must escape special regex
57
59
  # characters like `[` or `]` using `\`.
58
60
  #
59
- # For example, to strip `<` `>` `[` `]` and `,` characters from keys:
61
+ # Only leading and trailing characters are trimed from the key.
62
+ #
63
+ # For example, to trim `<` `>` `[` `]` and `,` characters from keys:
64
+ # [source,ruby]
65
+ # filter {
66
+ # kv {
67
+ # trim_key => "<>\[\],"
68
+ # }
69
+ # }
70
+ config :trim_key, :validate => :string
71
+
72
+ # A string of characters to remove from the value.
73
+ #
74
+ # These characters form a regex character class and thus you must escape special regex
75
+ # characters like `[` or `]` using `\`.
76
+ #
77
+ # Contrary to trim option, all characters are removed from the value, whatever their position.
78
+ #
79
+ # For example, to remove `<`, `>`, `[`, `]` and `,` characters from values:
60
80
  # [source,ruby]
61
81
  # filter {
62
82
  # kv {
63
- # trimkey => "<>\[\],"
83
+ # remove_char_value => "<>\[\],"
64
84
  # }
65
85
  # }
66
- config :trimkey, :validate => :string
86
+ config :remove_char_value, :validate => :string
87
+
88
+ # A string of characters to remove from the key.
89
+ #
90
+ # These characters form a regex character class and thus you must escape special regex
91
+ # characters like `[` or `]` using `\`.
92
+ #
93
+ # Contrary to trim option, all characters are removed from the key, whatever their position.
94
+ #
95
+ # For example, to remove `<` `>` `[` `]` and `,` characters from keys:
96
+ # [source,ruby]
97
+ # filter {
98
+ # kv {
99
+ # remove_char_key => "<>\[\],"
100
+ # }
101
+ # }
102
+ config :remove_char_key, :validate => :string
67
103
 
68
104
  # Transform values to lower case, upper case or capitals.
69
105
  #
@@ -190,7 +226,7 @@ class LogStash::Filters::KV < LogStash::Filters::Base
190
226
  # one unique key/value pair will be preserved.
191
227
  #
192
228
  # For example, consider a source like `from=me from=me`. `[from]` will map to
193
- # an Array with two elements: `["me", "me"]`. to only keep unique key/value pairs,
229
+ # an Array with two elements: `["me", "me"]`. To only keep unique key/value pairs,
194
230
  # you could use this configuration:
195
231
  # [source,ruby]
196
232
  # filter {
@@ -250,8 +286,11 @@ class LogStash::Filters::KV < LogStash::Filters::Base
250
286
  )
251
287
  end
252
288
 
253
- @trim_re = Regexp.new("[#{@trim}]") if @trim
254
- @trimkey_re = Regexp.new("[#{@trimkey}]") if @trimkey
289
+ @trim_value_re = Regexp.new("^[#{@trim_value}]|[#{@trim_value}]$") if @trim_value
290
+ @trim_key_re = Regexp.new("^[#{@trim_key}]|[#{@trim_key}]$") if @trim_key
291
+
292
+ @remove_char_value_re = Regexp.new("[#{@remove_char_value}]") if @remove_char_value
293
+ @remove_char_key_re = Regexp.new("[#{@remove_char_key}]") if @remove_char_key
255
294
 
256
295
  valueRxString = "(?:\"([^\"]+)\"|'([^']+)'"
257
296
  valueRxString += "|\\(([^\\)]+)\\)|\\[([^\\]]+)\\]|<([^>]+)>" if @include_brackets
@@ -317,7 +356,8 @@ class LogStash::Filters::KV < LogStash::Filters::Base
317
356
 
318
357
  text.scan(@scan_re) do |key, v1, v2, v3, v4, v5, v6|
319
358
  value = v1 || v2 || v3 || v4 || v5 || v6
320
- key = @trimkey ? key.gsub(@trimkey_re, "") : key
359
+ key = @trim_key ? key.gsub(@trim_key_re, "") : key
360
+ key = @remove_char_key ? key.gsub(@remove_char_key_re, "") : key
321
361
  key = @transform_key ? transform(key, @transform_key) : key
322
362
 
323
363
  # Bail out as per the values of include_keys and exclude_keys
@@ -327,7 +367,8 @@ class LogStash::Filters::KV < LogStash::Filters::Base
327
367
 
328
368
  key = event.sprintf(@prefix) + key
329
369
 
330
- value = @trim ? value.gsub(@trim_re, "") : value
370
+ value = @trim_value ? value.gsub(@trim_value_re, "") : value
371
+ value = @remove_char_value ? value.gsub(@remove_char_value_re, "") : value
331
372
  value = @transform_value ? transform(value, @transform_value) : value
332
373
 
333
374
  # Bail out if inserting duplicate value in key mapping when unique_values
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-filter-kv'
4
- s.version = '3.1.1'
4
+ s.version = '4.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"
@@ -676,7 +676,7 @@ describe LogStash::Filters::KV do
676
676
  {
677
677
  "field_split" => "\r\n",
678
678
  "value_split" => " ",
679
- "trimkey" => ":"
679
+ "trim_key" => ":"
680
680
  }
681
681
  }
682
682
 
@@ -686,7 +686,67 @@ describe LogStash::Filters::KV do
686
686
  expect(event.get("AccountStatus")).to eq("4")
687
687
  expect(event.get("IsSuccess")).to eq("True")
688
688
  expect(event.to_hash.keys.sort).to eq(
689
- ["@timestamp", "@version", "AccountStatus", "IsSuccess", "message"])
689
+ ["@timestamp", "@version", "AccountStatus", "IsSuccess", "message", "tags"])
690
+ end
691
+ end
692
+ end
693
+
694
+ describe "trim_key/trim_value options : trim only leading and trailing spaces in keys/values (reported in #10)" do
695
+ subject do
696
+ plugin = LogStash::Filters::KV.new(options)
697
+ plugin.register
698
+ plugin
699
+ end
700
+
701
+ let(:message) { "key1= value1 with spaces | key2 with spaces =value2" }
702
+ let(:data) { {"message" => message} }
703
+ let(:event) { LogStash::Event.new(data) }
704
+ let(:options) {
705
+ {
706
+ "field_split" => "\|",
707
+ "value_split" => "=",
708
+ "trim_value" => " ",
709
+ "trim_key" => " "
710
+ }
711
+ }
712
+
713
+ context "key and value with leading, trailing and middle spaces" do
714
+ it "should trim only leading and trailing spaces" do
715
+ subject.filter(event)
716
+ expect(event.get("key1")).to eq("value1 with spaces")
717
+ expect(event.get("key2 with spaces")).to eq("value2")
718
+ expect(event.to_hash.keys.sort).to eq(
719
+ ["@timestamp", "@version", "key1", "key2 with spaces", "message", "tags"])
720
+ end
721
+ end
722
+ end
723
+
724
+ describe "remove_char_key/remove_char_value options : remove all characters in keys/values whatever their position" do
725
+ subject do
726
+ plugin = LogStash::Filters::KV.new(options)
727
+ plugin.register
728
+ plugin
729
+ end
730
+
731
+ let(:message) { "key1= value1 with spaces | key2 with spaces =value2" }
732
+ let(:data) { {"message" => message} }
733
+ let(:event) { LogStash::Event.new(data) }
734
+ let(:options) {
735
+ {
736
+ "field_split" => "\|",
737
+ "value_split" => "=",
738
+ "remove_char_value" => " ",
739
+ "remove_char_key" => " "
740
+ }
741
+ }
742
+
743
+ context "key and value with leading, trailing and middle spaces" do
744
+ it "should remove all spaces" do
745
+ subject.filter(event)
746
+ expect(event.get("key1")).to eq("value1withspaces")
747
+ expect(event.get("key2withspaces")).to eq("value2")
748
+ expect(event.to_hash.keys.sort).to eq(
749
+ ["@timestamp", "@version", "key1", "key2withspaces", "message", "tags"])
690
750
  end
691
751
  end
692
752
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-filter-kv
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.1
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-14 00:00:00.000000000 Z
11
+ date: 2017-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -81,7 +81,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
81
81
  version: '0'
82
82
  requirements: []
83
83
  rubyforge_project:
84
- rubygems_version: 2.6.3
84
+ rubygems_version: 2.4.8
85
85
  signing_key:
86
86
  specification_version: 4
87
87
  summary: This filter helps automatically parse messages (or specific event fields) which are of the 'foo=bar' variety.