fluent-plugin-elapsed-time 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +8 -0
- data/fluent-plugin-elapsed-time.gemspec +1 -1
- data/lib/fluent/plugin/out_elapsed_time.rb +24 -21
- data/spec/out_elapsed_time_spec.rb +25 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6c0f9adda6567da79749a6fc034bcb0487c9e141
|
4
|
+
data.tar.gz: ecb930003b14f489d71ef6855cf2156e28c9a53f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e7b6c7c34fce1d88eaafed9d96e8b14b81752e36946dffe081043313a25781b88b642addca6f1ea71e9183bf02b67ac02e4cf65e438372d4b242e35dce66d743
|
7
|
+
data.tar.gz: d697f84cf3dc25e83eb35851bea61186ddb458909f3d466e9bef96938cab494cb30293d21ce4e2f594dfb62012a5670d249211c2d2f16ea7929bff8b7ec5c888
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -93,6 +93,14 @@ where `max` and `avg` are the maximum and average elapsed times, and `num` is th
|
|
93
93
|
`all` measures `max` and `avg` for all input messages.
|
94
94
|
`tag` measures `max` and `avg` for each tag *modified* by `add_tag_prefix`, `remove_tag_prefix`, or `remove_tag_slice`.
|
95
95
|
|
96
|
+
* zero_emit *bool*
|
97
|
+
|
98
|
+
Emit 0 on the next interval. This is useful for some software which requires resetting data such as [GrowthForecast](http://kazeburo.github.io/GrowthForecast).
|
99
|
+
|
100
|
+
elapsed: {"max":1.013,"avg":0.123,"num"=>0}
|
101
|
+
# after @interval later
|
102
|
+
elapsed: {"max":0,"avg":0,"num"=>0}
|
103
|
+
|
96
104
|
## ChangeLog
|
97
105
|
|
98
106
|
See [CHANGELOG.md](CHANGELOG.md) for details.
|
@@ -3,7 +3,7 @@ $:.push File.expand_path('../lib', __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.name = "fluent-plugin-elapsed-time"
|
6
|
-
gem.version = "0.0.
|
6
|
+
gem.version = "0.0.4"
|
7
7
|
gem.authors = ["Naotoshi Seo"]
|
8
8
|
gem.email = "sonots@gmail.com"
|
9
9
|
gem.homepage = "https://github.com/sonots/fluent-plugin-elapsed-time"
|
@@ -18,6 +18,7 @@ module Fluent
|
|
18
18
|
raise ConfigError, "out_elapsed_time: each should be 'es' or 'message'"
|
19
19
|
end
|
20
20
|
end
|
21
|
+
config_param :zero_emit, :bool, :default => false
|
21
22
|
|
22
23
|
def initialize
|
23
24
|
super
|
@@ -28,7 +29,7 @@ module Fluent
|
|
28
29
|
# for test
|
29
30
|
attr_reader :outputs
|
30
31
|
|
31
|
-
def elapsed(tag = :
|
32
|
+
def elapsed(tag = "elapsed") # default: @tag
|
32
33
|
@elapsed[tag] ||= []
|
33
34
|
end
|
34
35
|
|
@@ -84,14 +85,6 @@ module Fluent
|
|
84
85
|
Proc.new {|tag| @tag_slice_proc.call(tag) }
|
85
86
|
end
|
86
87
|
|
87
|
-
@push_elapsed_proc =
|
88
|
-
case @aggregate
|
89
|
-
when 'all'
|
90
|
-
Proc.new {|tag, elapsed_time| elapsed(:all) << elapsed_time }
|
91
|
-
when 'tag'
|
92
|
-
Proc.new {|tag, elapsed_time| elapsed(tag) << elapsed_time }
|
93
|
-
end
|
94
|
-
|
95
88
|
@emit_proc =
|
96
89
|
if @each == :message
|
97
90
|
chain = NullOutputChain.instance
|
@@ -100,8 +93,8 @@ module Fluent
|
|
100
93
|
es.each do |time, record|
|
101
94
|
@outputs.each {|output| output.emit(tag, OneEventStream.new(time, record), chain) }
|
102
95
|
finish = Time.now
|
103
|
-
|
104
|
-
|
96
|
+
emit_tag = @tag_proc.call(tag)
|
97
|
+
elapsed(emit_tag) << (finish - start).to_f
|
105
98
|
start = finish
|
106
99
|
end
|
107
100
|
}
|
@@ -110,12 +103,22 @@ module Fluent
|
|
110
103
|
Proc.new {|tag, es|
|
111
104
|
t = Time.now
|
112
105
|
@outputs.each {|output| output.emit(tag, es, chain) }
|
113
|
-
|
114
|
-
|
106
|
+
emit_tag = @tag_proc.call(tag)
|
107
|
+
elapsed(emit_tag) << (Time.now - t).to_f
|
115
108
|
}
|
116
109
|
end
|
117
110
|
end
|
118
111
|
|
112
|
+
def initial_elapsed(prev_elapsed = nil)
|
113
|
+
return {} if !@zero_emit or prev_elapsed.nil?
|
114
|
+
elapsed = {}
|
115
|
+
prev_elapsed.keys.each do |tag|
|
116
|
+
next if prev_elapsed[tag].empty? # Prohibit to emit anymore
|
117
|
+
elapsed[tag] = []
|
118
|
+
end
|
119
|
+
elapsed
|
120
|
+
end
|
121
|
+
|
119
122
|
def start
|
120
123
|
@outputs.each {|o|
|
121
124
|
o.start
|
@@ -143,15 +146,15 @@ module Fluent
|
|
143
146
|
end
|
144
147
|
|
145
148
|
def flush_emit
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
end
|
149
|
+
flushed_elapsed, @elapsed = @elapsed, initial_elapsed(@elapsed)
|
150
|
+
messages = {}
|
151
|
+
flushed_elapsed.each do |tag, elapsed|
|
152
|
+
num = elapsed.size
|
153
|
+
max = num == 0 ? 0 : elapsed.max
|
154
|
+
avg = num == 0 ? 0 : elapsed.map(&:to_f).inject(:+) / num.to_f
|
155
|
+
messages[tag] = {"max" => max, "avg" => avg, "num" => num}
|
154
156
|
end
|
157
|
+
messages.each {|tag, message| Engine.emit(tag, Engine.now, message) }
|
155
158
|
end
|
156
159
|
|
157
160
|
def emit(tag, es, chain)
|
@@ -17,9 +17,6 @@ end
|
|
17
17
|
describe Fluent::ElapsedTimeOutput do
|
18
18
|
before { Fluent::Test.setup }
|
19
19
|
CONFIG = %[
|
20
|
-
tag tag
|
21
|
-
interval 120
|
22
|
-
each message
|
23
20
|
<store>
|
24
21
|
type stdout
|
25
22
|
</store>
|
@@ -46,7 +43,7 @@ describe Fluent::ElapsedTimeOutput do
|
|
46
43
|
end
|
47
44
|
|
48
45
|
context "check config" do
|
49
|
-
let(:config) { CONFIG }
|
46
|
+
let(:config) { CONFIG + %[tag tag\ninterval 120\neach message]}
|
50
47
|
its(:tag) { should == 'tag' }
|
51
48
|
its(:interval) { should == 120 }
|
52
49
|
its(:each) { should == :message }
|
@@ -121,5 +118,29 @@ describe Fluent::ElapsedTimeOutput do
|
|
121
118
|
driver.instance.elapsed("elapsed.#{expected_tag}").size.should == 4
|
122
119
|
}
|
123
120
|
end
|
121
|
+
|
122
|
+
context 'zero_emit true' do
|
123
|
+
let(:config) { CONFIG + %[zero_emit true]}
|
124
|
+
before do
|
125
|
+
Fluent::Engine.stub(:now).and_return(time)
|
126
|
+
end
|
127
|
+
it {
|
128
|
+
driver.run { messages.each {|message| driver.emit({'message' => message}, time) } }
|
129
|
+
driver.instance.flush_emit["elapsed"]["num"].should == 4
|
130
|
+
driver.instance.flush_emit["elapsed"].should == {"max" => 0, "avg" => 0, "num" => 0}
|
131
|
+
}
|
132
|
+
end
|
133
|
+
|
134
|
+
context 'zero_emit false' do
|
135
|
+
let(:config) { CONFIG }
|
136
|
+
before do
|
137
|
+
Fluent::Engine.stub(:now).and_return(time)
|
138
|
+
end
|
139
|
+
it {
|
140
|
+
driver.run { messages.each {|message| driver.emit({'message' => message}, time) } }
|
141
|
+
driver.instance.flush_emit["elapsed"]["num"].should == 4
|
142
|
+
driver.instance.flush_emit.should == {}
|
143
|
+
}
|
144
|
+
end
|
124
145
|
end
|
125
146
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-elapsed-time
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
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-01-
|
11
|
+
date: 2014-01-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fluentd
|