fluent-plugin-calc 0.0.4 → 0.0.5

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: fb6d86f52bcefcd6d104c356cc6df3b707196ec8
4
- data.tar.gz: 03b34ce3169a1f29c08823d1cfd8f2850822d6c9
3
+ metadata.gz: 3c4e47d56f27cba7e3e04f0738eb6434456ce824
4
+ data.tar.gz: e759f302614709da9350bd0f59a748cc7ab6d724
5
5
  SHA512:
6
- metadata.gz: 1960a83a0a998933536bf6ea48c6129692258849e474f2ad701865c081b6fc268bdfc01e4d3591cbedc13b414a08837ea68fb6417f3097e49f0ba682c1e9fa0b
7
- data.tar.gz: 6b97b056a3654180cbb8530e7744f75b606380d3cb513813f8b98a5327cb92fecf58ee69c49a5424025d48656533ebf2ca95aeb4c0cb9a452f59e48c42149061
6
+ metadata.gz: f9701abea3da09295a09a02fd8867fc882644ef9f980ea2896ea95e953945f8413790494fb784cfd19294f451e1ef0300961e3298619f864629371e20fefffee
7
+ data.tar.gz: 1a1d71d9497dc2bfb394eb1cc58c47daed5dd3b4aab686a7388a6ad22218dcba23513d8c0bf41eb5bb09df165373a05138afa0b7682ebf7212d3699c9191a919
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 0.0.5 (2013/09/02)
2
+
3
+ Enhancement:
4
+
5
+ - add `sum_keys`, `max_keys`, `min_keys`, `avg_keys`.
6
+
1
7
  ## 0.0.4 (2013/08/30)
2
8
 
3
9
  Enhancement:
data/README.md CHANGED
@@ -4,7 +4,7 @@ Simple fluentd plugin to calculate messages.
4
4
 
5
5
  ## Configuration
6
6
 
7
- Example1)
7
+ ### Example 1
8
8
 
9
9
  sum for xxx_count, max for xxx_max, min for xxx_min, avg for xxx_avg
10
10
 
@@ -28,7 +28,7 @@ then output bocomes as belows:
28
28
 
29
29
  calc.foo.bar: {"4xx_count":5,"5xx_count":4","reqtime_max":24831,"reqtime_min":10,"reqtime_avg":270.46}
30
30
 
31
- Example2)
31
+ ### Example 2
32
32
 
33
33
  sum, max, min, avg for the same key
34
34
 
@@ -60,7 +60,13 @@ then output bocomes as belows:
60
60
 
61
61
  - sum, min, max, avg
62
62
 
63
- Calculation. Specify input keys by a regular expression
63
+ Target of calculation. Specify input keys by a regular expression
64
+
65
+ - sum\_keys, min\_keys, max\_keys, avg\_keys
66
+
67
+ Target of calculation. Specify input keys by a string separated by , (comma) such as
68
+
69
+ sum_keys 4xx_count,5xx_count
64
70
 
65
71
  - sum\_suffix, min\_suffix, max\_suffix, avg\_suffix
66
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-calc"
6
- s.version = "0.0.4"
6
+ s.version = "0.0.5"
7
7
  s.authors = ["Naotoshi SEO"]
8
8
  s.email = ["sonots@gmail.com"]
9
9
  s.homepage = "https://github.com/sonots/fluent-plugin-calc"
@@ -11,6 +11,10 @@ class Fluent::CalcOutput < Fluent::Output
11
11
  config_param :max, :string, :default => nil
12
12
  config_param :min, :string, :default => nil
13
13
  config_param :avg, :string, :default => nil
14
+ config_param :sum_keys, :string, :default => nil
15
+ config_param :max_keys, :string, :default => nil
16
+ config_param :min_keys, :string, :default => nil
17
+ config_param :avg_keys, :string, :default => nil
14
18
  config_param :sum_suffix, :string, :default => ""
15
19
  config_param :max_suffix, :string, :default => ""
16
20
  config_param :min_suffix, :string, :default => ""
@@ -35,6 +39,10 @@ class Fluent::CalcOutput < Fluent::Output
35
39
  @max = Regexp.new(@max) if @max
36
40
  @min = Regexp.new(@min) if @min
37
41
  @avg = Regexp.new(@avg) if @avg
42
+ @sum_keys = @sum_keys ? @sum_keys.split(',') : []
43
+ @max_keys = @max_keys ? @max_keys.split(',') : []
44
+ @min_keys = @min_keys ? @min_keys.split(',') : []
45
+ @avg_keys = @avg_keys ? @avg_keys.split(',') : []
38
46
 
39
47
  unless ['tag', 'all'].include?(@aggregate)
40
48
  raise Fluent::ConfigError, "aggregate allows tag/all"
@@ -70,6 +78,18 @@ class Fluent::CalcOutput < Fluent::Output
70
78
  # calc
71
79
  count = 0; matches = { :sum => {}, :max => {}, :min => {}, :avg => {} }
72
80
  es.each do |time, record|
81
+ @sum_keys.each do |key|
82
+ matches[:sum][key] = sum(matches[:sum][key], record[key])
83
+ end
84
+ @max_keys.each do |key|
85
+ matches[:max][key] = max(matches[:max][key], record[key])
86
+ end
87
+ @min_keys.each do |key|
88
+ matches[:min][key] = min(matches[:min][key], record[key])
89
+ end
90
+ @avg_keys.each do |key|
91
+ matches[:avg][key] = avg(matches[:avg][key], record[key])
92
+ end
73
93
  record.keys.each do |key|
74
94
  if @sum and @sum.match(key)
75
95
  matches[:sum][key] = sum(matches[:sum][key], record[key])
@@ -83,7 +103,7 @@ class Fluent::CalcOutput < Fluent::Output
83
103
  if @avg and @avg.match(key)
84
104
  matches[:avg][key] = sum(matches[:avg][key], record[key]) # sum yet
85
105
  end
86
- end
106
+ end if @sum || @max || @min || @avg
87
107
  count += 1
88
108
  end
89
109
 
@@ -216,7 +236,7 @@ class Fluent::CalcOutput < Fluent::Output
216
236
  stored[:min] == @min and
217
237
  stored[:avg] == @avg
218
238
 
219
- if !stored[:matches].first[1].has_key?(:max)
239
+ if !stored[:matches].empty? and !stored[:matches].first[1].has_key?(:max)
220
240
  $log.warn "out_calc: stored data does not have compatibility with the current version. ignore stored data"
221
241
  return
222
242
  end
@@ -96,6 +96,24 @@ describe Fluent::CalcOutput do
96
96
  it { emit }
97
97
  end
98
98
 
99
+ context 'sum/max/min/avg_keys' do
100
+ let(:config) do
101
+ CONFIG + %[
102
+ sum_keys 4xx_count,5xx_count
103
+ max reqtime_max
104
+ min reqtime_min
105
+ avg reqtime_avg
106
+ ]
107
+ end
108
+ before do
109
+ Fluent::Engine.stub(:now).and_return(time)
110
+ Fluent::Engine.should_receive(:emit).with("calc.#{tag}", time, {
111
+ "4xx_count"=>6,"5xx_count"=>6,"reqtime_max"=>6,"reqtime_min"=>1,"reqtime_avg"=>3.0
112
+ })
113
+ end
114
+ it { emit }
115
+ end
116
+
99
117
  context 'sum/max/min/avg_suffix' do
100
118
  let(:config) do
101
119
  CONFIG + %[
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-calc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.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: 2013-08-30 00:00:00.000000000 Z
11
+ date: 2013-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd