fluent-plugin-grepcounter 0.0.1 → 0.1.0.pre
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 +4 -4
- data/.coveralls.yml +1 -0
- data/.gitignore +1 -0
- data/CHANGELOG.md +16 -0
- data/Gemfile +1 -0
- data/README.md +23 -15
- data/fluent-plugin-grepcounter.gemspec +2 -1
- data/lib/fluent/plugin/out_grepcounter.rb +39 -20
- data/spec/out_grepcounter_spec.rb +75 -25
- data/spec/spec_helper.rb +3 -0
- metadata +20 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c342677be8075559528320aa8964dd2208f6d2cb
|
4
|
+
data.tar.gz: 28f6b36798b5023e180a9247ef6480b3997633c6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 96e1fd97aee7feeb3f2843cac84558b4163e95bb175750e766bf5ea66da275556f75b425669c505ab51468b61a1047e8517aa4605f139358acdae4e92d96a7bb
|
7
|
+
data.tar.gz: f6fc309ed2057081fe6a724a213f491c146dede6cad7d490ca92c186918a3e5e09874cce81d6e1da18c0de9feff0395956197b70f74d6bb0b2520eed842675e9
|
data/.coveralls.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
repo_token: i4DJCtdksuIwhBck1tukIjzKoMCxWIIvQ
|
data/.gitignore
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
## 0.1.0 (2013/05/01)
|
2
|
+
|
3
|
+
Features:
|
4
|
+
|
5
|
+
- aggregate tag/all
|
6
|
+
|
7
|
+
Changes:
|
8
|
+
|
9
|
+
- Remove `output_matched_message` option, and make it default.
|
10
|
+
- Rename `output_with_joined_delimiter` to `output_delimiter`.
|
11
|
+
|
12
|
+
Bugfixes:
|
13
|
+
|
14
|
+
## 0.0.1
|
15
|
+
|
16
|
+
First version
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,15 +1,9 @@
|
|
1
|
-
# fluent-plugin-grepcounter [](http://travis-ci.org/sonots/fluent-plugin-grepcounter) [](https://gemnasium.com/sonots/fluent-plugin-grepcounter)
|
1
|
+
# fluent-plugin-grepcounter [](http://travis-ci.org/sonots/fluent-plugin-grepcounter) [](https://gemnasium.com/sonots/fluent-plugin-grepcounter) [](https://coveralls.io/r/sonots/fluent-plugin-grepcounter)
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
### GrepCounterOutput
|
6
|
-
|
7
|
-
Fluentd plugin to count the number of matched messages
|
3
|
+
Fluentd plugin to count the number of matched messages.
|
8
4
|
|
9
5
|
## Configuration
|
10
6
|
|
11
|
-
## GrepCounterOutput
|
12
|
-
|
13
7
|
Assume inputs from another plugin are as belows:
|
14
8
|
|
15
9
|
syslog.host1: {"message":"2013/01/13T07:02:11.124202 INFO GET /ping" }
|
@@ -29,11 +23,11 @@ An example of grepcounter configuration:
|
|
29
23
|
add_tag_prefix warn.count
|
30
24
|
</source>
|
31
25
|
|
32
|
-
|
26
|
+
Then, output bocomes as belows:
|
33
27
|
|
34
|
-
warn.count.syslog.host1: {"count":2,"
|
28
|
+
warn.count.syslog.host1: {"count":2,"message":["2013/01/13T07:02:13.232645 WARN POST /auth","2013/01/13T07:02:43.632145 WARN POST /login"]}
|
35
29
|
|
36
|
-
Another example of grepcounter configuration
|
30
|
+
Another example of grepcounter configuration to use `output_delimiter`:
|
37
31
|
|
38
32
|
<match syslog.**>
|
39
33
|
type grepcounter
|
@@ -43,13 +37,26 @@ Another example of grepcounter configuration:
|
|
43
37
|
exclude favicon.ico
|
44
38
|
threshold 1
|
45
39
|
add_tag_prefix warn.count
|
46
|
-
|
47
|
-
output_with_joined_delimiter \n
|
40
|
+
output_delimiter \n
|
48
41
|
</source>
|
49
42
|
|
50
|
-
|
43
|
+
Then, output bocomes as belows. You can use the `message` field is joined with \n.
|
44
|
+
|
45
|
+
warn.count.syslog.host1: {"count":2,"message":"2013/01/13T07:02:13.232645 WARN POST /auth\n2013/01/13T07:02:43.632145 WARN POST /login"}
|
46
|
+
|
47
|
+
## Parameters
|
48
|
+
|
49
|
+
- aggregate
|
51
50
|
|
52
|
-
|
51
|
+
Count by each `tag` or `all`. The default value is `tag`.
|
52
|
+
|
53
|
+
- output_tag
|
54
|
+
|
55
|
+
The output tag. Required for aggregate `all`.
|
56
|
+
|
57
|
+
## ChaangeLog
|
58
|
+
|
59
|
+
See [CHANGELOG.md](CHANGELOG.md) for details.
|
53
60
|
|
54
61
|
## Contributing
|
55
62
|
|
@@ -62,3 +69,4 @@ Outputs as belows:
|
|
62
69
|
## Copyright
|
63
70
|
|
64
71
|
Copyright (c) 2013 Naotoshi SEO. See [LICENSE](LICENSE) for details.
|
72
|
+
|
@@ -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-grepcounter"
|
6
|
-
s.version = "0.0.
|
6
|
+
s.version = "0.1.0.pre"
|
7
7
|
s.authors = ["Naotoshi SEO"]
|
8
8
|
s.email = ["sonots@gmail.com"]
|
9
9
|
s.homepage = "https://github.com/sonots/fluent-plugin-grepcounter"
|
@@ -21,5 +21,6 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.add_development_dependency "rake"
|
22
22
|
s.add_development_dependency "rspec"
|
23
23
|
s.add_development_dependency "pry"
|
24
|
+
s.add_development_dependency 'coveralls'
|
24
25
|
# s.add_development_dependency "delorean"
|
25
26
|
end
|
@@ -1,15 +1,16 @@
|
|
1
|
+
# encoding: UTF-8
|
1
2
|
class Fluent::GrepCounterOutput < Fluent::Output
|
2
3
|
Fluent::Plugin.register_output('grepcounter', self)
|
3
4
|
|
4
5
|
config_param :input_key, :string
|
5
|
-
config_param :regexp, :string
|
6
|
+
config_param :regexp, :string, :default => nil
|
6
7
|
config_param :count_interval, :time, :default => 5
|
7
8
|
config_param :exclude, :string, :default => nil
|
8
9
|
config_param :threshold, :integer, :default => 1
|
9
|
-
config_param :output_tag, :string, :default =>
|
10
|
-
config_param :add_tag_prefix, :string, :default =>
|
11
|
-
config_param :
|
12
|
-
config_param :
|
10
|
+
config_param :output_tag, :string, :default => nil
|
11
|
+
config_param :add_tag_prefix, :string, :default => 'count'
|
12
|
+
config_param :output_delimiter, :string, :default => nil
|
13
|
+
config_param :aggregate, :string, :default => 'tag'
|
13
14
|
|
14
15
|
attr_accessor :matches
|
15
16
|
attr_accessor :last_checked
|
@@ -23,8 +24,15 @@ class Fluent::GrepCounterOutput < Fluent::Output
|
|
23
24
|
@exclude = Regexp.compile(@exclude) if @exclude
|
24
25
|
@threshold = @threshold.to_i
|
25
26
|
|
26
|
-
|
27
|
-
raise Fluent::ConfigError, "
|
27
|
+
unless ['tag', 'all'].include?(@aggregate)
|
28
|
+
raise Fluent::ConfigError, "grepcounter aggregate allows tag/all"
|
29
|
+
end
|
30
|
+
|
31
|
+
case @aggregate
|
32
|
+
when 'all'
|
33
|
+
raise Fluent::ConfigError, "output_tag must be specified with aggregate all" if @output_tag.nil?
|
34
|
+
when 'tag'
|
35
|
+
# raise Fluent::ConfigError, "add_tag_prefix must be specified with aggregate tag" if @add_tag_prefix.nil?
|
28
36
|
end
|
29
37
|
|
30
38
|
@matches = {}
|
@@ -49,9 +57,9 @@ class Fluent::GrepCounterOutput < Fluent::Output
|
|
49
57
|
# filter out and insert
|
50
58
|
es.each do |time,record|
|
51
59
|
value = record[@input_key]
|
52
|
-
next
|
60
|
+
next if @regexp and !@regexp.match(value)
|
53
61
|
next if @exclude and @exclude.match(value)
|
54
|
-
matches << value
|
62
|
+
matches << value
|
55
63
|
count += 1
|
56
64
|
end
|
57
65
|
# thread safe merge
|
@@ -83,23 +91,34 @@ class Fluent::GrepCounterOutput < Fluent::Output
|
|
83
91
|
def flush_emit(step)
|
84
92
|
time = Fluent::Engine.now
|
85
93
|
flushed_counts, flushed_matches, @counts, @matches = @counts, @matches, {}, {}
|
86
|
-
|
87
|
-
|
88
|
-
matches =
|
89
|
-
|
90
|
-
|
91
|
-
|
94
|
+
|
95
|
+
if @aggregate == 'all'
|
96
|
+
count = 0; matches = []
|
97
|
+
flushed_counts.keys.each do |tag|
|
98
|
+
count += flushed_counts[tag]
|
99
|
+
matches += flushed_matches[tag]
|
100
|
+
end
|
101
|
+
output = generate_output(count, matches)
|
102
|
+
Fluent::Engine.emit(@output_tag, time, output) if output
|
103
|
+
else
|
104
|
+
flushed_counts.keys.each do |tag|
|
105
|
+
count = flushed_counts[tag]
|
106
|
+
matches = flushed_matches[tag]
|
107
|
+
output = generate_output(count, matches, tag)
|
108
|
+
tag = @output_tag ? @output_tag : "#{@add_tag_prefix}.#{tag}"
|
109
|
+
Fluent::Engine.emit(tag, time, output) if output
|
110
|
+
end
|
92
111
|
end
|
93
112
|
end
|
94
113
|
|
95
|
-
def generate_output(
|
114
|
+
def generate_output(count, matches, tag = nil)
|
96
115
|
return nil if count < @threshold
|
97
116
|
output = {}
|
98
117
|
output['count'] = count
|
99
|
-
output['
|
100
|
-
|
101
|
-
|
102
|
-
output['
|
118
|
+
output['message'] = @output_delimiter.nil? ? matches : matches.join(@output_delimiter)
|
119
|
+
if tag
|
120
|
+
output['input_tag'] = tag
|
121
|
+
output['input_tag_last'] = tag.split('.').last
|
103
122
|
end
|
104
123
|
output
|
105
124
|
end
|
@@ -5,7 +5,6 @@ describe Fluent::GrepCounterOutput do
|
|
5
5
|
before { Fluent::Test.setup }
|
6
6
|
CONFIG = %[
|
7
7
|
input_key message
|
8
|
-
regexp WARN
|
9
8
|
]
|
10
9
|
let(:tag) { 'syslog.host1' }
|
11
10
|
let(:driver) { Fluent::Test::OutputTestDriver.new(Fluent::GrepCounterOutput, tag).configure(config) }
|
@@ -17,8 +16,21 @@ describe Fluent::GrepCounterOutput do
|
|
17
16
|
it { expect { driver }.to raise_error(Fluent::ConfigError) }
|
18
17
|
end
|
19
18
|
|
20
|
-
context
|
21
|
-
let(:config)
|
19
|
+
context 'invalid aggregate' do
|
20
|
+
let(:config) do
|
21
|
+
CONFIG + %[
|
22
|
+
aggregate foo
|
23
|
+
]
|
24
|
+
end
|
25
|
+
it { expect { driver }.to raise_error(Fluent::ConfigError) }
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'no tag for aggregate all' do
|
29
|
+
let(:config) do
|
30
|
+
CONFIG + %[
|
31
|
+
aggregate all
|
32
|
+
]
|
33
|
+
end
|
22
34
|
it { expect { driver }.to raise_error(Fluent::ConfigError) }
|
23
35
|
end
|
24
36
|
end
|
@@ -30,13 +42,11 @@ describe Fluent::GrepCounterOutput do
|
|
30
42
|
let(:config) { CONFIG }
|
31
43
|
its(:input_key) { should == "message" }
|
32
44
|
its(:count_interval) { should == 5 }
|
33
|
-
its(:regexp) { should
|
45
|
+
its(:regexp) { should be_nil }
|
34
46
|
its(:exclude) { should be_nil }
|
35
47
|
its(:threshold) { should == 1 }
|
36
|
-
its(:output_tag) { should
|
37
|
-
its(:add_tag_prefix) { should
|
38
|
-
its(:output_matched_message) { should be_false }
|
39
|
-
its(:output_with_joined_delimiter) { should be_nil }
|
48
|
+
its(:output_tag) { should be_nil }
|
49
|
+
its(:add_tag_prefix) { should == 'count' }
|
40
50
|
end
|
41
51
|
end
|
42
52
|
end
|
@@ -60,11 +70,28 @@ describe Fluent::GrepCounterOutput do
|
|
60
70
|
pending
|
61
71
|
end
|
62
72
|
|
73
|
+
context 'default' do
|
74
|
+
let(:config) { CONFIG }
|
75
|
+
before do
|
76
|
+
Fluent::Engine.stub(:now).and_return(time)
|
77
|
+
Fluent::Engine.should_receive(:emit).with("count.#{tag}", time, {"count"=>4,
|
78
|
+
"message"=>["2013/01/13T07:02:11.124202 INFO GET /ping","2013/01/13T07:02:13.232645 WARN POST /auth","2013/01/13T07:02:21.542145 WARN GET /favicon.ico","2013/01/13T07:02:43.632145 WARN POST /login"],
|
79
|
+
"input_tag" => tag,
|
80
|
+
"input_tag_last" => tag.split('.').last,
|
81
|
+
})
|
82
|
+
end
|
83
|
+
it { emit }
|
84
|
+
end
|
85
|
+
|
63
86
|
context 'regexp' do
|
64
87
|
let(:config) { CONFIG + %[ regexp WARN ] }
|
65
88
|
before do
|
66
89
|
Fluent::Engine.stub(:now).and_return(time)
|
67
|
-
Fluent::Engine.should_receive(:emit).with("count", time, {"count"=>3,
|
90
|
+
Fluent::Engine.should_receive(:emit).with("count.#{tag}", time, {"count"=>3,
|
91
|
+
"message"=>["2013/01/13T07:02:13.232645 WARN POST /auth","2013/01/13T07:02:21.542145 WARN GET /favicon.ico","2013/01/13T07:02:43.632145 WARN POST /login"],
|
92
|
+
"input_tag" => tag,
|
93
|
+
"input_tag_last" => tag.split('.').last,
|
94
|
+
})
|
68
95
|
end
|
69
96
|
it { emit }
|
70
97
|
end
|
@@ -72,12 +99,17 @@ describe Fluent::GrepCounterOutput do
|
|
72
99
|
context 'exclude' do
|
73
100
|
let(:config) do
|
74
101
|
CONFIG + %[
|
102
|
+
regexp WARN
|
75
103
|
exclude favicon
|
76
104
|
]
|
77
105
|
end
|
78
106
|
before do
|
79
107
|
Fluent::Engine.stub(:now).and_return(time)
|
80
|
-
Fluent::Engine.should_receive(:emit).with("count", time, {"count"=>2,
|
108
|
+
Fluent::Engine.should_receive(:emit).with("count.#{tag}", time, {"count"=>2,
|
109
|
+
"message"=>["2013/01/13T07:02:13.232645 WARN POST /auth","2013/01/13T07:02:43.632145 WARN POST /login"],
|
110
|
+
"input_tag" => tag,
|
111
|
+
"input_tag_last" => tag.split('.').last,
|
112
|
+
})
|
81
113
|
end
|
82
114
|
it { emit }
|
83
115
|
end
|
@@ -85,12 +117,17 @@ describe Fluent::GrepCounterOutput do
|
|
85
117
|
context 'threshold (less than or equal to)' do
|
86
118
|
let(:config) do
|
87
119
|
CONFIG + %[
|
120
|
+
regexp WARN
|
88
121
|
threshold 3
|
89
122
|
]
|
90
123
|
end
|
91
124
|
before do
|
92
125
|
Fluent::Engine.stub(:now).and_return(time)
|
93
|
-
Fluent::Engine.should_receive(:emit).with("count", time, {"count"=>3,
|
126
|
+
Fluent::Engine.should_receive(:emit).with("count.#{tag}", time, {"count"=>3,
|
127
|
+
"message"=>["2013/01/13T07:02:13.232645 WARN POST /auth","2013/01/13T07:02:21.542145 WARN GET /favicon.ico","2013/01/13T07:02:43.632145 WARN POST /login"],
|
128
|
+
"input_tag" => tag,
|
129
|
+
"input_tag_last" => tag.split('.').last,
|
130
|
+
})
|
94
131
|
end
|
95
132
|
it { emit }
|
96
133
|
end
|
@@ -98,6 +135,7 @@ describe Fluent::GrepCounterOutput do
|
|
98
135
|
context 'threshold (greater)' do
|
99
136
|
let(:config) do
|
100
137
|
CONFIG + %[
|
138
|
+
regexp WARN
|
101
139
|
threshold 4
|
102
140
|
]
|
103
141
|
end
|
@@ -111,12 +149,17 @@ describe Fluent::GrepCounterOutput do
|
|
111
149
|
context 'output_tag' do
|
112
150
|
let(:config) do
|
113
151
|
CONFIG + %[
|
152
|
+
regexp WARN
|
114
153
|
output_tag foo
|
115
154
|
]
|
116
155
|
end
|
117
156
|
before do
|
118
157
|
Fluent::Engine.stub(:now).and_return(time)
|
119
|
-
Fluent::Engine.should_receive(:emit).with("foo", time, {"count"=>3,
|
158
|
+
Fluent::Engine.should_receive(:emit).with("foo", time, {"count"=>3,
|
159
|
+
"message"=>["2013/01/13T07:02:13.232645 WARN POST /auth","2013/01/13T07:02:21.542145 WARN GET /favicon.ico","2013/01/13T07:02:43.632145 WARN POST /login"],
|
160
|
+
"input_tag" => tag,
|
161
|
+
"input_tag_last" => tag.split('.').last,
|
162
|
+
})
|
120
163
|
end
|
121
164
|
it { emit }
|
122
165
|
end
|
@@ -124,45 +167,52 @@ describe Fluent::GrepCounterOutput do
|
|
124
167
|
context 'add_tag_prefix' do
|
125
168
|
let(:config) do
|
126
169
|
CONFIG + %[
|
170
|
+
regexp WARN
|
127
171
|
add_tag_prefix foo
|
128
172
|
]
|
129
173
|
end
|
130
174
|
before do
|
131
175
|
Fluent::Engine.stub(:now).and_return(time)
|
132
|
-
Fluent::Engine.should_receive(:emit).with("foo.#{tag}", time, {"count"=>3,
|
176
|
+
Fluent::Engine.should_receive(:emit).with("foo.#{tag}", time, {"count"=>3,
|
177
|
+
"message"=>["2013/01/13T07:02:13.232645 WARN POST /auth","2013/01/13T07:02:21.542145 WARN GET /favicon.ico","2013/01/13T07:02:43.632145 WARN POST /login"],
|
178
|
+
"input_tag" => tag,
|
179
|
+
"input_tag_last" => tag.split('.').last,
|
180
|
+
})
|
133
181
|
end
|
134
182
|
it { emit }
|
135
183
|
end
|
136
184
|
|
137
|
-
context '
|
185
|
+
context 'output_delimiter' do
|
138
186
|
let(:config) do
|
187
|
+
# \\n shall be \n in config file
|
139
188
|
CONFIG + %[
|
140
|
-
|
189
|
+
regexp WARN
|
190
|
+
output_delimiter \\n
|
141
191
|
]
|
142
192
|
end
|
143
193
|
before do
|
144
194
|
Fluent::Engine.stub(:now).and_return(time)
|
145
|
-
Fluent::Engine.should_receive(:emit).with("count", time, {
|
146
|
-
"
|
147
|
-
"
|
195
|
+
Fluent::Engine.should_receive(:emit).with("count.#{tag}", time, {"count"=>3,
|
196
|
+
"message"=>"2013/01/13T07:02:13.232645 WARN POST /auth\\n2013/01/13T07:02:21.542145 WARN GET /favicon.ico\\n2013/01/13T07:02:43.632145 WARN POST /login",
|
197
|
+
"input_tag" => tag,
|
198
|
+
"input_tag_last" => tag.split('.').last,
|
148
199
|
})
|
149
200
|
end
|
150
201
|
it { emit }
|
151
202
|
end
|
152
203
|
|
153
|
-
context '
|
204
|
+
context 'aggregate all' do
|
154
205
|
let(:config) do
|
155
|
-
# \\n shall be \n in config file
|
156
206
|
CONFIG + %[
|
157
|
-
|
158
|
-
|
207
|
+
regexp WARN
|
208
|
+
aggregate all
|
209
|
+
output_tag count
|
159
210
|
]
|
160
211
|
end
|
161
212
|
before do
|
162
213
|
Fluent::Engine.stub(:now).and_return(time)
|
163
|
-
Fluent::Engine.should_receive(:emit).with("count", time, {
|
164
|
-
"
|
165
|
-
"message"=>"2013/01/13T07:02:13.232645 WARN POST /auth\\n2013/01/13T07:02:21.542145 WARN GET /favicon.ico\\n2013/01/13T07:02:43.632145 WARN POST /login"
|
214
|
+
Fluent::Engine.should_receive(:emit).with("count", time, {"count"=>3,
|
215
|
+
"message"=>["2013/01/13T07:02:13.232645 WARN POST /auth","2013/01/13T07:02:21.542145 WARN GET /favicon.ico","2013/01/13T07:02:43.632145 WARN POST /login"],
|
166
216
|
})
|
167
217
|
end
|
168
218
|
it { emit }
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-grepcounter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.1.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Naotoshi SEO
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fluentd
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: coveralls
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
description: Count the number of matched messages
|
70
84
|
email:
|
71
85
|
- sonots@gmail.com
|
@@ -73,10 +87,12 @@ executables: []
|
|
73
87
|
extensions: []
|
74
88
|
extra_rdoc_files: []
|
75
89
|
files:
|
90
|
+
- .coveralls.yml
|
76
91
|
- .gitignore
|
77
92
|
- .rdebugrc
|
78
93
|
- .rspec
|
79
94
|
- .travis.yml
|
95
|
+
- CHANGELOG.md
|
80
96
|
- Gemfile
|
81
97
|
- LICENSE
|
82
98
|
- README.md
|
@@ -99,9 +115,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
99
115
|
version: '0'
|
100
116
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
117
|
requirements:
|
102
|
-
- - '
|
118
|
+
- - '>'
|
103
119
|
- !ruby/object:Gem::Version
|
104
|
-
version:
|
120
|
+
version: 1.3.1
|
105
121
|
requirements: []
|
106
122
|
rubyforge_project: fluent-plugin-grepcounter
|
107
123
|
rubygems_version: 2.0.0
|