UNPKG

librato-node

Version:

A node.js client for Librato Metrics (http://metrics.librato.com/)

174 lines (121 loc) 4.96 kB
librato-node ============ librato-node is a Node.js client for Librato Metrics (http://metrics.librato.com/) [![build status][travis-badge]][travis-link] [![npm version][npm-badge]][npm-link] [![mit license][license-badge]][license-link] ## Getting Started ### Install ``` yarn add librato-node ``` ### Setup Once `librato.start` is called, a worker will send aggregated stats to Librato once every 60 seconds. ``` javascript var librato = require('librato-node'); librato.configure({email: 'foo@example.com', token: 'ABC123'}); librato.start(); process.once('SIGINT', function() { librato.stop(); // stop optionally takes a callback }); // Don't forget to specify an error handler, otherwise errors will be thrown librato.on('error', function(err) { console.error(err); }); ``` ### Increment Use `librato.increment` to track counts in Librato. On each flush, the incremented total for that period will be sent. ``` javascript var librato = require('librato-node'); librato.increment('foo'); // increment by 1 librato.increment('foo', 2); // increment by 2 librato.increment('foo', 2, {source: 'bar'}); // custom source ``` ### Measurements You can send arbitrary measurements to Librato using `librato.measure`. These will be sent as gauges. For example: ``` javascript var librato = require('librato-node'); librato.measure('member-count', 2001); librato.measure('response-time', 500); librato.measure('foo', 250, {source: 'bar'}); // custom source ``` ### Timing Use `librato.timing` to measure durations in Librato. You can pass it a synchronous function or an asynchronous function (it checks the function arity). For example: ``` javascript var librato = require('librato-node'); // synchronous librato.timing('foo', function() { for (var i=0; i<50000; i++) console.log(i); }); // async without a callback librato.timing('foo', function(done) { setTimeout(done, 1000); }); // async with a callback var workFn = function(done) { setTimeout(function() { done(null, 'foo'); }); }; var cb = function(err, res) { console.log(res); // => 'foo' }; librato.timing('foo', workFn, cb); librato.timing('foo', workFn, {source: 'bar'}, cb); // all timing calls also accept a custom source ``` ### Express librato-node includes Express middleware to log the request count and response times for your app. It also works in other Connect-based apps. ``` javascript var express = require('express'); var librato = require('librato-node'); var app = express(); app.use(librato.middleware()); ``` The key names the middleware uses are configurable by passing an options hash. ``` javascript librato.middleware({requestCountKey: 'myRequestCount', responseTimeKey: 'myResponseTime'}); ``` ### Advanced By default the librato-node worker publishes data every 60 seconds. Configure this value by passing a `period` argument to the `configure` hash. ```javascript var librato = require('librato-node'); librato.configure({email: 'foo@bar.com', token: 'ABC123', period: 5000}) ``` ### Request Options You can pass additional options for the HTTP POST to Librato using the `requestOptions` parameter. See [request/request](https://github.com/request/request) for a complete list of options. For example, to configure a timeout: ```javascript var librato = require('librato-node'); librato.configure({email: 'foo@bar.com', token: 'ABC123', requestOptions: {timeout: 250}}) ``` By default librato-node will retry up to 3 times on connection failures and 5xx responses using an exponential backoff strategy with a 100ms base. These defaults can be overridden using the `requestOptions` paramter. See [requestretry](https://github.com/FGRibreau/node-request-retry) for a list of options. For example, to limit to a single attempt: ```javascript var librato = require('librato-node'); librato.configure({email: 'foo@bar.com', token: 'ABC123', requestOptions: {maxAttempts: 1}}) ``` ------ ## Contributing Please follow our [Code of Conduct](CODE_OF_CONDUCT.md) when contributing to this project. ``` yarn install yarn test ``` ## Deploying a new version This module is automatically deployed when a version tag bump is detected by travis. Remember to update the [changelog](CHANGELOG.md)! ``` yarn version ``` ------ ## History librato-node is largely based off of Librato's own [librato-rack](https://github.com/librato/librato-rack). Visit that repository if you're running Ruby or for more information on Librato Metrics in general. ------ ## License [MIT][license-link] [travis-badge]: http://img.shields.io/travis/goodeggs/librato-node/master.svg?style=flat-square [travis-link]: https://travis-ci.org/goodeggs/librato-node [npm-badge]: http://img.shields.io/npm/v/librato-node.svg?style=flat-square [npm-link]: https://www.npmjs.org/package/librato-node [license-badge]: http://img.shields.io/badge/license-mit-blue.svg?style=flat-square [license-link]: LICENSE.md