fluent-plugin-datacalculator 0.0.5 → 0.0.6
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 +7 -0
- data/README.md +87 -0
- data/example.conf +1 -0
- data/fluent-plugin-datacalculator.gemspec +1 -1
- data/lib/fluent/plugin/out_datacalculator.rb +6 -1
- data/test/plugin/test_out_datacalculator.rb +34 -0
- metadata +22 -18
- data/README.rdoc +0 -52
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2c362933d723f8d7de355e0d81e36b9c7116ec7b
|
4
|
+
data.tar.gz: 9be7571d4f6c1b809eda3cb5b69504b05b21c95e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b8ad5784dea42de7e1fadead741046882e7a6be8ffa02fa3315d70cd67c2ffcb67aa58a4fe1f5f5066c48146b2a83bc5f5075760e3f7bb60c7692af13ffb49d9
|
7
|
+
data.tar.gz: cd0e9b17f3c57900b98ec0b526b0806433657cbb300110ca8033e924e83c3a60dda2086b0154e212f1af37e65f33e68ec39dfe35101531e465a00a422c5be7b4
|
data/README.md
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
# fluent-plugin-datacalculator
|
2
|
+
-----
|
3
|
+
|
4
|
+
Simple Calculate messages and summarize the calculated results.
|
5
|
+
|
6
|
+
* Summarize calculated results per min/hour/day
|
7
|
+
* Summarize calculated results per second (average every min/hour/day)
|
8
|
+
* Use finalizer of summarized results (e.g. average)
|
9
|
+
|
10
|
+
## Usage
|
11
|
+
|
12
|
+
if fluentd set like that:
|
13
|
+
|
14
|
+
```
|
15
|
+
<match payment.shop>
|
16
|
+
type datacalculator
|
17
|
+
tag result.shop
|
18
|
+
count_interval 5s
|
19
|
+
aggregate all
|
20
|
+
formulas sum = amount * price, cnt = 1, total = amount
|
21
|
+
finalizer ave = cnt > 0 ? 1.00 * sum / cnt : 0
|
22
|
+
</match>
|
23
|
+
```
|
24
|
+
|
25
|
+
recieves bellow messages in a minute:
|
26
|
+
|
27
|
+
```
|
28
|
+
{"area_id": 1, "mission_id":1, "amount": 3, "price": 100}
|
29
|
+
{"area_id": 2, "mission_id":2, "amount": 2, "price": 200}
|
30
|
+
{"area_id": 3, "mission_id":1, "amount": 3, "price": 100}
|
31
|
+
{"area_id": 4, "mission_id":1, "amount": 4, "price": 300}
|
32
|
+
{"area_id": 5, "mission_id":2, "amount": 5, "price": 200}
|
33
|
+
{"area_id": 1, "mission_id":1, "amount": 1, "price": 400}
|
34
|
+
{"area_id": 4, "mission_id":1, "amount": 2, "price": 200}
|
35
|
+
{"area_id": 3, "mission_id":2, "amount": 1, "price": 300}
|
36
|
+
```
|
37
|
+
|
38
|
+
then output below:
|
39
|
+
|
40
|
+
```
|
41
|
+
2014-02-26 13:52:28 +0900 result.shop: {"sum":4300.0,"cnt":8,"total":21.0,"ave":537.5}
|
42
|
+
```
|
43
|
+
|
44
|
+
## Configuration
|
45
|
+
|
46
|
+
### Example
|
47
|
+
|
48
|
+
```
|
49
|
+
<match accesslog.**>
|
50
|
+
type datacalculate
|
51
|
+
unit minute
|
52
|
+
aggregate all
|
53
|
+
fomulas sum = amount * price, amounts = amount
|
54
|
+
</match>
|
55
|
+
```
|
56
|
+
|
57
|
+
If you use finalizer, like this
|
58
|
+
|
59
|
+
```
|
60
|
+
<match accesslog.**>
|
61
|
+
type datacalculate
|
62
|
+
unit minute
|
63
|
+
aggregate all
|
64
|
+
fomulas sum = amount * price, amounts = amount
|
65
|
+
finalizer average = amounts > 0 ? 1.0 * sum / amounts : 0
|
66
|
+
</match>
|
67
|
+
```
|
68
|
+
|
69
|
+
Finalizer uses the summarized output, so argv in finalizer must exist in left-hand side in fomulas.
|
70
|
+
|
71
|
+
### Options
|
72
|
+
|
73
|
+
* `count_interval`: aggregate time interval e.g. `5s`, `15m`, `3h`
|
74
|
+
* `aggregate`: if set `all` then all matched tags are aggregated. if set `tag` then each tags are aggregated separately (default `tag`).
|
75
|
+
* `input_tag_remove_prefix`: option available if you want to remove tag prefix from output field names. This option available when aggregate is set `tag`.
|
76
|
+
* `retain_key_combinations`: option available if you want to retain key combination created in previous to next interval (default `true`).
|
77
|
+
* `formulas`: define value and function comma separated. values are set in messages.
|
78
|
+
* `finalizer`: functions defined are executed aggregated phase. value are set in messages.
|
79
|
+
|
80
|
+
## TODO
|
81
|
+
|
82
|
+
* multiple finalizer
|
83
|
+
|
84
|
+
## Copyright
|
85
|
+
|
86
|
+
Copyright:: Copyright (c) 2012- Muddy Dixon
|
87
|
+
License:: Apache License, Version 2.0
|
data/example.conf
CHANGED
@@ -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-datacalculator"
|
6
|
-
s.version = "0.0.
|
6
|
+
s.version = "0.0.6"
|
7
7
|
s.authors = ["Muddy Dixon"]
|
8
8
|
s.email = ["muddydixon@gmail.com"]
|
9
9
|
s.homepage = "https://github.com/muddydixon/fluent-plugin-datacalculator"
|
@@ -10,6 +10,7 @@ class Fluent::DataCalculatorOutput < Fluent::Output
|
|
10
10
|
config_param :input_tag_remove_prefix, :string, :default => nil
|
11
11
|
config_param :formulas, :string
|
12
12
|
config_param :finalizer, :string, :default => nil
|
13
|
+
config_param :retain_key_combinations, :bool, :default => true
|
13
14
|
|
14
15
|
attr_accessor :tick
|
15
16
|
attr_accessor :counts
|
@@ -242,7 +243,11 @@ class Fluent::DataCalculatorOutput < Fluent::Output
|
|
242
243
|
end
|
243
244
|
|
244
245
|
def flush(step)
|
245
|
-
|
246
|
+
if @retain_key_combinations
|
247
|
+
flushed, @counts = @counts,count_initialized(@counts.keys.dup)
|
248
|
+
else
|
249
|
+
flushed, @counts = @counts,count_initialized
|
250
|
+
end
|
246
251
|
generate_output(flushed, step)
|
247
252
|
end
|
248
253
|
|
@@ -240,4 +240,38 @@ class DataCalculatorOutputTest < Test::Unit::TestCase
|
|
240
240
|
assert_equal counts[pat], r['count']
|
241
241
|
end
|
242
242
|
end
|
243
|
+
|
244
|
+
def test_flush
|
245
|
+
# retain_key_combinations is true
|
246
|
+
d1 = create_driver(%[
|
247
|
+
unit minute
|
248
|
+
aggregate keys area_id, mission_id
|
249
|
+
formulas sum = amount * price, count = 1
|
250
|
+
retain_key_combinations true
|
251
|
+
], 'test.input')
|
252
|
+
d1.run do
|
253
|
+
60.times do
|
254
|
+
d1.emit({'area_id' => 1, 'mission_id' => 1, 'amount' => 3, 'price' => 100})
|
255
|
+
d1.emit({'area_id' => 2, 'mission_id' => 1, 'amount' => 3, 'price' => 100})
|
256
|
+
end
|
257
|
+
end
|
258
|
+
assert_equal d1.instance.flush(60).size, 2
|
259
|
+
assert_equal d1.instance.flush(60).size, 2
|
260
|
+
|
261
|
+
# retain_key_combinations is false
|
262
|
+
d2 = create_driver(%[
|
263
|
+
unit minute
|
264
|
+
aggregate keys area_id, mission_id
|
265
|
+
formulas sum = amount * price, count = 1
|
266
|
+
retain_key_combinations false
|
267
|
+
], 'test.input')
|
268
|
+
d2.run do
|
269
|
+
60.times do
|
270
|
+
d2.emit({'area_id' => 1, 'mission_id' => 1, 'amount' => 3, 'price' => 100})
|
271
|
+
d2.emit({'area_id' => 2, 'mission_id' => 1, 'amount' => 3, 'price' => 100})
|
272
|
+
end
|
273
|
+
end
|
274
|
+
assert_equal d2.instance.flush(60).size, 2
|
275
|
+
assert_equal d2.instance.flush(60).size, 0
|
276
|
+
end
|
243
277
|
end
|
metadata
CHANGED
@@ -1,38 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-datacalculator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.6
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Muddy Dixon
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-02-26 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: fluentd
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
25
27
|
- !ruby/object:Gem::Dependency
|
26
28
|
name: fluentd
|
27
|
-
requirement:
|
28
|
-
none: false
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
|
-
- -
|
31
|
+
- - '>='
|
31
32
|
- !ruby/object:Gem::Version
|
32
33
|
version: '0'
|
33
34
|
type: :runtime
|
34
35
|
prerelease: false
|
35
|
-
version_requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
36
41
|
description: Output filter plugin to calculate messages that matches specified conditions
|
37
42
|
email:
|
38
43
|
- muddydixon@gmail.com
|
@@ -43,7 +48,7 @@ files:
|
|
43
48
|
- .gitignore
|
44
49
|
- Gemfile
|
45
50
|
- LICENSE.txt
|
46
|
-
- README.
|
51
|
+
- README.md
|
47
52
|
- Rakefile
|
48
53
|
- example.conf
|
49
54
|
- example.json
|
@@ -53,27 +58,26 @@ files:
|
|
53
58
|
- test/plugin/test_out_datacalculator.rb
|
54
59
|
homepage: https://github.com/muddydixon/fluent-plugin-datacalculator
|
55
60
|
licenses: []
|
61
|
+
metadata: {}
|
56
62
|
post_install_message:
|
57
63
|
rdoc_options: []
|
58
64
|
require_paths:
|
59
65
|
- lib
|
60
66
|
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
-
none: false
|
62
67
|
requirements:
|
63
|
-
- -
|
68
|
+
- - '>='
|
64
69
|
- !ruby/object:Gem::Version
|
65
70
|
version: '0'
|
66
71
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
-
none: false
|
68
72
|
requirements:
|
69
|
-
- -
|
73
|
+
- - '>='
|
70
74
|
- !ruby/object:Gem::Version
|
71
75
|
version: '0'
|
72
76
|
requirements: []
|
73
77
|
rubyforge_project: fluent-plugin-datacalculator
|
74
|
-
rubygems_version:
|
78
|
+
rubygems_version: 2.0.14
|
75
79
|
signing_key:
|
76
|
-
specification_version:
|
80
|
+
specification_version: 4
|
77
81
|
summary: Output filter plugin to calculate messages that matches specified conditions
|
78
82
|
test_files:
|
79
83
|
- test/helper.rb
|
data/README.rdoc
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
= fluent-plugin-datacalculator
|
2
|
-
|
3
|
-
== Component
|
4
|
-
|
5
|
-
=== DataCalculateOutput
|
6
|
-
|
7
|
-
Simple Calculate messages and summarize the calculated results.
|
8
|
-
|
9
|
-
- Summarize calculated results per min/hour/day
|
10
|
-
- Summarize calculated results per second (average every min/hour/day)
|
11
|
-
- Use finalizer of summarized results (e.g. average)
|
12
|
-
|
13
|
-
'input_tag_remove_prefix' option available if you want to remove tag prefix from output field names.
|
14
|
-
|
15
|
-
== Configuration
|
16
|
-
|
17
|
-
=== DataCalculateOutput
|
18
|
-
|
19
|
-
<match accesslog.**>
|
20
|
-
type datacalculate
|
21
|
-
unit minute
|
22
|
-
aggregate all
|
23
|
-
fomulas sum = amount * price, amounts = amount
|
24
|
-
</match>
|
25
|
-
|
26
|
-
If you use finalizer, like this
|
27
|
-
|
28
|
-
<match accesslog.**>
|
29
|
-
type datacalculate
|
30
|
-
unit minute
|
31
|
-
aggregate all
|
32
|
-
fomulas sum = amount * price, amounts = amount
|
33
|
-
finalizer average = amounts > 0 ? 1.0 * sum / amounts : 0
|
34
|
-
</match>
|
35
|
-
|
36
|
-
Finalizer uses the summarized output, so argv in finalizer must exist in left-hand side in fomulas.
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
== TODO
|
41
|
-
|
42
|
-
- multiple finalizer
|
43
|
-
- patches welcome!
|
44
|
-
|
45
|
-
== Thanks
|
46
|
-
|
47
|
-
tagomoris's fluent-plugin-datacounter is AWESOME plugin! That's nice!
|
48
|
-
|
49
|
-
== Copyright
|
50
|
-
|
51
|
-
Copyright:: Copyright (c) 2012- Muddy Dixon
|
52
|
-
License:: Apache License, Version 2.0
|