Exponential moving average from a stream.
npm install ema-streamema-stream
==========
Exponential moving average from a stream. Module and command line.

!Travis
example - module
================
``js
var emaStream = require('ema-stream');
var ema = emaStream();
var count = 0;
function source () {
var r = count++;
ema.write(r.toString() + '\n');
}
setInterval(source, 100);
ema.on('readable', function () {
ema.pipe(process.stdout);
})
`
``
3
10
18
etc
`javascript
var emaStream = require('ema-stream');
var ema = emaStream({
pluck: ['key1', 'key2']
});
var count = 0;
function source () {
var obj = {
key1: count++,
key2: Math.random() * 500
};
ema.write(JSON.stringify(obj) + '\n');
}
setInterval(source, 100);
ema.on('readable', function () {
ema.pipe(process.stdout);
});
`
``
{"key1":3,"key2":232}
{"key1":10,"key2":245}
{"key1":18,"key2":210}
etc.
` js`
var emaStream = require('ema-stream');
Create a new stream instance ema with options opts:
* opts.window: 60000 - Length of window in ms.opts.pluck: null
* - Keys to pluck from incoming JSON. If unspecified,opts.integers: true
incoming chunks is assumed to be numbers.
* - Whether to round output.opts.refreshEvery: 1000
* - How often to emit current average in ms.opts.emitFirstValue: false
* - Whether to emit on the first value or wait
until the first window has passed to emit the first time.
example - command line
======================
`
$ counter
0
1
2
3
^C
$ counter | ema-stream
3 # Output is refreshed every second. 3, 10, 19, 28, etc.
`json source
`
$ tail -f logfile.log
{"type":"request","statusCode":200,"wallTime":27,"dbConnections":40}
{"type":"request","statusCode":200,"wallTime":45,"dbConnections":42}
{"type":"request","statusCode":200,"wallTime":207,"dbConnections":48}
{"type":"request","statusCode":200,"wallTime":205,"dbConnections":50}
^C
arguments
`
$ ema-stream \
--window 60000 # Window to calculcate moving average from in ms.
--integers true # Whether to round output.
--refreshEvery 1000 # How often to refresh current average in ms.
--pluck # Comma-separated list of keys to pluck from incoming JSON. If
unspecified, input is assumed to be numbers.
--emitFirstValue false # Whether to emit on the first value or wait
until the first window has passed to emit the first time.
``