fluent-plugin-filter-kv-parser 0.0.3 → 0.0.4

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
  SHA256:
3
- metadata.gz: d03d782c5c6058dff073d09bf35fa161acb555661e6f825ff205919051f3e19a
4
- data.tar.gz: b5edd6ad840a00eb31bd957b5548f01e41530d71649f68c3ae3b7f3312d60af4
3
+ metadata.gz: 06f855fd104485ee6469bda9fd116eb9a5a0e04d186297b246d21ee37f82f931
4
+ data.tar.gz: 14f5e141dff49e437dcb3d9dd047869057d1a9c2ca5de02b695fbfb06d60b107
5
5
  SHA512:
6
- metadata.gz: 49db420a06c68ce7c32dcaa3465d5d11d8fcff4ce206c95220479c6b139cd06fcbea8c0dd5e2b76db07e74855b07bc6f792384c4c29ff35e2a1504f03c303638
7
- data.tar.gz: 36c16f8fb13e98ba8317062bd288a2f92ce9baf5419c6bae8ac0aa26b70328582f006424ae83dcc2ead3075b72f6d8877af7ad467993b74ed2b5045ad665a334
6
+ metadata.gz: a93b2f140f1f0914dbefa08d19d7f9f50033ff4c09e6fe20ca61c01281b27aae32e28051fd87f56723989e3b5ed03b5df3de976a3163deb4355959d121b4e12e
7
+ data.tar.gz: c7adfcf6a29ff9016495800e3e95c9cb2b23baa9233ce9a621adf63960849e83df20235753e1214f4e813d085af0bf5afd7a958032cd8ba3191ed56157a5bbe6
data/README.md CHANGED
@@ -25,6 +25,8 @@ gem install fluent-plugin-filter-kv-parser
25
25
  remove_prefix /^prefix/
26
26
  keys_delimiter /\s+/
27
27
  kv_delimiter_chart '='
28
+ filtered_keys akey,bkey,ckey
29
+ filtered_keys_regex /^sub_[a-zA-Z_0-9]+/
28
30
  </filter>
29
31
 
30
32
  <match **>
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "fluent-plugin-filter-kv-parser"
6
- s.version = "0.0.3"
6
+ s.version = "0.0.4"
7
7
  s.authors = ["Al-waleed Shihadeh"]
8
8
  s.email = ["wshihadeh.dev@gmail.com"]
9
9
  s.homepage = "https://github.com/wshihadeh/fluent-plugin-filter-kv-parser.git"
@@ -11,17 +11,29 @@ module Fluent
11
11
  config_param :remove_prefix, :string, default: ''
12
12
  config_param :keys_delimiter, :string, default: '/\s+/'
13
13
  config_param :kv_delimiter_chart, :string, default: '='
14
+ config_param :filtered_keys, :string, default: nil
15
+ config_param :filtered_keys_regex, :string, default: nil
16
+ config_param :filtered_keys_delimiter, :string, default: ','
14
17
 
15
18
 
16
19
  def configure(conf)
17
20
  super
18
- if @keys_delimiter[0] == '/' and @keys_delimiter[-1] == '/'
21
+
22
+ regex = /^\/.+\/$/
23
+
24
+ if regex.match(@keys_delimiter.to_s)
19
25
  @keys_delimiter = Regexp.new(@keys_delimiter[1..-2])
20
26
  end
21
27
 
22
- if @remove_prefix[0] == '/' and @remove_prefix[-1] == '/'
28
+ if regex.match(@remove_prefix.to_s)
23
29
  @remove_prefix = Regexp.new(@remove_prefix[1..-2])
24
30
  end
31
+
32
+ if regex.match(@filtered_keys_regex.to_s)
33
+ @filtered_keys_regex = Regexp.new(@filtered_keys_regex[1..-2])
34
+ end
35
+
36
+ @filtered_keys_list = parse_filtered_keys_parameter
25
37
  end
26
38
 
27
39
  def filter(tag, time, record)
@@ -29,19 +41,20 @@ module Fluent
29
41
 
30
42
  log_line = extract_log_line record[@key]
31
43
 
32
- if @use_regex
33
- record.merge! regex_filter(log_line)
34
- else
35
- record.merge! delimiter_filter(log_line)
36
- end
37
-
44
+ record.merge! extracted_keys(log_line)
38
45
  record.tap { |r| r.delete(@key) if @remove_key }.compact
39
46
  end
40
47
 
41
48
  private
42
49
 
43
50
  def regex_filter(line)
44
- "#{line} ".scan(/(?<key>[^ ]+)=(?<value>[^=]+)\s/).to_h
51
+ "#{line} ".scan(/(?<key>[a-zA-Z_0-9]+)=(?<value>[^=]+)\s/).to_h
52
+ end
53
+
54
+ def extracted_keys(line)
55
+ keys = @use_regex ? regex_filter(line) : delimiter_filter(line)
56
+ filtered_keys = @filtered_keys_list.empty? ? keys : keys.slice(*@filtered_keys_list)
57
+ @filtered_keys_regex.nil? ? filtered_keys : filtered_keys.merge(keys.select{ |k,v| @filtered_keys_regex.match(k.to_s)})
45
58
  end
46
59
 
47
60
  def delimiter_filter(line)
@@ -53,6 +66,10 @@ module Fluent
53
66
  items
54
67
  end
55
68
 
69
+ def parse_filtered_keys_parameter
70
+ @filtered_keys.to_s.split(@filtered_keys_delimiter)
71
+ end
72
+
56
73
  def extract_log_line(line)
57
74
  line.gsub(@remove_prefix,'').strip
58
75
  end
@@ -146,9 +146,46 @@ class KeyValueFilterTest < Test::Unit::TestCase
146
146
  'log' => "Start Request key=10 skey='this is a miltispace line' akey=20 zkey=30 dkey=4",
147
147
  }
148
148
  filtered = filter(d, [msg]).first[2]
149
- puts filtered.inspect
150
149
  assert_equal 6, filtered.count
151
150
  assert_equal "'this is a miltispace line'", filtered['skey']
152
151
  assert_equal false, filtered.key?("log")
153
152
  end
153
+
154
+ test 'test_filter_keys' do
155
+ d = create_driver(%[
156
+ key log
157
+ remove_key true
158
+ remove_prefix /^[^ ]+\s[^ ]+/
159
+ use_regex true
160
+ filtered_keys key,gkeyn,nkey,skey,akey,zkey
161
+ ])
162
+ msg = {
163
+ 'time' => '2013-02-12 22:01:15 UTC',
164
+ 'log' => "Start Request key=10 gkey=100 nkey=108 skey='this is a miltispace line' akey=20 zkey=30 dkey=4",
165
+ }
166
+ filtered = filter(d, [msg]).first[2]
167
+ assert_equal 6, filtered.count
168
+ assert_equal "'this is a miltispace line'", filtered['skey']
169
+ assert_equal false, filtered.key?("log")
170
+ end
171
+
172
+ test 'test_filter_keys_with_regex' do
173
+ d = create_driver(%[
174
+ key log
175
+ remove_key true
176
+ remove_prefix /^[^ ]+\s[^ ]+/
177
+ use_regex true
178
+ filtered_keys key,gkeyn,nkey,skey,akey,zkey
179
+ filtered_keys_regex /^sub_[a-zA-Z_0-9]+/
180
+ ])
181
+ msg = {
182
+ 'time' => '2013-02-12 22:01:15 UTC',
183
+ 'log' => "Start Request sub_key=0 sub_akey=11 sub_zkey=12 key=10 gkey=100 nkey=108 skey='this is a miltispace line' akey=20 zkey=30 dkey=4",
184
+ }
185
+ filtered = filter(d, [msg]).first[2]
186
+ assert_equal 9, filtered.count
187
+ assert_equal "'this is a miltispace line'", filtered['skey']
188
+ assert_equal "0", filtered['sub_key']
189
+ assert_equal false, filtered.key?("log")
190
+ end
154
191
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-filter-kv-parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Al-waleed Shihadeh