npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@sandfox/rollbar

v0.6.3

Published

A standalone (Node.js) client for Rollbar

Downloads

10

Readme

Rollbar notifier for Node.js Build Status

Node.js library for reporting exceptions and other messages to Rollbar. Requires a Rollbar account.

Quick start

// include and initialize the rollbar library with your access token
var rollbar = require("rollbar");
rollbar.init("POST_SERVER_ITEM_ACCESS_TOKEN");

// record a generic message and send to rollbar
rollbar.reportMessage("Hello world!");

// more is required to automatically detect and report errors.
// keep reading for details.

Be sure to replace POST_SERVER_ITEM_ACCESS_TOKEN with your project's post_server_item access token, which you can find in the Rollbar.com interface.

Installation

Install using the node package manager, npm:

$ npm install --save rollbar

Configuration

Using Express

var express = require('express');
var rollbar = require('rollbar');

var app = express();

app.get('/', function(req, res) {
  // ...
});

// Use the rollbar error handler to send exceptions to your rollbar account
app.use(rollbar.errorHandler('POST_SERVER_ITEM_ACCESS_TOKEN'));

app.listen(6943);

Standalone

In your main application, require and initialize using your access_token::

var rollbar = require("rollbar");
rollbar.init("POST_SERVER_ITEM_ACCESS_TOKEN");

Other options can be passed into the init() function using a second parameter. E.g.:

// Configure the library to send errors to api.rollbar.com
rollbar.init("POST_SERVER_ITEM_ACCESS_TOKEN", {
  environment: "staging",
  endpoint: "https://api.rollbar.com/api/1/"
});

Usage

Uncaught exceptions

Rollbar can be registered as a handler for any uncaught exceptions in your Node process:

var options = {
  // Call process.exit(1) when an uncaught exception occurs but after reporting all
  // pending errors to Rollbar.
  //
  // Default: false
  exitOnUncaughtException: true
};
rollbar.handleUncaughtExceptions("POST_SERVER_ITEM_ACCESS_TOKEN", options);

Unhandled rejections

Rollbar can also be registered as a handler for any unhandled Promise rejections in your Node process:

rollbar.handleUnhandledRejections("POST_SERVER_ITEM_ACCESS_TOKEN");

To simplify enabling both handlers, you can use the handleUncaughtExceptionsAndRejections method.

rollbar.handleUncaughtExceptionsAndRejections("POST_SERVER_ITEM_ACCESS_TOKEN", options);

Caught exceptions

To report an exception that you have caught, use handleError or the full-powered handleErrorWithPayloadData:

var rollbar = require('rollbar');
rollbar.init('POST_SERVER_ITEM_ACCESS_TOKEN');

try {
  someCode();
} catch (e) {
  rollbar.handleError(e);

  // if you have a request object (or a function that returns one), pass it as the second arg
  // see below for details about what the request object is expected to be
  rollbar.handleError(e, request);

  // you can also pass a callback, which will be called upon success/failure
  rollbar.handleError(e, function(err2) {
    if (err2) {
      // an error occurred
    } else {
      // success
    }
  });

  // if you have a request and a callback, pass the callback last
  rollbar.handleError(e, request, callback);

  // to specify payload options - like extra data, or the level - use handleErrorWithPayloadData
  rollbar.handleErrorWithPayloadData(e, {level: "warning", custom: {someKey: "arbitrary value"}});

  // can also take request and callback, like handleError:
  rollbar.handleErrorWithPayloadData(e, {level: "info"}, request);
  rollbar.handleErrorWithPayloadData(e, {level: "info"}, callback);
  rollbar.handleErrorWithPayloadData(e, {level: "info"}, request, callback);
}

Log messages

To report a string message, possibly along with additional context, use reportMessage or the full-powered reportMessageWithPayloadData.

var rollbar = require('rollbar');
rollbar.init('POST_SERVER_ITEM_ACCESS_TOKEN');

// reports a string message at the default severity level ("error")
rollbar.reportMessage("Timeout connecting to database");


// reports a string message at the level "warning", along with a request and callback
// only the first param is required
// valid severity levels: "critical", "error", "warning", "info", "debug"
rollbar.reportMessage("Response time exceeded threshold of 1s", "warning", request, callback);

// reports a string message along with additional data conforming to the Rollbar API Schema
// documented here: https://rollbar.com/docs/api/items_post/
// only the first two params are required
rollbar.reportMessageWithPayloadData("Response time exceeded threshold of 1s", {
    level: "warning",
    custom: {
      threshold: 1,
      timeElapsed: 2.3
    }
  }, request, callback);

The Request Object

If your Node.js application is responding to web requests, you can send data about the current request along with each report to Rollbar. This will allow you to replay requests, track events by browser, IP address, and much more.

handleError, reportMessage, handleErrorWithPayloadData, and reportMessageWithPayloadData all accept a request parameter as the second, third, third, and third arguments respectively. If it is a function, it will be called and the result used.

If you're using Express, just pass the express request object. If you're using something custom, pass an object with these keys (all optional):

  • headers: an object containing the request headers
  • protocol: the request protocol (e.g. "https")
  • url: the URL starting after the domain name (e.g. "/index.html?foo=bar")
  • method: the request method (e.g. "GET")
  • body: the request body as a string
  • route: an object containing a 'path' key, which will be used as the "context" for the event (e.g. {"path": "home/index"})

Sensitive param names will be scrubbed from the request body and, if scrubHeaders is configured, headers. See the scrubFields and scrubHeaders configuration options for details.

Person Tracking

If your application has authenticated users, you can track which user ("person" in Rollbar parlance) was associated with each event.

If you're using the Passport authentication library, this will happen automatically when you pass the request object (which will have "user" attached). Otherwise, attach one of these keys to the request object described in the previous section:

  • rollbar_person or user: an object like {"id": "123", "username": "foo", "email": "[email protected]"}. id is required, others are optional.
  • user_id: the user id as an integer or string, or a function which when called will return the user id

Note: in Rollbar, the id is used to uniquely identify a person; email and username are supplemental and will be overwritten whenever a new value is received for an existing id. The id is a string up to 40 characters long.

Configuration reference

rollbar.init("access token", optionsObj) takes the following configuration options:

e.g. 'master'

e.g. '868ff435d6a480929103452e5ebe8671c5c89f77'

Default: 'https://api.rollbar.com/api/1/'

Default: 'unspecified'

Default: hostname returned from os.hostname()

e.g. '/Users/bob/Development'

Default: ['passwd', 'password', 'secret', 'confirm_password', 'password_confirmation']

Default: []

Default: debug (i.e. all messages will be sent) Valid levels, in order of severity: critical, error, warning, info, debug

Default: true

Console output

To show operational messages, include Rollbar:* (or, for only some messages, Rollbar:log or Rollbar:error) in your DEBUG environment variable.

Nested exceptions

The Rollbar API supports nested exceptions. This allows you to report an error along with the original cause as a nested exception.

In order to create a nested error you should use the rollbar.Error class provided by this library.

E.g.

var rollbar = require('rollbar');
var util = require('util');


function NetworkTimeout(message, nested) {
  rollbar.Error.call(this, message, nested);
}

util.inherits(NetworkTimeout, rollbar.Error);


function PurchaseFailed(message, nested) {
  rollbar.Error.call(this, message, nested);
}

util.inherits(PurchaseFailed, rollbar.Error);


function sendPurchase(data, cb) {
  var err = new NetworkTimeout('Error sending data to payment gateway');

  cb(err, null);
}


function doPurchase(data) {
  sendPurchase(data, function(err, res) {
    if (err) {
      rollbar.handleError(new PurchaseFailed('Purchase has failed', err));
    }
  });
}

doPurchase({
  id: 10,
  user_id: 1,
  amount: 5
});

Examples

See the examples directory for more use cases.

Sails.js

For a full example of setting up a new Sails.js project with Rollbar integration see rollbar-sailsjs-example.

Help / Support

If you have any questions, feedback, etc., drop us a line at [email protected]

For bug reports, please open an issue on GitHub.

Contributing

The project is hosted on GitHub. If you'd like to contribute a change:

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

We're using vows for testing. To run the tests, run: vows --spec test/*