opentsdb-url
Version:
OpenTSDB HTTP data request URL generator.
176 lines (110 loc) • 4.4 kB
Markdown
URL
===
[![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Coverage Status][coveralls-image]][coveralls-url] [![Dependencies][dependencies-image]][dependencies-url]
> URL generator for [OpenTSDB](http://opentsdb.net) HTTP data requests.
For use in Node.js,
``` bash
$ npm install opentsdb-url
```
For use in the browser, use [browserify](https://github.com/substack/node-browserify).
To use the module,
``` javascript
var createFactory = require( 'opentsdb-url' );
```
A URL generator must be bound to a particular OpenTSDB [client](https://github.com/opentsdb-js/client) instance.
``` javascript
var createClient = require( 'opentsdb-client' );
// Create a new client:
var client = createClient();
// Bind the generator to the client:
var url = createFactory( client );
```
The instance has the following methods...
Creates a URL template based on the OpenTSDB client configuration. The template contains two parameters: `start` and `end`.
``` javascript
url.template();
```
Note: this method does not provide public access to the URL template. Instead, the method returns the current URL generator instance.
Inserts `start` and `end` times into a template OpenTSDB query string. The `start` and `end` times are obtained from the bound client instance.
``` javascript
url.create();
// returns '...'
```
Note: Ensure that you have first generated a template __before__ trying to create a URL.
The motivation for the `template`/`create` separation is the recognition that `start` and `end` times are more likely to change than other `client` parameters, particularly when periodically polling OpenTSDB for data belonging to the same metric.
``` javascript
var createClient = require( 'opentsdb-client' ),
mQuery = require( 'opentsdb-mquery' ),
createFactory = require( 'opentsdb-url' ),
end = Date.now(),
start = end - 1000,
client,
query,
url;
// Create a new metric query and configure:
query = mQuery();
query.metric( 'cpu.utilization' )
.tags( 'beep', 'boop' );
// Create a new client and configure:
client = createClient();
client.queries( query );
// Bind the client to a URL generator:
url = createFactory( client );
// Create the url template:
url.template();
// Periodically create new URLs...
for ( var i = 0; i < 10; i++ ) {
setTimeout( createURL( i*1000 ), i*1000 );
}
function createURL( offset ) {
var begin = start + offset,
stop = end + offset;
return function onTimeout() {
client.start( begin )
.end( stop );
console.log( url.create() );
};
}
```
To run the example code from the top-level application directory,
``` bash
$ node ./examples/index.js
```
Unit tests use the [Mocha](http://visionmedia.github.io/mocha) 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 © 2014. Athan Reines.
[]: http://img.shields.io/npm/v/opentsdb-url.svg
[]: https://npmjs.org/package/opentsdb-url
[]: http://img.shields.io/travis/opentsdb-js/url/master.svg
[]: https://travis-ci.org/opentsdb-js/url
[]: https://img.shields.io/coveralls/opentsdb-js/url/master.svg
[]: https://coveralls.io/r/opentsdb-js/url?branch=master
[]: http://img.shields.io/david/opentsdb-js/url.svg
[]: https://david-dm.org/opentsdb-js/url
[]: http://img.shields.io/david/dev/opentsdb-js/url.svg
[]: https://david-dm.org/dev/opentsdb-js/url
[]: http://img.shields.io/github/issues/opentsdb-js/url.svg
[]: https://github.com/opentsdb-js/url/issues