fluent-plugin-grepcounter 0.0.1 → 0.1.0.pre

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: e62f5b7c59d5196eb5a38630bb8a1292883f1d07
4
- data.tar.gz: 64a2bede2b197b7f693207bc63b6a71101df8c50
3
+ metadata.gz: c342677be8075559528320aa8964dd2208f6d2cb
4
+ data.tar.gz: 28f6b36798b5023e180a9247ef6480b3997633c6
5
5
  SHA512:
6
- metadata.gz: 49ae4eca6395c2b381631ced8bebdb30d3451cd4f504a817b2ec858a45c9acbd198385c465062f93968e547cf49c52ec6f124d6e198b9a72457c1048a37e9cd7
7
- data.tar.gz: f9d7d8b9c50c6d45e22af946edef16d440e147c76f1e2507bf48dd272c837dd52282db09fa9d3411aa6cf44971c35f8c410a40622ac746b23118ec041286be79
6
+ metadata.gz: 96e1fd97aee7feeb3f2843cac84558b4163e95bb175750e766bf5ea66da275556f75b425669c505ab51468b61a1047e8517aa4605f139358acdae4e92d96a7bb
7
+ data.tar.gz: f6fc309ed2057081fe6a724a213f491c146dede6cad7d490ca92c186918a3e5e09874cce81d6e1da18c0de9feff0395956197b70f74d6bb0b2520eed842675e9
data/.coveralls.yml ADDED
@@ -0,0 +1 @@
1
+ repo_token: i4DJCtdksuIwhBck1tukIjzKoMCxWIIvQ
data/.gitignore CHANGED
@@ -8,4 +8,5 @@ Gemfile.lock
8
8
  vendor
9
9
  doc/*
10
10
  tmp/*
11
+ coverage
11
12
  .yardoc
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
@@ -1,3 +1,4 @@
1
1
  source "http://rubygems.org"
2
2
 
3
+ gem 'simplecov', git: 'https://github.com/colszowka/simplecov.git'
3
4
  gemspec
data/README.md CHANGED
@@ -1,15 +1,9 @@
1
- # fluent-plugin-grepcounter [![Build Status](https://secure.travis-ci.org/sonots/fluent-plugin-grepcounter.png?branch=master)](http://travis-ci.org/sonots/fluent-plugin-grepcounter) [![Dependency Status](https://gemnasium.com/sonots/fluent-plugin-grepcounter.png)](https://gemnasium.com/sonots/fluent-plugin-grepcounter)
1
+ # fluent-plugin-grepcounter [![Build Status](https://secure.travis-ci.org/sonots/fluent-plugin-grepcounter.png?branch=master)](http://travis-ci.org/sonots/fluent-plugin-grepcounter) [![Dependency Status](https://gemnasium.com/sonots/fluent-plugin-grepcounter.png)](https://gemnasium.com/sonots/fluent-plugin-grepcounter) [![Coverage Status](https://coveralls.io/repos/sonots/fluent-plugin-grepcounter/badge.png?branch=master)](https://coveralls.io/r/sonots/fluent-plugin-grepcounter)
2
2
 
3
- ## Component
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
- Outputs as belows:
26
+ Then, output bocomes as belows:
33
27
 
34
- warn.count.syslog.host1: {"count":2,"input_tag":"syslog.host1","input_tag_last":"host1"}
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
- output_matched_message true
47
- output_with_joined_delimiter \n
40
+ output_delimiter \n
48
41
  </source>
49
42
 
50
- Outputs as belows:
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
- warn.count.syslog.host1: {"count":2,"input_tag":"syslog.host1","input_tag_last":"host1","message":"2013/01/13T07:02:13.232645 WARN POST /auth\n2013/01/13T07:02:43.632145 WARN POST /login"}
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.1"
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 => 'count'
10
- config_param :add_tag_prefix, :string, :default => nil
11
- config_param :output_matched_message, :bool, :default => false
12
- config_param :output_with_joined_delimiter, :string, :default => nil
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
- if @output_with_joined_delimiter and @output_matched_message == false
27
- raise Fluent::ConfigError, "'output_matched_message' must be true to use 'output_with_joined_delimiter'"
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 unless @regexp and @regexp.match(value)
60
+ next if @regexp and !@regexp.match(value)
53
61
  next if @exclude and @exclude.match(value)
54
- matches << value if @output_matched_message
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
- flushed_counts.keys.each do |tag|
87
- count = flushed_counts[tag]
88
- matches = flushed_matches[tag]
89
- output = generate_output(tag, count, matches)
90
- tag = @add_tag_prefix ? "#{@add_tag_prefix}.#{tag}" : @output_tag
91
- Fluent::Engine.emit(tag, time, output) if output
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(input_tag, count, matches)
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['input_tag'] = input_tag
100
- output['input_tag_last'] = input_tag.split(".").last
101
- if @output_matched_message
102
- output['message'] = @output_with_joined_delimiter.nil? ? matches : matches.join(@output_with_joined_delimiter)
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 "check output_with_joined_delimiter" do
21
- let(:config) { CONFIG + %[ output_with_joined_delimiter \\n ] }
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 == /WARN/ }
45
+ its(:regexp) { should be_nil }
34
46
  its(:exclude) { should be_nil }
35
47
  its(:threshold) { should == 1 }
36
- its(:output_tag) { should == 'count' }
37
- its(:add_tag_prefix) { should be_nil }
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, "input_tag"=>tag, "input_tag_last"=>tag.split(".").last})
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, "input_tag"=>tag, "input_tag_last"=>tag.split(".").last})
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, "input_tag"=>tag, "input_tag_last"=>tag.split(".").last})
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, "input_tag"=>tag, "input_tag_last"=>tag.split(".").last})
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, "input_tag"=>tag, "input_tag_last"=>tag.split(".").last})
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 'output_matched_message' do
185
+ context 'output_delimiter' do
138
186
  let(:config) do
187
+ # \\n shall be \n in config file
139
188
  CONFIG + %[
140
- output_matched_message true
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
- "count"=>3, "input_tag"=>tag, "input_tag_last"=>tag.split(".").last,
147
- "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"]
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 'output_with_joined_delimiter' do
204
+ context 'aggregate all' do
154
205
  let(:config) do
155
- # \\n shall be \n in config file
156
206
  CONFIG + %[
157
- output_matched_message true
158
- output_with_joined_delimiter \\n
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
- "count"=>3, "input_tag"=>tag, "input_tag_last"=>tag.split(".").last,
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
@@ -4,6 +4,9 @@ require 'bundler'
4
4
  Bundler.setup(:default, :test)
5
5
  Bundler.require(:default, :test)
6
6
 
7
+ require 'coveralls'
8
+ Coveralls.wear!
9
+
7
10
  require 'fluent/test'
8
11
  require 'rspec'
9
12
  require 'pry'
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.1
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-03-11 00:00:00.000000000 Z
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: '0'
120
+ version: 1.3.1
105
121
  requirements: []
106
122
  rubyforge_project: fluent-plugin-grepcounter
107
123
  rubygems_version: 2.0.0