fluent-plugin-stats 0.3.4 → 0.3.5

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: ec8019dd61e1e3a0f5b57c1710666d827965bb83
4
- data.tar.gz: 2800e919c9c44957a0ff57e81fb4ee57cc4c959d
3
+ metadata.gz: bf27cb39ed1dd976c0c6722b0be301d03e57eac9
4
+ data.tar.gz: 95384c6fe1303b54e722158db18685924dc9718e
5
5
  SHA512:
6
- metadata.gz: bb176774a693586253f5e4d2020abcf74f513ccead4c17fc856be0f9560cab3c02ba909bad95d770da2f0198a75f6ac3962aa5c80fe197101f3a6324c76fe4ee
7
- data.tar.gz: 8fdf07f4e8e953ea71b1df81f908ab500df303c5a47144e4b93f7af89e36e1d96fe7486e3a505115bf0f5af194ccc643a0fbf8afe5b3828bff1c6b69eeca2659
6
+ metadata.gz: 8ee9239994adaa274869f4a7d73ea8c6864dd808acfbe3392f89bf2566fb5692b4d323e64806c0e6bb454044c87fe69f08e75a183b7f18c5c4712ac4a8cddef5
7
+ data.tar.gz: 63af8f6ead4b5982e9505656c03cbe8dde5301d6e0e42d2839267eb36d24cec47267589962f2071db41805a897d428c441cdc8b08288cf8116eaea333c477600
@@ -1,3 +1,10 @@
1
+ ## 0.3.5 (2014/08/07)
2
+
3
+ Enhancements:
4
+
5
+ * Add `remove_tag_slice` option
6
+ * Add `aggregate out_tag` option
7
+
1
8
  ## 0.3.4 (2014/04/12)
2
9
 
3
10
  Enhancements:
data/README.md CHANGED
@@ -96,9 +96,23 @@ then output bocomes as belows:
96
96
 
97
97
  Remove tag suffix for output message.
98
98
 
99
- - aggragate
100
-
101
- Calculate by each `tag` or `all`. The default value is `tag`.
99
+ * remove_tag_slice *min..max*
100
+
101
+ Remove tag parts by slice function. FYI: This option behaves like `tag.split('.').slice(min..max)`.
102
+
103
+ For example,
104
+
105
+ remove_tag_slice 0..-2
106
+
107
+ changes an input tag `foo.bar.host1` to `foo.bar`.
108
+
109
+ * aggregate
110
+
111
+ Aggregation unit. One of `all`, `in_tag`, `out_tag` can be specified. Default is `in_tag`.
112
+
113
+ * `all` calculate stats for all input messages and emit one message in each interval.
114
+ * `in_tag` calculate stats for each input tag seperately.
115
+ * `out_tag` calculate stats for for each tag *modified* by `add_tag_prefix`, `remove_tag_prefix`, or `remove_tag_slice`.
102
116
 
103
117
  - store_file
104
118
 
@@ -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-stats"
6
- s.version = "0.3.4"
6
+ s.version = "0.3.5"
7
7
  s.authors = ["Naotoshi Seo"]
8
8
  s.email = ["sonots@gmail.com"]
9
9
  s.homepage = "https://github.com/sonots/fluent-plugin-stats"
@@ -21,6 +21,7 @@ Gem::Specification.new do |s|
21
21
  s.add_runtime_dependency "fluentd"
22
22
  s.add_development_dependency "rake"
23
23
  s.add_development_dependency "rspec"
24
+ s.add_development_dependency "rspec-its"
24
25
  s.add_development_dependency "pry"
25
26
  s.add_development_dependency "pry-nav"
26
27
  end
@@ -30,7 +30,8 @@ class Fluent::StatsOutput < Fluent::Output
30
30
  config_param :remove_tag_prefix, :string, :default => nil
31
31
  config_param :add_tag_suffix, :string, :default => nil
32
32
  config_param :remove_tag_suffix, :string, :default => nil
33
- config_param :aggregate, :string, :default => 'tag'
33
+ config_param :remove_tag_slice, :string, :default => nil
34
+ config_param :aggregate, :string, :default => 'in_tag'
34
35
  config_param :store_file, :string, :default => nil
35
36
  config_param :zero_emit, :bool, :default => false
36
37
 
@@ -52,20 +53,24 @@ class Fluent::StatsOutput < Fluent::Output
52
53
  @min_keys = @min_keys ? @min_keys.split(',') : []
53
54
  @avg_keys = @avg_keys ? @avg_keys.split(',') : []
54
55
 
55
- unless ['tag', 'all'].include?(@aggregate)
56
- raise Fluent::ConfigError, "aggregate allows tag/all"
57
- end
58
-
59
56
  case @aggregate
57
+ when 'tag' # obsolete
58
+ @aggregate = 'in_tag'
60
59
  when 'all'
61
60
  raise Fluent::ConfigError, "tag must be specified for aggregate all" if @tag.nil?
62
61
  end
63
62
 
64
- if @tag.nil? and @add_tag_prefix.nil? and @remove_tag_prefix.nil? and @add_tag_suffix.nil? and @remove_tag_suffix.nil?
63
+ unless ['in_tag', 'out_tag', 'all'].include?(@aggregate)
64
+ raise Fluent::ConfigError, "aggregate allows in_tag/out_tag/all"
65
+ end
66
+
67
+ if @tag.nil? and @add_tag_prefix.nil? and @remove_tag_prefix.nil? and @add_tag_suffix.nil? and @remove_tag_suffix.nil? and @remove_tag_slice.nil?
65
68
  @add_tag_prefix = 'stats' # not ConfigError for lower version compatibility
66
69
  end
67
70
  @tag_proc = tag_proc
68
71
 
72
+ @aggregate_proc = aggregate_proc(@tag_proc)
73
+
69
74
  @matches = {}
70
75
  @mutex = Mutex.new
71
76
  end
@@ -73,14 +78,14 @@ class Fluent::StatsOutput < Fluent::Output
73
78
  def initial_matches(prev_matches = nil)
74
79
  if @zero_emit && prev_matches
75
80
  matches = {}
76
- prev_matches.keys.each do |tag|
77
- next unless prev_matches[tag][:count] > 0 # Prohibit to emit anymore
78
- matches[tag] = { :count => 0, :sum => {}, :max => {}, :min => {}, :avg => {} }
81
+ prev_matches.keys.each do |aggregate_key|
82
+ next unless prev_matches[aggregate_key][:count] > 0 # Prohibit to emit anymore
83
+ matches[aggregate_key] = { :count => 0, :sum => {}, :max => {}, :min => {}, :avg => {} }
79
84
  # ToDo: would want default configuration for :max, :min
80
- prev_matches[tag][:sum].keys.each {|key| matches[tag][:sum][key] = 0 }
81
- prev_matches[tag][:max].keys.each {|key| matches[tag][:max][key] = 0 }
82
- prev_matches[tag][:min].keys.each {|key| matches[tag][:min][key] = 0 }
83
- prev_matches[tag][:avg].keys.each {|key| matches[tag][:avg][key] = 0 }
85
+ prev_matches[aggregate_key][:sum].keys.each {|key| matches[aggregate_key][:sum][key] = 0 }
86
+ prev_matches[aggregate_key][:max].keys.each {|key| matches[aggregate_key][:max][key] = 0 }
87
+ prev_matches[aggregate_key][:min].keys.each {|key| matches[aggregate_key][:min][key] = 0 }
88
+ prev_matches[aggregate_key][:avg].keys.each {|key| matches[aggregate_key][:avg][key] = 0 }
84
89
  end
85
90
  matches
86
91
  else
@@ -103,8 +108,6 @@ class Fluent::StatsOutput < Fluent::Output
103
108
 
104
109
  # Called when new line comes. This method actually does not emit
105
110
  def emit(tag, es, chain)
106
- _tag = tag
107
- tag = 'all' if @aggregate == 'all'
108
111
  # stats
109
112
  matches = { :count => 0, :sum => {}, :max => {}, :min => {}, :avg => {} }
110
113
  es.each do |time, record|
@@ -144,25 +147,27 @@ class Fluent::StatsOutput < Fluent::Output
144
147
  matches[:count] += 1
145
148
  end
146
149
 
150
+ aggregate_key = @aggregate_proc.call(tag)
151
+
147
152
  # thread safe merge
148
- @matches[tag] ||= { :count => 0, :sum => {}, :max => {}, :min => {}, :avg => {} }
153
+ @matches[aggregate_key] ||= { :count => 0, :sum => {}, :max => {}, :min => {}, :avg => {} }
149
154
  @mutex.synchronize do
150
155
  matches[:sum].keys.each do |key|
151
- @matches[tag][:sum][key] = sum(@matches[tag][:sum][key], matches[:sum][key])
156
+ @matches[aggregate_key][:sum][key] = sum(@matches[aggregate_key][:sum][key], matches[:sum][key])
152
157
  end
153
158
  matches[:max].keys.each do |key|
154
- @matches[tag][:max][key] = max(@matches[tag][:max][key], matches[:max][key])
159
+ @matches[aggregate_key][:max][key] = max(@matches[aggregate_key][:max][key], matches[:max][key])
155
160
  end
156
161
  matches[:min].keys.each do |key|
157
- @matches[tag][:min][key] = min(@matches[tag][:min][key], matches[:min][key])
162
+ @matches[aggregate_key][:min][key] = min(@matches[aggregate_key][:min][key], matches[:min][key])
158
163
  end
159
164
  matches[:avg].keys.each do |key|
160
- @matches[tag][:avg][key] = sum(@matches[tag][:avg][key], matches[:avg][key]) # sum yet
165
+ @matches[aggregate_key][:avg][key] = sum(@matches[aggregate_key][:avg][key], matches[:avg][key]) # sum yet
161
166
  end
162
- @matches[tag][:count] += matches[:count]
167
+ @matches[aggregate_key][:count] += matches[:count]
163
168
  end
164
169
 
165
- log.trace "out_stats: tag:#{_tag} @matches:#{@matches}"
170
+ log.trace "out_stats: tag:#{tag} @matches:#{@matches}"
166
171
 
167
172
  chain.next
168
173
  rescue => e
@@ -197,7 +202,15 @@ class Fluent::StatsOutput < Fluent::Output
197
202
  log.trace("out_stats: flushed_matches:#{flushed_matches} @matches:#{@matches}") unless flushed_matches.empty?
198
203
 
199
204
  flushed_matches.each do |tag, matches|
200
- emit_tag = @tag_proc.call(tag)
205
+ case @aggregate
206
+ when 'all'
207
+ emit_tag = @tag
208
+ when 'in_tag'
209
+ emit_tag = @tag_proc.call(tag)
210
+ when 'out_tag'
211
+ emit_tag = tag
212
+ else
213
+ end
201
214
  report_time(" emit_tag:#{emit_tag} matches:#{matches}") do
202
215
  output = generate_output(matches)
203
216
  Fluent::Engine.emit(emit_tag, time, output) if output and !output.empty?
@@ -319,7 +332,30 @@ class Fluent::StatsOutput < Fluent::Output
319
332
  transform_keys(hash) { |key| key.to_s }
320
333
  end
321
334
 
335
+ def aggregate_proc(tag_proc)
336
+ case @aggregate
337
+ when 'all'
338
+ Proc.new {|tag| :all }
339
+ when 'in_tag'
340
+ Proc.new {|tag| tag }
341
+ when 'out_tag'
342
+ Proc.new {|tag| tag_proc.call(tag) }
343
+ end
344
+ end
345
+
322
346
  def tag_proc
347
+ tag_slice_proc =
348
+ if @remove_tag_slice
349
+ lindex, rindex = @remove_tag_slice.split('..', 2)
350
+ if lindex.nil? or rindex.nil? or lindex !~ /^-?\d+$/ or rindex !~ /^-?\d+$/
351
+ raise Fluent::ConfigError, "out_grepcounter: remove_tag_slice must be formatted like [num]..[num]"
352
+ end
353
+ l, r = lindex.to_i, rindex.to_i
354
+ Proc.new {|tag| (tags = tag.split('.')[l..r]).nil? ? "" : tags.join('.') }
355
+ else
356
+ Proc.new {|tag| tag }
357
+ end
358
+
323
359
  rstrip = Proc.new {|str, substr| str.chomp(substr) }
324
360
  lstrip = Proc.new {|str, substr| str.start_with?(substr) ? str[substr.size..-1] : str }
325
361
  tag_prefix = "#{rstrip.call(@add_tag_prefix, '.')}." if @add_tag_prefix
@@ -327,16 +363,16 @@ class Fluent::StatsOutput < Fluent::Output
327
363
  tag_prefix_match = "#{rstrip.call(@remove_tag_prefix, '.')}." if @remove_tag_prefix
328
364
  tag_suffix_match = ".#{lstrip.call(@remove_tag_suffix, '.')}" if @remove_tag_suffix
329
365
  tag_fixed = @tag if @tag
330
- if tag_fixed
331
- Proc.new {|tag| tag_fixed }
332
- elsif tag_prefix_match and tag_suffix_match
333
- Proc.new {|tag| "#{tag_prefix}#{rstrip.call(lstrip.call(tag, tag_prefix_match), tag_suffix_match)}#{tag_suffix}" }
366
+ if tag_prefix_match and tag_suffix_match
367
+ Proc.new {|tag| "#{tag_prefix}#{rstrip.call(lstrip.call(tag_slice_proc.call(tag), tag_prefix_match), tag_suffix_match)}#{tag_suffix}" }
334
368
  elsif tag_prefix_match
335
- Proc.new {|tag| "#{tag_prefix}#{lstrip.call(tag, tag_prefix_match)}#{tag_suffix}" }
369
+ Proc.new {|tag| "#{tag_prefix}#{lstrip.call(tag_slice_proc.call(tag), tag_prefix_match)}#{tag_suffix}" }
336
370
  elsif tag_suffix_match
337
- Proc.new {|tag| "#{tag_prefix}#{rstrip.call(tag, tag_suffix_match)}#{tag_suffix}" }
371
+ Proc.new {|tag| "#{tag_prefix}#{rstrip.call(tag_slice_proc.call(tag), tag_suffix_match)}#{tag_suffix}" }
372
+ elsif tag_prefix || @remove_tag_slice || tag_suffix
373
+ Proc.new {|tag| "#{tag_prefix}#{tag_slice_proc.call(tag)}#{tag_suffix}" }
338
374
  else
339
- Proc.new {|tag| "#{tag_prefix}#{tag}#{tag_suffix}" }
375
+ Proc.new {|tag| tag_fixed }
340
376
  end
341
377
  end
342
378
 
@@ -59,7 +59,7 @@ describe Fluent::StatsOutput do
59
59
  its(:interval) { should == 5 }
60
60
  its(:tag) { should be_nil }
61
61
  its(:add_tag_prefix) { should == 'stats' }
62
- its(:aggregate) { should == 'tag' }
62
+ its(:aggregate) { should == 'in_tag' }
63
63
  end
64
64
  end
65
65
  end
@@ -91,8 +91,8 @@ describe Fluent::StatsOutput do
91
91
  ]
92
92
  end
93
93
  before do
94
- Fluent::Engine.stub(:now).and_return(time)
95
- Fluent::Engine.should_receive(:emit).with("stats.#{tag}", time, {
94
+ allow(Fluent::Engine).to receive(:now).and_return(time)
95
+ expect(Fluent::Engine).to receive(:emit).with("stats.#{tag}", time, {
96
96
  "4xx_count"=>6,"5xx_count"=>6,"reqtime_max"=>6,"reqtime_min"=>1,"reqtime_avg"=>3.0
97
97
  })
98
98
  end
@@ -110,11 +110,11 @@ describe Fluent::StatsOutput do
110
110
  ]
111
111
  end
112
112
  before do
113
- Fluent::Engine.stub(:now).and_return(time)
114
- Fluent::Engine.should_receive(:emit).with("stats.#{tag}", time, {
113
+ allow(Fluent::Engine).to receive(:now).and_return(time)
114
+ expect(Fluent::Engine).to receive(:emit).with("stats.#{tag}", time, {
115
115
  "4xx_count"=>6,"5xx_count"=>6,"reqtime_max"=>6,"reqtime_min"=>1,"reqtime_avg"=>3.0
116
116
  })
117
- Fluent::Engine.should_receive(:emit).with("stats.#{tag}", time, {
117
+ expect(Fluent::Engine).to receive(:emit).with("stats.#{tag}", time, {
118
118
  "4xx_count"=>0,"5xx_count"=>0,"reqtime_max"=>0,"reqtime_min"=>0,"reqtime_avg"=>0.0
119
119
  })
120
120
  end
@@ -131,8 +131,8 @@ describe Fluent::StatsOutput do
131
131
  ]
132
132
  end
133
133
  before do
134
- Fluent::Engine.stub(:now).and_return(time)
135
- Fluent::Engine.should_receive(:emit).with("stats.#{tag}", time, {
134
+ allow(Fluent::Engine).to receive(:now).and_return(time)
135
+ expect(Fluent::Engine).to receive(:emit).with("stats.#{tag}", time, {
136
136
  "4xx_count"=>6,"5xx_count"=>6,"reqtime_max"=>6,"reqtime_min"=>1,"reqtime_avg"=>3.0
137
137
  })
138
138
  end
@@ -159,8 +159,8 @@ describe Fluent::StatsOutput do
159
159
  ]
160
160
  end
161
161
  before do
162
- Fluent::Engine.stub(:now).and_return(time)
163
- Fluent::Engine.should_receive(:emit).with("stats.#{tag}", time, {
162
+ allow(Fluent::Engine).to receive(:now).and_return(time)
163
+ expect(Fluent::Engine).to receive(:emit).with("stats.#{tag}", time, {
164
164
  "reqtime_sum"=>3.000,"reqtime_max"=>2.000,"reqtime_min"=>1.000,"reqtime_avg"=>1.500,"reqsize_sum"=>30
165
165
  })
166
166
  end
@@ -175,8 +175,8 @@ describe Fluent::StatsOutput do
175
175
  ]
176
176
  end
177
177
  before do
178
- Fluent::Engine.stub(:now).and_return(time)
179
- Fluent::Engine.should_receive(:emit).with("foo", time, {
178
+ allow(Fluent::Engine).to receive(:now).and_return(time)
179
+ expect(Fluent::Engine).to receive(:emit).with("foo", time, {
180
180
  "4xx_count"=>6,"5xx_count"=>6
181
181
  })
182
182
  end
@@ -192,8 +192,8 @@ describe Fluent::StatsOutput do
192
192
  end
193
193
  let(:tag) { 'foo.bar' }
194
194
  before do
195
- Fluent::Engine.stub(:now).and_return(time)
196
- Fluent::Engine.should_receive(:emit).with("foo.#{tag}", time, {
195
+ allow(Fluent::Engine).to receive(:now).and_return(time)
196
+ expect(Fluent::Engine).to receive(:emit).with("foo.#{tag}", time, {
197
197
  "4xx_count"=>6,"5xx_count"=>6
198
198
  })
199
199
  end
@@ -209,8 +209,8 @@ describe Fluent::StatsOutput do
209
209
  end
210
210
  let(:tag) { 'foo.bar' }
211
211
  before do
212
- Fluent::Engine.stub(:now).and_return(time)
213
- Fluent::Engine.should_receive(:emit).with("bar", time, {
212
+ allow(Fluent::Engine).to receive(:now).and_return(time)
213
+ expect(Fluent::Engine).to receive(:emit).with("bar", time, {
214
214
  "4xx_count"=>6,"5xx_count"=>6
215
215
  })
216
216
  end
@@ -226,8 +226,8 @@ describe Fluent::StatsOutput do
226
226
  end
227
227
  let(:tag) { 'foo.bar' }
228
228
  before do
229
- Fluent::Engine.stub(:now).and_return(time)
230
- Fluent::Engine.should_receive(:emit).with("#{tag}.foo", time, {
229
+ allow(Fluent::Engine).to receive(:now).and_return(time)
230
+ expect(Fluent::Engine).to receive(:emit).with("#{tag}.foo", time, {
231
231
  "4xx_count"=>6,"5xx_count"=>6
232
232
  })
233
233
  end
@@ -243,8 +243,25 @@ describe Fluent::StatsOutput do
243
243
  end
244
244
  let(:tag) { 'foo.bar' }
245
245
  before do
246
- Fluent::Engine.stub(:now).and_return(time)
247
- Fluent::Engine.should_receive(:emit).with("foo", time, {
246
+ allow(Fluent::Engine).to receive(:now).and_return(time)
247
+ expect(Fluent::Engine).to receive(:emit).with("foo", time, {
248
+ "4xx_count"=>6,"5xx_count"=>6
249
+ })
250
+ end
251
+ it { emit }
252
+ end
253
+
254
+ context 'remove_tag_slice' do
255
+ let(:config) do
256
+ CONFIG + %[
257
+ remove_tag_slice 0..-2
258
+ sum _count$
259
+ ]
260
+ end
261
+ let(:tag) { 'foo.bar' }
262
+ before do
263
+ allow(Fluent::Engine).to receive(:now).and_return(time)
264
+ expect(Fluent::Engine).to receive(:emit).with("foo", time, {
248
265
  "4xx_count"=>6,"5xx_count"=>6
249
266
  })
250
267
  end
@@ -270,15 +287,15 @@ describe Fluent::StatsOutput do
270
287
  ]
271
288
  end
272
289
  before do
273
- Fluent::Engine.stub(:now).and_return(time)
274
- Fluent::Engine.should_receive(:emit).with("foo", time, {
290
+ allow(Fluent::Engine).to receive(:now).and_return(time)
291
+ expect(Fluent::Engine).to receive(:emit).with("foo", time, {
275
292
  "4xx_count"=>12,"5xx_count"=>12,"reqtime_max"=>6,"reqtime_min"=>1,"reqtime_avg"=>3.0
276
293
  })
277
294
  end
278
295
  it { emit }
279
296
  end
280
297
 
281
- context 'aggregate tag' do
298
+ context 'aggregate in_tag' do
282
299
  let(:config) do
283
300
  CONFIG + %[
284
301
  aggregate tag
@@ -290,16 +307,37 @@ describe Fluent::StatsOutput do
290
307
  ]
291
308
  end
292
309
  before do
293
- Fluent::Engine.stub(:now).and_return(time)
294
- Fluent::Engine.should_receive(:emit).with("stats.foo.bar", time, {
310
+ allow(Fluent::Engine).to receive(:now).and_return(time)
311
+ expect(Fluent::Engine).to receive(:emit).with("stats.foo.bar", time, {
295
312
  "4xx_count"=>6,"5xx_count"=>6,"reqtime_max"=>6,"reqtime_min"=>1,"reqtime_avg"=>3.0
296
313
  })
297
- Fluent::Engine.should_receive(:emit).with("stats.foo.bar2", time, {
314
+ expect(Fluent::Engine).to receive(:emit).with("stats.foo.bar2", time, {
298
315
  "4xx_count"=>6,"5xx_count"=>6,"reqtime_max"=>6,"reqtime_min"=>1,"reqtime_avg"=>3.0
299
316
  })
300
317
  end
301
318
  it { emit }
302
319
  end
320
+
321
+ context 'aggregate out_tag' do
322
+ let(:config) do
323
+ CONFIG + %[
324
+ aggregate out_tag
325
+ remove_tag_slice 0..-2
326
+ add_tag_prefix stats
327
+ sum _count$
328
+ max _max$
329
+ min _min$
330
+ avg _avg$
331
+ ]
332
+ end
333
+ before do
334
+ allow(Fluent::Engine).to receive(:now).and_return(time)
335
+ expect(Fluent::Engine).to receive(:emit).with("stats.foo", time, {
336
+ "4xx_count"=>12,"5xx_count"=>12,"reqtime_max"=>6,"reqtime_min"=>1,"reqtime_avg"=>3.0
337
+ })
338
+ end
339
+ it { emit }
340
+ end
303
341
  end
304
342
 
305
343
  describe "store_file" do
@@ -333,9 +371,9 @@ describe Fluent::StatsOutput do
333
371
  loaded_saved_at = driver.instance.saved_at
334
372
  loaded_saved_duration = driver.instance.saved_duration
335
373
 
336
- loaded_matches.should == stored_matches
337
- loaded_saved_at.should == stored_saved_at
338
- loaded_saved_duration.should == stored_saved_duration
374
+ expect(loaded_matches).to eql(stored_matches)
375
+ expect(loaded_saved_at).to eql(stored_saved_at)
376
+ expect(loaded_saved_duration).to eql(stored_saved_duration)
339
377
  end
340
378
  end
341
379
  end
@@ -6,6 +6,7 @@ Bundler.require(:default, :test)
6
6
 
7
7
  require 'fluent/test'
8
8
  require 'rspec'
9
+ require 'rspec/its'
9
10
  require 'pry'
10
11
 
11
12
  $TESTING=true
metadata CHANGED
@@ -1,83 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-stats
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Naotoshi Seo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-12 00:00:00.000000000 Z
11
+ date: 2014-08-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec-its
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: pry
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - '>='
73
+ - - ">="
60
74
  - !ruby/object:Gem::Version
61
75
  version: '0'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - '>='
80
+ - - ">="
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: pry-nav
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - '>='
87
+ - - ">="
74
88
  - !ruby/object:Gem::Version
75
89
  version: '0'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - '>='
94
+ - - ">="
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
97
  description: Fluentd plugin to calculate statistics such as sum, max, min, avg
@@ -87,11 +101,11 @@ executables: []
87
101
  extensions: []
88
102
  extra_rdoc_files: []
89
103
  files:
90
- - .coveralls.yml
91
- - .gitignore
92
- - .rdebugrc
93
- - .rspec
94
- - .travis.yml
104
+ - ".coveralls.yml"
105
+ - ".gitignore"
106
+ - ".rdebugrc"
107
+ - ".rspec"
108
+ - ".travis.yml"
95
109
  - CHANGELOG.md
96
110
  - Gemfile
97
111
  - LICENSE
@@ -111,17 +125,17 @@ require_paths:
111
125
  - lib
112
126
  required_ruby_version: !ruby/object:Gem::Requirement
113
127
  requirements:
114
- - - '>='
128
+ - - ">="
115
129
  - !ruby/object:Gem::Version
116
130
  version: '0'
117
131
  required_rubygems_version: !ruby/object:Gem::Requirement
118
132
  requirements:
119
- - - '>='
133
+ - - ">="
120
134
  - !ruby/object:Gem::Version
121
135
  version: '0'
122
136
  requirements: []
123
137
  rubyforge_project: fluent-plugin-stats
124
- rubygems_version: 2.0.3
138
+ rubygems_version: 2.2.0
125
139
  signing_key:
126
140
  specification_version: 4
127
141
  summary: Fluentd plugin to calculate statistics such as sum, max, min, avg