Skip to content

Commit

Permalink
Merge pull request #186 from lloydbenson/master
Browse files Browse the repository at this point in the history
Fix payload logging
  • Loading branch information
geek committed Sep 5, 2014
2 parents d88c685 + 5fb7248 commit 0b0204a
Show file tree
Hide file tree
Showing 3 changed files with 117 additions and 46 deletions.
20 changes: 15 additions & 5 deletions lib/monitor.js
Original file line number Diff line number Diff line change
Expand Up @@ -512,11 +512,11 @@ internals.Monitor.prototype._request = function () {
}

if (self.settings.logRequestPayload) {
event.requestPayload = req.payload;
event.requestPayload = request.payload;
}

if (self.settings.logResponsePayload) {
event.responsePayload = res.payload;
event.responsePayload = request.response.source;
}

if (self.settings.logPid) {
Expand Down Expand Up @@ -587,18 +587,28 @@ internals.Monitor.prototype._display = function (events) {
});
}
else if (event.event === 'request') {

var query = event.query ? JSON.stringify(event.query) : '';
var responsePayload = ' ';
var statusCode = '';

if (event.responsePayload) {
try {
responsePayload = ' response payload: ' + JSON.stringify(event.responsePayload);
} catch (err) {
responsePayload = ' response payload: ' + SafeStringify(event.responsePayload);
}
}

var statusCode = event.statusCode;
if (event.statusCode) {
var color = (event.statusCode >= 500 ? 31 : (event.statusCode >= 400 ? 33 : (event.statusCode >= 300 ? 36 : 32)));
statusCode = '\x1b[' + color + 'm' + event.statusCode + '\x1b[0m';
statusCode = ' \x1b[' + color + 'm' + event.statusCode + '\x1b[0m';
}

internals.printEvent({
timestamp: event.timestamp,
tags: ['request'],
data: event.instance + ': ' + event.method + ' ' + event.path + ' ' + query + (statusCode ? ' ' + statusCode : '') + ' (' + event.responseTime + 'ms)'
data: event.instance + ': ' + event.method + ' ' + event.path + ' ' + query + statusCode + ' (' + event.responseTime + 'ms)' + responsePayload
});
}
else if (event.event === 'error') {
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
"hoek": "2.x.x",
"joi": "4.x.x",
"json-stringify-safe": "5.0.x",
"wreck": "4.x.x",
"wreck": "5.x.x",
"async": "0.9.x",
"yargs": "1.3.x",
"json-stringify-safe": "5.0.x"
Expand Down
141 changes: 101 additions & 40 deletions test/monitor.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ var Monitor = require('../lib/monitor');
var Dgram = require('dgram');
var Net = require('net');
var Async = require('async');
var SafeStringify = require('json-stringify-safe');
var Wreck = require('wreck');


// Declare internals
Expand Down Expand Up @@ -337,6 +339,105 @@ describe('Monitor', function () {
});
});

it('displays payload events correctly', function (done) {

var options = {
subscribers: {
'console': { events: ['request'] }
},
logRequestPayload: true,
logResponsePayload: true
};

var server = new Hapi.Server('127.0.0.1', 0);
server.route({
method: 'POST',
path: '/test',
handler: function (request, reply) {
server.stop({timeout: 1});
reply({bar: 'foo'});
}
});

var plugin = {
register: require('../lib/index').register,
options: options
}

server.pack.register(plugin, function (err) {

if (err) {
console.log('did not register plugin: ' + err);
}
});

server.start(function () {

// trap console output so it doesnt show up in stdout
var trapConsole = console.log;
console.log = function(string) {

expect(string).to.contain('response payload: {"bar":"foo"}');
// reset console.log
console.log = trapConsole;
done();
};
var payload = JSON.stringify({ payload: { foo: "bar" } });
Wreck.request('POST', server.info.uri + '/test', payload);
});
});

it('displays payload events correctly circular', function (done) {

var options = {
subscribers: {
'console': { events: ['request'] }
},
logRequestPayload: true,
logResponsePayload: true
};

var server = new Hapi.Server('127.0.0.1', 0);
server.route({
method: 'POST',
path: '/test',
handler: function (request, reply) {

reply(request.raw.req);
}
});

var plugin = {
register: require('../lib/index').register,
options: options
}

server.pack.register(plugin, function (err) {

if (err) {
console.log('did not register plugin: ' + err);
}
});

server.start(function () {

// trap console output so it doesnt show up in stdout
var trapConsole = console.log;
console.log = function(string) {

//console.error(string);
expect(string).to.contain('response payload: ');
expect(string).to.contain('[Circular ~]');
// reset console.log
console.log = trapConsole;
done();
};
var payload = JSON.stringify({ payload: { foo: "bar" } });
Wreck.request('POST', server.info.uri + '/test', payload);
});
});


it('display events for objects that can not be stringified', function (done) {
var options = {
subscribers: {
Expand Down Expand Up @@ -1762,46 +1863,6 @@ describe('Monitor', function () {
});
});

it('logs request payload when option is set', function (done) {

var options = {
subscribers: {},
logRequestPayload: true,
logResponsePayload: true
};

makePack(function (pack, server) {

var request = {
raw: {
req: {
headers: {
'user-agent': 'test'
},
payload: {
'foo': 'bar'
}
},
res: {
payload: {
'bar': 'foo'
}
}
},
info: {},
server: server,
getLog: function () {}
};

var monitor = new Monitor(pack, options);

var event = monitor._request()(request);
expect(event.requestPayload.foo).to.equal('bar');
expect(event.responsePayload.bar).to.equal('foo');
done();
});
});

it('logs pid for request when option is set', function (done) {

var options = {
Expand Down

0 comments on commit 0b0204a

Please sign in to comment.