flow-to-geckoboard
Version:
Creates a writable stream for pushing data to Geckoboard.
295 lines (200 loc) • 7.57 kB
Markdown
Geckoboard
===
[![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Coverage Status][codecov-image]][codecov-url] [![Dependencies][dependencies-image]][dependencies-url]
> Creates a [writable stream](https://nodejs.org/api/stream.html) for pushing data to [Geckoboard](https://www.geckoboard.com/).
``` bash
$ npm install flow-to-geckoboard
```
For use in the browser, use [browserify](https://github.com/substack/node-browserify).
``` javascript
var stream = require( 'flow-to-geckoboard' );
```
Creates a [writable stream](https://nodejs.org/api/stream.html) for pushing data to [Geckoboard](https://www.geckoboard.com/).
``` javascript
var oStream = stream({
'key': '<your_key_goes_here>',
'id': '<your_widget_id_goes_here>'
});
// Data for a Geck-o-Meter widget:
var data = {
'item': Math.random() * 100,
'min': {
'value': 0
},
'max': {
'value': 100
}
};
// Write the data to the stream:
oStream.write( JSON.stringify( data ) );
// End the stream:
oStream.end();
```
The function accepts the following options:
* __objectMode__: `boolean` which specifies whether a [stream](https://nodejs.org/api/stream.html) should operate in object mode. Default: `false`.
* __decodeStrings__: `boolean` which specifies whether written `strings` should be decoded into `Buffer` objects. Default: `true`.
* __highWaterMark__: specifies the `Buffer` level at which `write()` calls start returning `false`. Default: `16` (16KB).
To set [stream](https://nodejs.org/api/stream.html) `options`,
``` javascript
var opts = {
'key': '<your_key_goes_here>',
'id': '<your_widget_id_goes_here>',
'objectMode': true,
'decodeStrings': false,
'highWaterMark': 64
};
var oStream = stream( opts );
```
Creates a reusable [stream](https://nodejs.org/api/stream.html) factory. The factory method ensures [streams](https://nodejs.org/api/stream.html) are configured identically by using the same set of provided `options`.
``` javascript
var opts = {
'key': '<your_key_goes_here>',
'id': '<your_widget_id_goes_here>'
};
var factory = stream.factory( opts );
// Create 10 identically configured streams...
var streams = [];
for ( var i = 0; i < 10; i++ ) {
streams.push( factory() );
}
```
This method is a convenience function to create [streams](https://nodejs.org/api/stream.html) which always operate in `objectMode`. The method will __always__ override the `objectMode` option in `options`.
``` javascript
var opts = {
'key': '<your_key_goes_here>',
'id': '<your_widget_id_goes_here>'
};
var data = {
'item': Math.random() * 100,
'min': {
'value': 0
},
'max': {
'value': 100
}
};
var oStream = stream.objectMode( opts );
oStream.write( data );
oStream.end();
```
``` javascript
var Stream = require( 'flow-to-geckoboard' );
var oStream,
data,
i;
oStream = new Stream({
'key': '<your_key_goes_here>', // INSERT KEY HERE //
'id': '<your_widget_id_goes_here>' // INSERT WIDGET ID HERE //
});
function write( data ) {
return function() {
oStream.write( JSON.stringify( data ) );
};
}
function end() {
oStream.end();
}
for ( i = 0; i < 100; i++ ) {
data = {
'item': Math.random() * 100,
'min': {
'value': 0
},
'max': {
'value': 100
}
};
// Stagger posting values to Geckoboard:
setTimeout( write( data ), i*1000 );
}
// Close the stream:
setTimeout( end, i*1000 );
```
To run the example code from the top-level application directory,
``` bash
$ node ./examples/index.js
```
---
To use the module as a general utility, install the module globally
``` bash
$ npm install -g flow-to-geckoboard
```
``` bash
Usage: flow-to-geckoboard --key <key> --widget <widget_id> [options]
Options:
-h, --help Print this message.
-V, --version Print the package version.
--key [key] Geckoboard API key.
--widget [widget] Geckoboard widget id.
-hwm, --highwatermark [hwm] Specify how much data can be buffered into memory
before applying back pressure. Default: 16KB.
-nds, --no-decodestrings Prevent strings from being converted into buffers
before streaming to destination. Default: false.
-om, --objectmode Write any value rather than only buffers and strings.
Default: false.
```
The `flow-to-geckoboard` command is available as a [standard stream](http://en.wikipedia.org/wiki/Pipeline_%28Unix%29).
``` bash
$ <stdout> | flow-to-geckoboard --key <key> --widget <widget_id>
```
* In addition to the command-line `key` and `widget` options, the `key` and `widget` options may be specified via environment variables: `GECKOBOARD_API_KEY` and `GECKOBOARD_WIDGET_ID`. The command-line options __always__ take precedence.
``` bash
$ echo '{"item":50,"min":{"value":0},"max":{"value":100}}' | flow-to-geckboard --key <key> --widget <widget_id>
```
Setting credentials using environment variables:
``` bash
$ GECKOBOARD_API_KEY=<key> GECKOBOARD_WIDGET_ID=<widget_id> echo '{"item":67,"min":{"value":0},"max":{"value":100}}' | flow-to-geckboard
```
For local installations, modify the above command to point to the local installation directory; e.g.,
``` bash
$ echo '{"item":32,"min":{"value":0},"max":{"value":100}}' | ./node_modules/.bin/flow-to-geckoboard --key <key> --widget <widget_id>
```
Or, if you have cloned this repository and run `npm install`, modify the command to point to the executable; e.g.,
``` bash
$ echo '{"item":49,"min":{"value":0},"max":{"value":100}}' | node ./bin/cli --key <key> --widget <widget_id>
```
---
Unit tests use the [Mocha](http://mochajs.org) test framework with [Chai](http://chaijs.com) assertions. To run the tests, execute the following command in the top-level application directory:
``` bash
$ make test
```
All new feature development should have corresponding unit tests to validate correct functionality.
This repository uses [Istanbul](https://github.com/gotwarlost/istanbul) as its code coverage tool. To generate a test coverage report, execute the following command in the top-level application directory:
``` bash
$ make test-cov
```
Istanbul creates a `./reports/coverage` directory. To access an HTML version of the report,
``` bash
$ make view-cov
```
---
[](http://opensource.org/licenses/MIT).
Copyright © 2015. The [Flow.io](https://github.com/flow-io) Authors.
[]: http://img.shields.io/npm/v/flow-to-geckoboard.svg
[]: https://npmjs.org/package/flow-to-geckoboard
[]: http://img.shields.io/travis/flow-io/to-geckoboard/master.svg
[]: https://travis-ci.org/flow-io/to-geckoboard
[]: https://img.shields.io/codecov/c/github/flow-io/to-geckoboard/master.svg
[]: https://codecov.io/github/flow-io/to-geckoboard?branch=master
[]: http://img.shields.io/david/flow-io/to-geckoboard.svg
[]: https://david-dm.org/flow-io/to-geckoboard
[]: http://img.shields.io/david/dev/flow-io/to-geckoboard.svg
[]: https://david-dm.org/dev/flow-io/to-geckoboard
[]: http://img.shields.io/github/issues/flow-io/to-geckoboard.svg
[]: https://github.com/flow-io/to-geckoboard/issues