Skip to content

Commit

Permalink
add back verbose logging to console.error when we are about to log an…
Browse files Browse the repository at this point in the history
… exception
  • Loading branch information
rokob committed Jun 12, 2017
1 parent 7c98cfe commit a8707d0
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 19 deletions.
1 change: 1 addition & 0 deletions src/browser/rollbar.js
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,7 @@ var defaultOptions = {
reportLevel: __DEFAULT_REPORT_LEVEL__,
uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,
endpoint: __DEFAULT_ENDPOINT__,
verbose: false,
enabled: true
};

Expand Down
17 changes: 16 additions & 1 deletion src/queue.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,13 @@ var _ = require('./utility');
* rateLimiter.shouldSend(item) -> bool
* @param api - An object which conforms to the interface
* api.postItem(payload, function(err, response))
* @param logger - An object used to log verbose messages if desired
* @param options - see Queue.prototype.configure
*/
function Queue(rateLimiter, api, options) {
function Queue(rateLimiter, api, logger, options) {
this.rateLimiter = rateLimiter;
this.api = api;
this.logger = logger;
this.options = options;
this.predicates = [];
this.pendingRequests = [];
Expand Down Expand Up @@ -73,6 +75,7 @@ Queue.prototype.addItem = function(item, callback) {
callback();
return;
}
this._maybeLog(item);
this.pendingRequests.push(item);
try {
this._makeApiRequest(item, function(err, resp) {
Expand Down Expand Up @@ -212,4 +215,16 @@ Queue.prototype._dequeuePendingRequest = function(item) {
}
};

Queue.prototype._maybeLog = function(item) {
if (this.logger && this.options.verbose) {
var message = _.get(item, 'data.body.trace.exception.message');
if (!message) {
message = _.get(item, 'data.body.trace_chain.0.exception.message');
}
if (message) {
this.logger.error(message);
}
}
};

module.exports = Queue;
2 changes: 1 addition & 1 deletion src/rollbar.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ var _ = require('./utility');
function Rollbar(options, api, logger) {
this.options = _.extend(true, {}, options);
this.logger = logger;
this.queue = new Queue(Rollbar.rateLimiter, api, this.options);
this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);
this.notifier = new Notifier(this.queue, this.options);
}

Expand Down
1 change: 1 addition & 0 deletions src/server/rollbar.js
Original file line number Diff line number Diff line change
Expand Up @@ -484,6 +484,7 @@ Rollbar.defaultOptions = {
scrubFields: packageJson.defaults.server.scrubFields,
addRequestData: null,
reportLevel: packageJson.defaults.reportLevel,
verbose: false,
enabled: true
};

Expand Down
96 changes: 79 additions & 17 deletions test/queue.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,34 @@ function TestApiGenerator() {
return TestApi;
}

function TestLoggerGenerator() {
var TestLogger = function() {
this.calls = {
log: [],
error: [],
info: []
};
};
TestLogger.prototype.log = function() {
this.calls.log.push(arguments);
};
TestLogger.prototype.error = function() {
this.calls.error.push(arguments);
};
TestLogger.prototype.info = function() {
this.calls.info.push(arguments);
};
return TestLogger;
};


describe('Queue()', function() {
it('should have all of the expected methods', function(done) {
var rateLimiter = new (TestRateLimiterGenerator())();
var api = new (TestApiGenerator())();
var logger = new (TestLoggerGenerator())();
var options = {};
var queue = new Queue(rateLimiter, api, options);
var queue = new Queue(rateLimiter, api, logger, options);
expect(queue).to.have.property('configure');
expect(queue).to.have.property('addPredicate');
expect(queue).to.have.property('addItem');
Expand All @@ -60,8 +82,9 @@ describe('configure', function() {
it('should update the options', function(done) {
var rateLimiter = new (TestRateLimiterGenerator())();
var api = new (TestApiGenerator())();
var logger = new (TestLoggerGenerator())();
var options = {a: 1, b: 42};
var queue = new Queue(rateLimiter, api, options);
var queue = new Queue(rateLimiter, api, logger, options);

expect(queue.options.a).to.eql(1);
expect(queue.options.b).to.eql(42);
Expand All @@ -82,8 +105,9 @@ describe('addItem', function() {
it('should work with no callback', function(done) {
var rateLimiter = new (TestRateLimiterGenerator())();
var api = new (TestApiGenerator())();
var logger = new (TestLoggerGenerator())();
var options = {};
var queue = new Queue(rateLimiter, api, options);
var queue = new Queue(rateLimiter, api, logger, options);

var item = {mykey: 'myvalue'};
var serverResponse = {success: true};
Expand All @@ -102,8 +126,9 @@ describe('addItem', function() {
it('should work with a garbage callback', function(done) {
var rateLimiter = new (TestRateLimiterGenerator())();
var api = new (TestApiGenerator())();
var logger = new (TestLoggerGenerator())();
var options = {};
var queue = new Queue(rateLimiter, api, options);
var queue = new Queue(rateLimiter, api, logger, options);

var item = {mykey: 'myvalue'};
var serverResponse = {success: true};
Expand All @@ -122,8 +147,9 @@ describe('addItem', function() {
it('should work with no predicates', function(done) {
var rateLimiter = new (TestRateLimiterGenerator())();
var api = new (TestApiGenerator())();
var logger = new (TestLoggerGenerator())();
var options = {};
var queue = new Queue(rateLimiter, api, options);
var queue = new Queue(rateLimiter, api, logger, options);

var item = {mykey: 'myvalue'};
var serverResponse = {success: true};
Expand All @@ -141,11 +167,36 @@ describe('addItem', function() {
done(err);
});
});
it('should call the logger if an error is about to be logged', function(done) {
var rateLimiter = new (TestRateLimiterGenerator())();
var api = new (TestApiGenerator())();
var logger = new (TestLoggerGenerator())();
var options = {verbose: true};
var queue = new Queue(rateLimiter, api, logger, options);

var item = {data: {body: {trace: {exception: {message: 'hello'}}}}};
var serverResponse = {success: true};

rateLimiter.handler = function(i) {
expect(i).to.eql(item);
return {error: null, shouldSend: true, payload: null};
};
api.handler = function(i, cb) {
expect(i).to.eql(item);
cb(null, serverResponse);
};
queue.addItem(item, function(err, resp) {
expect(resp).to.eql(serverResponse);
expect(logger.calls.error[0][0]).to.eql('hello');
done(err);
});
});
it('should stop if a predicate returns false', function(done) {
var rateLimiter = new (TestRateLimiterGenerator())();
var api = new (TestApiGenerator())();
var logger = new (TestLoggerGenerator())();
var options = {};
var queue = new Queue(rateLimiter, api, options);
var queue = new Queue(rateLimiter, api, logger, options);

var item = {mykey: 'myvalue'};
var serverResponse = {success: true};
Expand All @@ -169,8 +220,9 @@ describe('addItem', function() {
it('should stop if a predicate returns an error', function(done) {
var rateLimiter = new (TestRateLimiterGenerator())();
var api = new (TestApiGenerator())();
var logger = new (TestLoggerGenerator())();
var options = {};
var queue = new Queue(rateLimiter, api, options);
var queue = new Queue(rateLimiter, api, logger, options);

var item = {mykey: 'myvalue'};
var serverResponse = {success: true};
Expand All @@ -196,8 +248,9 @@ describe('addItem', function() {
it('should stop if any predicate returns an error', function(done) {
var rateLimiter = new (TestRateLimiterGenerator())();
var api = new (TestApiGenerator())();
var logger = new (TestLoggerGenerator())();
var options = {};
var queue = new Queue(rateLimiter, api, options);
var queue = new Queue(rateLimiter, api, logger, options);

var item = {mykey: 'myvalue'};
var serverResponse = {success: true};
Expand Down Expand Up @@ -227,8 +280,9 @@ describe('addItem', function() {
it('should stop and callback if a wait callback is set', function(done) {
var rateLimiter = new (TestRateLimiterGenerator())();
var api = new (TestApiGenerator())();
var logger = new (TestLoggerGenerator())();
var options = {};
var queue = new Queue(rateLimiter, api, options);
var queue = new Queue(rateLimiter, api, logger, options);

var item = {mykey: 'myvalue'};
var serverResponse = {success: true};
Expand All @@ -254,8 +308,9 @@ describe('addItem', function() {
it('should work if wait is called with a non-function', function(done) {
var rateLimiter = new (TestRateLimiterGenerator())();
var api = new (TestApiGenerator())();
var logger = new (TestLoggerGenerator())();
var options = {};
var queue = new Queue(rateLimiter, api, options);
var queue = new Queue(rateLimiter, api, logger, options);

var item = {mykey: 'myvalue'};
var serverResponse = {success: true};
Expand All @@ -275,8 +330,9 @@ describe('addItem', function() {
it('should work if all predicates return true', function(done) {
var rateLimiter = new (TestRateLimiterGenerator())();
var api = new (TestApiGenerator())();
var logger = new (TestLoggerGenerator())();
var options = {};
var queue = new Queue(rateLimiter, api, options);
var queue = new Queue(rateLimiter, api, logger, options);

var item = {mykey: 'myvalue'};
var serverResponse = {success: true};
Expand Down Expand Up @@ -304,8 +360,9 @@ describe('addItem', function() {
it('should callback if the api throws an exception', function(done) {
var rateLimiter = new (TestRateLimiterGenerator())();
var api = new (TestApiGenerator())();
var logger = new (TestLoggerGenerator())();
var options = {};
var queue = new Queue(rateLimiter, api, options);
var queue = new Queue(rateLimiter, api, logger, options);

var item = {mykey: 'myvalue'};
var exception = 'boom!';
Expand All @@ -331,8 +388,9 @@ describe('addItem', function() {
it('should callback with the api error if not retriable', function(done) {
var rateLimiter = new (TestRateLimiterGenerator())();
var api = new (TestApiGenerator())();
var logger = new (TestLoggerGenerator())();
var options = {retryInterval: 1};
var queue = new Queue(rateLimiter, api, options);
var queue = new Queue(rateLimiter, api, logger, options);

var item = {mykey: 'myvalue'};
var apiError = {code: 'NOPE', message: 'borked'};
Expand All @@ -352,8 +410,9 @@ describe('addItem', function() {
it('should callback with the api error if no retryInterval is set', function(done) {
var rateLimiter = new (TestRateLimiterGenerator())();
var api = new (TestApiGenerator())();
var logger = new (TestLoggerGenerator())();
var options = {};
var queue = new Queue(rateLimiter, api, options);
var queue = new Queue(rateLimiter, api, logger, options);

var item = {mykey: 'myvalue'};
var apiError = {code: 'ENOTFOUND', message: 'No internet connection'};
Expand All @@ -373,8 +432,9 @@ describe('addItem', function() {
it('should retry if we get a retriable error', function(done) {
var rateLimiter = new (TestRateLimiterGenerator())();
var api = new (TestApiGenerator())();
var logger = new (TestLoggerGenerator())();
var options = {retryInterval: 1};
var queue = new Queue(rateLimiter, api, options);
var queue = new Queue(rateLimiter, api, logger, options);

var item = {mykey: 'myvalue'};
var serverResponse = {success: true};
Expand Down Expand Up @@ -405,8 +465,9 @@ describe('addItem', function() {
it('should callback if the rate limiter says not to send and has an error', function(done) {
var rateLimiter = new (TestRateLimiterGenerator())();
var api = new (TestApiGenerator())();
var logger = new (TestLoggerGenerator())();
var options = {};
var queue = new Queue(rateLimiter, api, options);
var queue = new Queue(rateLimiter, api, logger, options);

var item = {mykey: 'myvalue'};
var rateLimitError = 'bork';
Expand All @@ -432,8 +493,9 @@ describe('addItem', function() {
it('should callback if the rate limiter says not to send and has a payload', function(done) {
var rateLimiter = new (TestRateLimiterGenerator())();
var api = new (TestApiGenerator())();
var logger = new (TestLoggerGenerator())();
var options = {};
var queue = new Queue(rateLimiter, api, options);
var queue = new Queue(rateLimiter, api, logger, options);

var item = {mykey: 'myvalue'};
var rateLimitPayload = {something: 'went wrong'};
Expand Down

0 comments on commit a8707d0

Please sign in to comment.