logstash-filter-kv 3.0.1 → 3.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0c3a30f76a6b29f2c91f79432efd228a4c1738c5
4
- data.tar.gz: b7feb914934bb80c192f2417677fa821e43f79a0
3
+ metadata.gz: a5b62e210c5764ad9af5185a3a18806a811dee71
4
+ data.tar.gz: 638c1ce5512591a29bf4b501d727fd36e42f5c80
5
5
  SHA512:
6
- metadata.gz: 08612fb7ba9e11af65575bb0cb6c0e693d29bf400737ec8a7502e31c4483acd4b34c0bbd652c908e1b0368e5b795b1a30e10161b8f193a6a4f0f84d5bb06a571
7
- data.tar.gz: da170f52b4dca7c396fda8c9a0307d5ccf01f3182efb1985931d80385ccffda72294994efd9aceafcb1b47da52d915323f67eff2a61d438e0e9cdd81b0905f44
6
+ metadata.gz: 37fa6c205f3151745222a53dd25e3083ae8fc048008f45a2f6300e3402c61953d7b4c798353697486da5964afe48d77828cd869872e20c02fc8c7f1dc7648de3
7
+ data.tar.gz: 847df25bdce86f4f22fa1f8e716f88cd7d7bce4fa0a698f2752a4f96d161a63d3f6196abf11bd18a2bb9dc71593592f1bc9f4906d89664f8d6bf54e736d6a1f6
data/CHANGELOG.md CHANGED
@@ -1,3 +1,5 @@
1
+ ## 3.1.0
2
+ - Adds :transform_value and :transform_key options to lowercase/upcase or capitalize all keys/values
1
3
  ## 3.0.1
2
4
  - Republish all the gems under jruby.
3
5
  ## 3.0.0
@@ -29,6 +29,11 @@ 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
+
32
37
  # A string of characters to trim from the value. This is useful if your
33
38
  # values are wrapped in brackets or are terminated with commas (like postfix
34
39
  # logs).
@@ -60,6 +65,28 @@ class LogStash::Filters::KV < LogStash::Filters::Base
60
65
  # }
61
66
  config :trimkey, :validate => :string
62
67
 
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
+
63
90
  # A string of characters to use as delimiters for parsing out key-value pairs.
64
91
  #
65
92
  # These characters form a regex character class and thus you must escape special regex
@@ -269,6 +296,17 @@ class LogStash::Filters::KV < LogStash::Filters::Base
269
296
  s =~ @value_split_re
270
297
  end
271
298
 
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
+
272
310
  def parse(text, event, kv_keys)
273
311
  # short circuit parsing if the text does not contain the @value_split
274
312
  return kv_keys unless has_value_splitter?(text)
@@ -280,6 +318,7 @@ class LogStash::Filters::KV < LogStash::Filters::Base
280
318
  text.scan(@scan_re) do |key, v1, v2, v3, v4, v5, v6|
281
319
  value = v1 || v2 || v3 || v4 || v5 || v6
282
320
  key = @trimkey ? key.gsub(@trimkey_re, "") : key
321
+ key = @transform_key ? transform(key, @transform_key) : key
283
322
 
284
323
  # Bail out as per the values of include_keys and exclude_keys
285
324
  next if not include_keys.empty? and not include_keys.include?(key)
@@ -289,6 +328,7 @@ class LogStash::Filters::KV < LogStash::Filters::Base
289
328
  key = event.sprintf(@prefix) + key
290
329
 
291
330
  value = @trim ? value.gsub(@trim_re, "") : value
331
+ value = @transform_value ? transform(value, @transform_value) : value
292
332
 
293
333
  # Bail out if inserting duplicate value in key mapping when unique_values
294
334
  # option is set to true.
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-filter-kv'
4
- s.version = '3.0.1'
4
+ s.version = '3.1.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"
@@ -26,6 +26,66 @@ describe LogStash::Filters::KV do
26
26
  end
27
27
  end
28
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.get("HELLO") } == "world"
41
+ insist { subject.get("FOO") } == "bar"
42
+ insist { subject.get("BAZ") } == "fizz"
43
+ insist { subject.get("DOUBLEQUOTED") } == "hello world"
44
+ insist { subject.get("SINGLEQUOTED") } == "hello world"
45
+ insist { subject.get("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.get("hello") } == "WORLD"
61
+ insist { subject.get("foo") } == "BAR"
62
+ insist { subject.get("baz") } == "FIZZ"
63
+ insist { subject.get("doublequoted") } == "HELLO WORLD"
64
+ insist { subject.get("singlequoted") } == "HELLO WORLD"
65
+ insist { subject.get("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.get("Hello") } == "World"
81
+ insist { subject.get("Foo") } == "Bar"
82
+ insist { subject.get("Baz") } == "Fizz"
83
+ insist { subject.get("Doublequoted") } == "Hello world"
84
+ insist { subject.get("Singlequoted") } == "Hello world"
85
+ insist { subject.get("Brackets") } == "Hello world"
86
+ end
87
+ end
88
+
29
89
  describe "test spaces attached to the field_split" do
30
90
  config <<-CONFIG
31
91
  filter {
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-filter-kv
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.1.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-05-09 00:00:00.000000000 Z
11
+ date: 2016-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
+ name: logstash-core-plugin-api
15
+ version_requirements: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
14
20
  requirement: !ruby/object:Gem::Requirement
15
21
  requirements:
16
- - - "~>"
22
+ - - ~>
17
23
  - !ruby/object:Gem::Version
18
24
  version: '2.0'
19
- name: logstash-core-plugin-api
20
25
  prerelease: false
21
26
  type: :runtime
27
+ - !ruby/object:Gem::Dependency
28
+ name: logstash-devutils
22
29
  version_requirements: !ruby/object:Gem::Requirement
23
30
  requirements:
24
- - - "~>"
31
+ - - '>='
25
32
  - !ruby/object:Gem::Version
26
- version: '2.0'
27
- - !ruby/object:Gem::Dependency
33
+ version: '0'
28
34
  requirement: !ruby/object:Gem::Requirement
29
35
  requirements:
30
- - - ">="
36
+ - - '>='
31
37
  - !ruby/object:Gem::Version
32
38
  version: '0'
33
- name: logstash-devutils
34
39
  prerelease: false
35
40
  type: :development
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
41
  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
42
42
  email: info@elastic.co
43
43
  executables: []
@@ -65,12 +65,12 @@ require_paths:
65
65
  - lib
66
66
  required_ruby_version: !ruby/object:Gem::Requirement
67
67
  requirements:
68
- - - ">="
68
+ - - '>='
69
69
  - !ruby/object:Gem::Version
70
70
  version: '0'
71
71
  required_rubygems_version: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - '>='
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  requirements: []