fluent-plugin-stats-notifier 0.0.2 → 0.0.3

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: 7d2cfc5f24520dc1e1e27a516f2e9546de7eaf74
4
- data.tar.gz: b3dbf5efeb2ce58932e2d1519e4b95010985f39a
3
+ metadata.gz: 20ebee510eb1403230e4baee3b2b302e9d5a82dd
4
+ data.tar.gz: 64c9831470b6871e9f7df06efeb61d7c2d14466c
5
5
  SHA512:
6
- metadata.gz: 1496c8c85cf8ea9c720aa9405aaf8cfb668b4368fab424da0d5e67661657622e2cebc910b69b382923a8f8b442ac578ada134c75f29f7f6eb1eb38b5b1f6e210
7
- data.tar.gz: ac5fc0fb7203ab2674a090e424501b441a71b948fb86b3a94b754f96ba7acd5c07dfa27163be7f8de9d19a94bb0a9a7f58ee970dff4d6ca12763bf0d49f26ba9
6
+ metadata.gz: 3f5b4655b1d325fa5bfcb018f82ccc78e01815a5a7b2e7e8d57d042e3f48a0713eb6bd3671f36967f1910401b019ab4a04b4e091b69c150c8899e3e620dfa7ab
7
+ data.tar.gz: 0172ea3071a0713239147954b68818b8f57ccf8505c043f51a47977930b4ac3093a5452153ae2eadaf737cb695464612b1549967c39e524dfc9d2cdaffa605d5
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 0.0.3
2
+
3
+ Enchancements
4
+
5
+ * Add `aggregate` and `add_tag_prefix`, `remove_tag_prefix` options
6
+
1
7
  ## 0.0.2
2
8
 
3
9
  Changes
data/README.md CHANGED
@@ -55,15 +55,15 @@ then this plugin emits an message because the max of `4xx_count` is greater than
55
55
 
56
56
  - tag
57
57
 
58
- The output tag name.
58
+ The output tag name. Required for `aggregate all`.
59
59
 
60
60
  - add_tag_prefix
61
61
 
62
- (not available yet) Add tag prefix for output message.
62
+ Add tag prefix for output message. Required for `aggregate tag`.
63
63
 
64
64
  - aggragate
65
65
 
66
- (not available yet) Do calculation by each `tag` or `all`. The default value is `tag`.
66
+ Do calculation for each `tag` or `all`. The defaultis `all`.
67
67
 
68
68
  - store_file
69
69
 
@@ -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-notifier"
6
- s.version = "0.0.2"
6
+ s.version = "0.0.3"
7
7
  s.authors = ["Naotoshi Seo"]
8
8
  s.email = ["sonots@gmail.com"]
9
9
  s.homepage = "https://github.com/sonots/fluent-plugin-stats-notifier"
@@ -15,6 +15,9 @@ class Fluent::StatsNotifierOutput < Fluent::Output
15
15
  config_param :greater_equal, :float, :default => nil
16
16
  config_param :compare_with, :string, :default => "max"
17
17
  config_param :tag, :string
18
+ config_param :add_tag_prefix, :string, :default => nil
19
+ config_param :remove_tag_prefix, :string, :default => nil
20
+ config_param :aggregate, :string, :default => 'all'
18
21
  config_param :store_file, :string, :default => nil
19
22
 
20
23
  attr_accessor :counts
@@ -48,6 +51,30 @@ class Fluent::StatsNotifierOutput < Fluent::Output
48
51
  raise Fluent::ConfigError, "out_stats_notiifer: `compare_with` must be one of `sum`, `max`, `min`, `avg`"
49
52
  end
50
53
 
54
+ case @aggregate
55
+ when 'all'
56
+ raise Fluent::ConfigError, "anomalydetect: `tag` must be specified with aggregate all" if @tag.nil?
57
+ when 'tag'
58
+ raise Fluent::ConfigError, "anomalydetect: `add_tag_prefix` must be specified with aggregate tag" if @add_tag_prefix.nil?
59
+ else
60
+ raise Fluent::ConfigError, "anomalydetect: aggregate allows tag/all"
61
+ end
62
+
63
+ @tag_prefix = "#{@add_tag_prefix}." if @add_tag_prefix
64
+ @tag_prefix_match = "#{@remove_tag_prefix}." if @remove_tag_prefix
65
+ @tag_proc =
66
+ if @tag_prefix and @tag_prefix_match
67
+ Proc.new {|tag| "#{@tag_prefix}#{lstrip(tag, @tag_prefix_match)}" }
68
+ elsif @tag_prefix_match
69
+ Proc.new {|tag| lstrip(tag, @tag_prefix_match) }
70
+ elsif @tag_prefix
71
+ Proc.new {|tag| "#{@tag_prefix}#{tag}" }
72
+ elsif @tag
73
+ Proc.new {|tag| @tag }
74
+ else
75
+ Proc.new {|tag| tag }
76
+ end
77
+
51
78
  @counts = {}
52
79
  @matches = {}
53
80
  @mutex = Mutex.new
@@ -74,7 +101,7 @@ class Fluent::StatsNotifierOutput < Fluent::Output
74
101
  count = 0; matches = {}
75
102
  es.each do |time,record|
76
103
  if record[key]
77
- # @todo: make an option for statsuation in the same tag. now only sum is supported
104
+ # @todo: make an option for calcuation in the same tag. now only sum is supported
78
105
  matches[key] = (matches[key] ? matches[key] + record[key] : record[key])
79
106
  end
80
107
  count += 1
@@ -85,7 +112,7 @@ class Fluent::StatsNotifierOutput < Fluent::Output
85
112
  @matches[tag] ||= {}
86
113
  @mutex.synchronize do
87
114
  if matches[key]
88
- # @todo: make an option for statsuation in the same tag. now only sum is supported
115
+ # @todo: make an option for calcuation in the same tag. now only sum is supported
89
116
  @matches[tag][key] = (@matches[tag][key] ? @matches[tag][key] + matches[key] : matches[key])
90
117
  end
91
118
  @counts[tag] += count
@@ -119,15 +146,23 @@ class Fluent::StatsNotifierOutput < Fluent::Output
119
146
  # This method is the real one to emit
120
147
  def flush_emit(step)
121
148
  time = Fluent::Engine.now
122
- flushed_counts, flushed_matches, @counts, @matches = @counts, @matches, {}, {}
123
-
124
- output = generate_output(flushed_counts, flushed_matches)
125
- Fluent::Engine.emit(@tag, time, output) if output
149
+ counts, matches, @counts, @matches = @counts, @matches, {}, {}
150
+
151
+ if @aggregate == 'all'
152
+ values = matches.values.map {|match| match[@target_key] }.compact
153
+ output = generate_output(values)
154
+ Fluent::Engine.emit(@tag, time, output) if output
155
+ else # aggregate tag
156
+ matches.each do |tag, match|
157
+ values = [match[@target_key]]
158
+ output = generate_output(values)
159
+ emit_tag = @tag_proc.call(tag)
160
+ Fluent::Engine.emit(emit_tag, time, output) if output
161
+ end
162
+ end
126
163
  end
127
164
 
128
- def generate_output(counts, matches)
129
- values = matches.values.map {|match| match[@target_key] }.compact
130
-
165
+ def generate_output(values)
131
166
  case @compare_with
132
167
  when :sum
133
168
  target_value = values.inject(:+)
@@ -145,6 +145,35 @@ describe Fluent::StatsNotifierOutput do
145
145
  end
146
146
  end
147
147
 
148
+ context 'aggregate' do
149
+ let(:emit) do
150
+ driver.run do
151
+ driver.emit_with_tag({"5xx_count"=>2}, time, 'foo.bar1')
152
+ driver.emit_with_tag({"5xx_count"=>6}, time, 'foo.bar2')
153
+ end
154
+ driver.instance.flush_emit(0)
155
+ end
156
+
157
+ context 'all' do
158
+ let(:config) { CONFIG + %[aggregate all \n tag foo \n compare_with sum] }
159
+ before do
160
+ Fluent::Engine.stub(:now).and_return(time)
161
+ Fluent::Engine.should_receive(:emit).with("foo", time, {"5xx_count"=>8.0})
162
+ end
163
+ it { emit }
164
+ end
165
+
166
+ context 'tag' do
167
+ let(:config) { CONFIG + %[aggregate tag \n add_tag_prefix add] }
168
+ before do
169
+ Fluent::Engine.stub(:now).and_return(time)
170
+ Fluent::Engine.should_receive(:emit).with("add.foo.bar1", time, {"5xx_count"=>2.0})
171
+ Fluent::Engine.should_receive(:emit).with("add.foo.bar2", time, {"5xx_count"=>6.0})
172
+ end
173
+ it { emit }
174
+ end
175
+ end
176
+
148
177
  context 'compare_with' do
149
178
  let(:emit) do
150
179
  driver.run do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-stats-notifier
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
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-12-27 00:00:00.000000000 Z
11
+ date: 2014-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd