# fluent-plugin-datacalculator
-----
Simple Calculate messages and summarize the calculated results.
* Summarize calculated results per min/hour/day
* Summarize calculated results per second (average every min/hour/day)
* Use finalizer of summarized results (e.g. average)
## Usage
if fluentd set like that:
```
type datacalculator
tag result.shop
count_interval 5s
aggregate all
formulas sum = amount * price, cnt = 1, total = amount
finalizer ave = cnt > 0 ? 1.00 * sum / cnt : 0
```
recieves bellow messages in a minute:
```
{"area_id": 1, "mission_id":1, "amount": 3, "price": 100}
{"area_id": 2, "mission_id":2, "amount": 2, "price": 200}
{"area_id": 3, "mission_id":1, "amount": 3, "price": 100}
{"area_id": 4, "mission_id":1, "amount": 4, "price": 300}
{"area_id": 5, "mission_id":2, "amount": 5, "price": 200}
{"area_id": 1, "mission_id":1, "amount": 1, "price": 400}
{"area_id": 4, "mission_id":1, "amount": 2, "price": 200}
{"area_id": 3, "mission_id":2, "amount": 1, "price": 300}
```
then output below:
```
2014-02-26 13:52:28 +0900 result.shop: {"sum":4300.0,"cnt":8,"total":21.0,"ave":537.5}
```
## Configuration
### Example
```
type datacalculate
unit minute
aggregate all
fomulas sum = amount * price, amounts = amount
```
If you use finalizer, like this
```
type datacalculate
unit minute
aggregate all
fomulas sum = amount * price, amounts = amount
finalizer average = amounts > 0 ? 1.0 * sum / amounts : 0
```
Finalizer uses the summarized output, so argv in finalizer must exist in left-hand side in fomulas.
### Options
* `count_interval`: aggregate time interval e.g. `5s`, `15m`, `3h`
* `aggregate`: if set `all` then all matched tags are aggregated. if set `tag` then each tags are aggregated separately (default `tag`).
* `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`.
* `retain_key_combinations`: option available if you want to retain key combination created in previous to next interval (default `true`).
* `formulas`: define value and function comma separated. values are set in messages.
* `finalizer`: functions defined are executed aggregated phase. value are set in messages.
## TODO
* multiple finalizer
## Copyright
Copyright:: Copyright (c) 2012- Muddy Dixon
License:: Apache License, Version 2.0