https://github.com/sandinmyjoints/ema-stream
Exponential moving average from a stream. Module and command line.
https://github.com/sandinmyjoints/ema-stream
javascript nodejs stream streams
Last synced: about 2 months ago
JSON representation
Exponential moving average from a stream. Module and command line.
- Host: GitHub
- URL: https://github.com/sandinmyjoints/ema-stream
- Owner: sandinmyjoints
- Created: 2015-11-07T20:58:08.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2015-11-12T02:03:04.000Z (over 9 years ago)
- Last Synced: 2025-03-09T15:36:37.438Z (3 months ago)
- Topics: javascript, nodejs, stream, streams
- Language: JavaScript
- Homepage:
- Size: 0 Bytes
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
ema-stream
==========Exponential moving average from a stream. Module and command line.
[](http://standardjs.com/)
example - module
================## numbers source
```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);
})
```### output
```
3
10
18
etc
```## json source
```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);
});
```### output
```
{"key1":3,"key2":232}
{"key1":10,"key2":245}
{"key1":18,"key2":210}
etc.
```# methods
``` js
var emaStream = require('ema-stream');
```## var ema = emaStream(opts)
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,
incoming chunks is assumed to be numbers.
* `opts.integers: true` - 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
======================## numbers source
```
$ 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# Pluck only the keys we're interested in.
$ tail -f logfile.log | ema-stream --pluck wallTime,dbConnections
{"wallTime":62,"dbConnections":42} # Ouput is refreshed every second.
```# 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.
```