fluent-plugin-parse_request_body 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e3d528441f6fd97325700bfddb162787bd74740b4c2daf677d1f8d136b7234da
4
+ data.tar.gz: e860534ad5a27a7784efd9482910eec6debd6d5c43af887af9c1b7f3de0c6def
5
+ SHA512:
6
+ metadata.gz: 2b7c36a29ac960ec14ba04eede5c73e13e908ea2eeed58417569178263aefbd3f53c6e4765689408acba2ec40ad4163b5fc312cbd95bc61c14105a6333d8a318
7
+ data.tar.gz: 7629939eb2b5439c1a4cc918a198c7d09f1ce650a448da7a10aa3659b41d6ed9ded782e66f3b384ba2cb6eed1bfbfeae6fc695c0fab2d795d2214aad4be3ec16
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ *.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ vendor/bundle
data/.travis.yml ADDED
@@ -0,0 +1,13 @@
1
+ sudo: false
2
+ language: ruby
3
+
4
+ rvm:
5
+ - 2.1
6
+ - 2.2
7
+ - 2.3.1
8
+
9
+ gemfile:
10
+ - gemfiles/fluentd_0.14.gemfile
11
+
12
+ before_script: gem update bundler
13
+ script: bundle exec rake test
data/Appraisals ADDED
@@ -0,0 +1,3 @@
1
+ appraise 'fluentd-0.14' do
2
+ gem 'fluentd', '~> 0.14.0'
3
+ end
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,2 @@
1
+ Copyright (c) 2018 EkiSong
2
+ Apache License, Version 2.0
data/README.md ADDED
@@ -0,0 +1 @@
1
+ # fluent-plugin-parse_request_body
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new(:test) do |test|
6
+ test.libs << 'lib' << 'test'
7
+ test.pattern = 'test/**/test_*.rb'
8
+ test.verbose = true
9
+ end
@@ -0,0 +1,23 @@
1
+ Gem::Specification.new do |gem|
2
+ gem.name = 'fluent-plugin-parse_request_body'
3
+ gem.version = '0.0.1'
4
+ gem.authors = ['EkiSong']
5
+ gem.email = ['yifriday0614@gmail.com']
6
+ gem.homepage = 'https://github.com/yifriday/fluent-plugin-parse_request_body.git'
7
+ gem.description = %q{Fluentd plugin to parse request body.}
8
+ gem.summary = %q{Fluentd plugin to parse request body}
9
+ gem.license = 'MIT'
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.require_paths = ['lib']
15
+
16
+ if defined?(RUBY_VERSION) && RUBY_VERSION > '2.2'
17
+ gem.add_development_dependency "test-unit", '~> 3'
18
+ end
19
+
20
+ gem.add_development_dependency 'rake'
21
+ gem.add_development_dependency 'appraisal'
22
+ gem.add_runtime_dependency 'fluentd', ['>= 0.14.8', '< 2']
23
+ end
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "fluentd", "~> 0.14.0"
6
+
7
+ gemspec :path => "../"
@@ -0,0 +1,31 @@
1
+ require "fluent/plugin/filter"
2
+ require "fluent/plugin/parse_request_body_extractor"
3
+
4
+ module Fluent::Plugin
5
+ class ParseRequestBodyFilter < Fluent::Plugin::Filter
6
+
7
+ Fluent::Plugin.register_filter('parse_request_body', self)
8
+
9
+ desc "point a key whose value contains URL string."
10
+ config_param :key, :string
11
+ desc "If set, only the key/value whose key is included only will be added to the record."
12
+ config_param :only, :string, default: nil
13
+ desc "If set, the key/value whose key is included except will NOT be added to the record."
14
+ config_param :except, :string, default: nil
15
+ desc "If set to true, the original key url will be discarded from the record."
16
+ config_param :discard_key, :bool, default: false
17
+ desc "Prefix of fields."
18
+ config_param :add_field_prefix, :string, default: nil
19
+ desc "If set to true, permit blank key."
20
+ config_param :permit_blank_key, :bool, default: false
21
+
22
+ def configure(conf)
23
+ super
24
+ @extractor = Fluent::Plugin::ParseRequestBodyExtractor.new(self, conf)
25
+ end
26
+
27
+ def filter(tag, time, record)
28
+ @extractor.add_query_params_field(record)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,47 @@
1
+ require "fluent/plugin/output"
2
+ require "fluent/plugin/parse_request_body_extractor"
3
+
4
+ module Fluent::Plugin
5
+ class ParseRequestBodyOutput < Fluent::Plugin::Output
6
+ include Fluent::HandleTagNameMixin
7
+
8
+ Fluent::Plugin.register_output('parse_request_body', self)
9
+
10
+ helpers :event_emitter
11
+
12
+ desc "point a key whose value contains URL string."
13
+ config_param :key, :string
14
+ desc "If set, only the key/value whose key is included only will be added to the record."
15
+ config_param :only, :string, default: nil
16
+ desc "If set, the key/value whose key is included except will NOT be added to the record."
17
+ config_param :except, :string, default: nil
18
+ desc "If set to true, the original key url will be discarded from the record."
19
+ config_param :discard_key, :bool, default: false
20
+ desc "Prefix of fields."
21
+ config_param :add_field_prefix, :string, default: nil
22
+ desc "If set to true, permit blank key."
23
+ config_param :permit_blank_key, :bool, default: false
24
+
25
+ def configure(conf)
26
+ super
27
+ @extractor = Fluent::Plugin::ParseRequestBodyExtractor.new(self, conf)
28
+ end
29
+
30
+ def multi_workers_ready?
31
+ true
32
+ end
33
+
34
+ def filter_record(tag, time, record)
35
+ record = @extractor.add_query_params_field(record)
36
+ super(tag, time, record)
37
+ end
38
+
39
+ def process(tag, es)
40
+ es.each do |time, record|
41
+ t = tag.dup
42
+ filter_record(t, time, record)
43
+ router.emit(t, time, record)
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,92 @@
1
+ require 'uri'
2
+ require 'cgi/util'
3
+ require 'webrick'
4
+
5
+ module Fluent::Plugin
6
+ class ParseRequestBodyExtractor
7
+
8
+ attr_reader :log
9
+
10
+ def initialize(plugin, conf)
11
+ @log = plugin.log
12
+
13
+ if plugin.is_a?(Fluent::Plugin::Output)
14
+ unless have_tag_option?(plugin)
15
+ raise Fluent::ConfigError, "out_parse_request_body: At least one of remove_tag_prefix/remove_tag_suffix/add_tag_prefix/add_tag_suffix is required to be set."
16
+ end
17
+ end
18
+
19
+ @key = plugin.key
20
+ @only = plugin.only
21
+ @except = plugin.except
22
+ @discard_key = plugin.discard_key
23
+ @add_field_prefix = plugin.add_field_prefix
24
+ @permit_blank_key = plugin.permit_blank_key
25
+
26
+ if @only
27
+ @include_keys = @only.split(/\s*,\s*/).inject({}) do |hash, i|
28
+ hash[i] = true
29
+ hash
30
+ end
31
+ end
32
+
33
+ if @except
34
+ @exclude_keys = @except.split(/\s*,\s*/).inject({}) do |hash, i|
35
+ hash[i] = true
36
+ hash
37
+ end
38
+ end
39
+ end
40
+
41
+ def add_query_params_field(record)
42
+ return record unless record[@key]
43
+ add_query_params(record[@key], record)
44
+ record.delete(@key) if @discard_key
45
+ record
46
+ end
47
+
48
+ private
49
+
50
+ def have_tag_option?(plugin)
51
+ plugin.remove_tag_prefix ||
52
+ plugin.remove_tag_suffix ||
53
+ plugin.add_tag_prefix ||
54
+ plugin.add_tag_suffix
55
+ end
56
+
57
+ def create_field_key(field_key)
58
+ if add_field_prefix?
59
+ "#{@add_field_prefix}#{field_key}"
60
+ else
61
+ field_key
62
+ end
63
+ end
64
+
65
+ def add_field_prefix?
66
+ !!@add_field_prefix
67
+ end
68
+
69
+ def permit_blank_key?
70
+ @permit_blank_key
71
+ end
72
+
73
+ def add_query_params(body, record)
74
+ return if body.nil?
75
+ body.split('&').each do |pair|
76
+ key, value = pair.split('=', 2).map { |i| CGI.unescape(i) }
77
+ next if (key.nil? || key.empty?) && (!permit_blank_key? || value.nil? || value.empty?)
78
+ key ||= ''
79
+ value ||= ''
80
+
81
+ key = create_field_key(key)
82
+ if @only
83
+ record[key] = value if @include_keys.has_key?(key)
84
+ elsif @except
85
+ record[key] = value if !@exclude_keys.has_key?(key)
86
+ else
87
+ record[key] = value
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
data/test/.DS_Store ADDED
Binary file
@@ -0,0 +1,162 @@
1
+ require 'test_helper'
2
+ require 'fluent/plugin/filter_parse_request_body'
3
+
4
+ class ParseRequestBodyFilterTest < Test::Unit::TestCase
5
+ URL = 'http://example.com:80'
6
+ BODY_ONLY = {
7
+ 'uid' => 123456,
8
+ 'sid' => '123456fjkjafkjadk',
9
+ 'location' => '134.234,144.333'
10
+ }
11
+
12
+ def setup
13
+ Fluent::Test.setup
14
+ @time = Fluent::Engine.now
15
+ end
16
+
17
+ def create_driver(conf)
18
+ Fluent::Test::Driver::Filter.new(
19
+ Fluent::Plugin::ParseRequestBodyFilter
20
+ ).configure(conf)
21
+ end
22
+
23
+ def filter(config, messages)
24
+ d = create_driver(config)
25
+ d.run(default_tag: "test") {
26
+ messages.each {|message|
27
+ d.feed(@time, message)
28
+ }
29
+ }
30
+ d.filtered_records
31
+ end
32
+
33
+ def test_configure
34
+ d = create_driver(%[
35
+ key request_body
36
+ only uid, sid
37
+ ])
38
+
39
+ assert_equal 'request_body', d.instance.key
40
+ assert_equal 'uid, sid', d.instance.only
41
+ end
42
+
43
+ def test_filter
44
+ config = %[
45
+ key request_body
46
+ ]
47
+
48
+ record = {
49
+ 'request_body' => BODY_ONLY,
50
+ }
51
+ expected = {
52
+ 'request_body' => BODY_ONLY,
53
+ 'location' => '134.234,144.333'
54
+ }
55
+ filtered = filter(config, [record])
56
+ assert_equal(expected, filtered[0])
57
+ end
58
+
59
+ def test_filter_with_field_prefix
60
+ config = %[
61
+ key request_body
62
+ add_field_prefix query_
63
+ ]
64
+
65
+ record = {
66
+ 'request_body' => BODY_ONLY,
67
+ }
68
+ expected = {
69
+ 'request_body' => BODY_ONLY,
70
+ 'query_uid' => 123456,
71
+ 'query_sid' => '123456fjkjafkjadk',
72
+ 'query_location' => '134.234,144.333'
73
+ }
74
+ filtered = filter(config, [record])
75
+ assert_equal(expected, filtered[0])
76
+ end
77
+
78
+ def test_filter_with_only
79
+ config = %[
80
+ key request_body
81
+ only uid, sid
82
+ ]
83
+
84
+ record = { 'request_body' => BODY_ONLY }
85
+ expected = {
86
+ 'request_body' => BODY_ONLY,
87
+ 'uid' => 123456,
88
+ 'sid' => '123456fjkjafkjadk',
89
+ }
90
+ filtered = filter(config, [record])
91
+ assert_equal(expected, filtered[0])
92
+ end
93
+
94
+ def test_filter_with_except
95
+ config = %[
96
+ key request_body
97
+ except uid
98
+ ]
99
+
100
+ record = { 'request_body' => BODY_ONLY }
101
+ expected = {
102
+ 'sid' => '123456fjkjafkjadk',
103
+ 'location' => '134.234,144.333',
104
+ }
105
+ filtered = filter(config, [record])
106
+ assert_equal(expected, filtered[0])
107
+ end
108
+
109
+ def test_filter_with_discard
110
+ config = %[
111
+ key url
112
+ discard_key true
113
+ ]
114
+
115
+ record = { 'request_body' => BODY_ONLY }
116
+ expected = {
117
+ 'uid' => 123456,
118
+ 'sid' => '123456fjkjafkjadk',
119
+ 'location' => '134.234,144.333'
120
+ }
121
+ filtered = filter(config, [record])
122
+ assert_equal(expected, filtered[0])
123
+ end
124
+
125
+ def test_filter_multi_records
126
+ config = %[
127
+ key request_body
128
+ only uid, sid
129
+ ]
130
+ records = [
131
+ { 'request_body' => BODY_ONLY },
132
+ { 'request_body' => BODY_ONLY },
133
+ { 'request_body' => BODY_ONLY }
134
+ ]
135
+ expected = [
136
+ { 'request_body' => BODY_ONLY, 'uid' => 123456, 'sid' => '123456fjkjafkjadk' },
137
+ { 'request_body' => BODY_ONLY, 'uid' => 123456, 'sid' => '123456fjkjafkjadk' },
138
+ { 'request_body' => BODY_ONLY, 'uid' => 123456, 'sid' => '123456fjkjafkjadk' }
139
+ ]
140
+ filtered = filter(config, records)
141
+ assert_equal(expected, filtered)
142
+ end
143
+
144
+ def test_emit_without_match_key
145
+ config = %[
146
+ key no_such_key
147
+ only uid, sid
148
+ ]
149
+ record = { 'request_body' => BODY_ONLY }
150
+ filtered = filter(config, [record])
151
+ assert_equal(record, filtered[0])
152
+ end
153
+
154
+ def test_emit_with_invalid_url
155
+ config = %[
156
+ key request_body
157
+ ]
158
+ record = { 'request_body' => BODY_ONLY }
159
+ filtered = filter(config, [record])
160
+ assert_equal([record], filtered)
161
+ end
162
+ end
@@ -0,0 +1,193 @@
1
+ require 'test_helper'
2
+ require 'fluent/plugin/out_parse_request_body'
3
+
4
+ class ParseRequestBodyOutputTest < Test::Unit::TestCase
5
+ URL = 'http://example.com:80'
6
+ BODY_ONLY = {
7
+ 'uid' => 123456,
8
+ 'sid' => '123456fjkjafkjadk',
9
+ 'location' => '134.234,144.333'
10
+ }
11
+
12
+ def setup
13
+ Fluent::Test.setup
14
+ end
15
+
16
+ def create_driver(conf)
17
+ Fluent::Test::Driver::Output.new(
18
+ Fluent::Plugin::ParseRequestBodyOutput
19
+ ).configure(conf)
20
+ end
21
+
22
+ def test_configure
23
+ d = create_driver(%[
24
+ key request_body
25
+ add_tag_prefix extracted.
26
+ only uid, sid
27
+ ])
28
+
29
+ assert_equal 'request_body', d.instance.key
30
+ assert_equal 'extracted.', d.instance.add_tag_prefix
31
+ assert_equal 'uid, sid', d.instance.only
32
+
33
+ # when mandatory keys not set
34
+ assert_raise(Fluent::ConfigError) do
35
+ create_driver(%[
36
+ key uid
37
+ ])
38
+ end
39
+ end
40
+
41
+ def test_filter_record
42
+ d = create_driver(%[
43
+ key request_body
44
+ add_tag_prefix extracted.
45
+ ])
46
+
47
+ record = {
48
+ 'request_body' => BODY_ONLY,
49
+ }
50
+ d.instance.filter_record('test', Time.now, record)
51
+
52
+ assert_equal BODY_ONLY, record['request_body']
53
+ assert_equal 123456, record['uid']
54
+ assert_equal '123456fjkjafkjadk', record['sid']
55
+ assert_equal '134.234,144.333', record['location']
56
+ end
57
+
58
+ def test_filter_record_with_field_prefix
59
+ d = create_driver(%[
60
+ key request_body
61
+ add_field_prefix query_
62
+ add_tag_prefix extracted.
63
+ ])
64
+
65
+ record = {
66
+ 'request_body' => BODY_ONLY,
67
+ }
68
+ d.instance.filter_record('test', Time.now, record)
69
+
70
+ assert_equal BODY_ONLY, record['request_body']
71
+ assert_nil record['uid']
72
+ assert_nil record['sid']
73
+ assert_nil record['location']
74
+ assert_equal 123456, record['query_uid']
75
+ assert_equal '123456fjkjafkjadk', record['query_sid']
76
+ assert_equal '134.234,144.333', record['query_location']
77
+ end
78
+
79
+ def test_filter_record_with_only
80
+ d = create_driver(%[
81
+ key request_body
82
+ add_tag_prefix extracted.
83
+ only uid, sid
84
+ ])
85
+
86
+ record = { 'request_body' => BODY_ONLY }
87
+ d.instance.filter_record('test', Time.now, record)
88
+
89
+ assert_equal BODY_ONLY, record['request_body']
90
+ assert_equal 123456, record['uid']
91
+ assert_equal '123456fjkjafkjadk', record['sid']
92
+ assert_nil record['location']
93
+ end
94
+
95
+ def test_filter_record_with_except
96
+ d = create_driver(%[
97
+ key request_body
98
+ add_tag_prefix extracted.
99
+ except baz, モリス
100
+ ])
101
+
102
+ record = { 'request_body' => BODY_ONLY }
103
+ d.instance.filter_record('test', Time.now, record)
104
+
105
+ assert_equal BODY_ONLY, record['request_body']
106
+ assert_equal 123456, record['uid']
107
+ assert_nil record['sid']
108
+ assert_nil record['location']
109
+ end
110
+
111
+ def test_filter_record_with_discard
112
+ d = create_driver(%[
113
+ key request_body
114
+ add_tag_prefix extracted.
115
+ discard_key true
116
+ ])
117
+
118
+ record = { 'request_body' => BODY_ONLY }
119
+ d.instance.filter_record('test', Time.now, record)
120
+
121
+ assert_nil record['nil']
122
+ assert_nil record['request_body']
123
+ assert_equal 123456, record['uid']
124
+ assert_equal '123456fjkjafkjadk', record['sid']
125
+ assert_equal '134.234,144.333', record['location']
126
+ end
127
+
128
+ def test_emit
129
+ d = create_driver(%[
130
+ key request_body
131
+ add_tag_prefix extracted.
132
+ only uid, sid
133
+ ])
134
+ d.run(default_tag: "test") { d.feed('request_body' => BODY_ONLY) }
135
+ events = d.events
136
+
137
+ assert_equal 1, events.count
138
+ assert_equal 'extracted.test', events[0][0]
139
+ assert_equal BODY_ONLY, events[0][2]['request_body']
140
+ assert_equal 123456, events[0][2]['uid']
141
+ assert_equal '123456fjkjafkjadk', events[0][2]['sid']
142
+ end
143
+
144
+ def test_emit_multi
145
+ d = create_driver(%[
146
+ key request_body
147
+ add_tag_prefix extracted.
148
+ only uid, sid
149
+ ])
150
+ d.run(default_tag: "test") do
151
+ d.feed('request_body' => BODY_ONLY)
152
+ d.feed('request_body' => BODY_ONLY)
153
+ d.feed('request_body' => BODY_ONLY)
154
+ end
155
+ events = d.events
156
+
157
+ assert_equal 3, events.count
158
+
159
+ events.each do |e|
160
+ assert_equal 'extracted.test', e[0]
161
+ assert_equal BODY_ONLY, e[2]['request_body']
162
+ assert_equal 123456, e[2]['uid']
163
+ assert_equal '123456fjkjafkjadk', e[2]['sid']
164
+ end
165
+ end
166
+
167
+ def test_emit_without_match_key
168
+ d = create_driver(%[
169
+ key no_such_key
170
+ add_tag_prefix extracted.
171
+ only uid, sid
172
+ ])
173
+ d.run(default_tag: "test") { d.feed('request_body' => BODY_ONLY) }
174
+ events = d.events
175
+
176
+ assert_equal 1, events.count
177
+ assert_equal 'extracted.test', events[0][0]
178
+ assert_equal BODY_ONLY, events[0][2]['request_body']
179
+ end
180
+
181
+ def test_emit_with_invalid_url
182
+ d = create_driver(%[
183
+ key request_body
184
+ add_tag_prefix extracted.
185
+ ])
186
+ d.run(default_tag: "test") { d.feed('request_body' => 'invalid url') }
187
+ events = d.events
188
+
189
+ assert_equal 1, events.count
190
+ assert_equal 'extracted.test', events[0][0]
191
+ assert_equal 'invalid url', events[0][2]['request_body']
192
+ end
193
+ end
@@ -0,0 +1,9 @@
1
+ require 'bundler/setup'
2
+ require 'test/unit'
3
+
4
+ $LOAD_PATH.unshift(File.join(__dir__, '..', 'lib'))
5
+ $LOAD_PATH.unshift(__dir__)
6
+
7
+ require 'fluent/test'
8
+ require 'fluent/test/driver/output'
9
+ require 'fluent/test/driver/filter'
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-parse_request_body
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - EkiSong
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-09-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: appraisal
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: fluentd
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 0.14.8
48
+ - - "<"
49
+ - !ruby/object:Gem::Version
50
+ version: '2'
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: 0.14.8
58
+ - - "<"
59
+ - !ruby/object:Gem::Version
60
+ version: '2'
61
+ description: Fluentd plugin to parse request body.
62
+ email:
63
+ - yifriday0614@gmail.com
64
+ executables: []
65
+ extensions: []
66
+ extra_rdoc_files: []
67
+ files:
68
+ - ".gitignore"
69
+ - ".travis.yml"
70
+ - Appraisals
71
+ - Gemfile
72
+ - LICENSE
73
+ - README.md
74
+ - Rakefile
75
+ - fluent-plugin-parse_request_body.gemspec
76
+ - gemfiles/fluentd_0.14.gemfile
77
+ - lib/fluent/plugin/filter_parse_request_body.rb
78
+ - lib/fluent/plugin/out_parse_request_body.rb
79
+ - lib/fluent/plugin/parse_request_body_extractor.rb
80
+ - test/.DS_Store
81
+ - test/plugin/test_filter_parse_request_body.rb
82
+ - test/plugin/test_out_parse_request_body.rb
83
+ - test/test_helper.rb
84
+ homepage: https://github.com/yifriday/fluent-plugin-parse_request_body.git
85
+ licenses:
86
+ - MIT
87
+ metadata: {}
88
+ post_install_message:
89
+ rdoc_options: []
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ required_rubygems_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ requirements: []
103
+ rubyforge_project:
104
+ rubygems_version: 2.7.7
105
+ signing_key:
106
+ specification_version: 4
107
+ summary: Fluentd plugin to parse request body
108
+ test_files:
109
+ - test/.DS_Store
110
+ - test/plugin/test_filter_parse_request_body.rb
111
+ - test/plugin/test_out_parse_request_body.rb
112
+ - test/test_helper.rb