From 2307703f9765c59b29037d95fc26b287aeda238d Mon Sep 17 00:00:00 2001 From: Sylvain Zimmer Date: Sat, 4 Feb 2012 16:04:00 +0100 Subject: [PATCH 1/2] Send additional data to Exceptional, easy handler for Express requests --- lib/exceptional.js | 45 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/lib/exceptional.js b/lib/exceptional.js index f9046e0..3c9597b 100644 --- a/lib/exceptional.js +++ b/lib/exceptional.js @@ -12,17 +12,30 @@ var Exceptional = { Host: "api.getexceptional.com", Port: 80, - handle: function(error) { - if (Exceptional.API_KEY == undefined) { + handle: function(error, additional_data) { + if (Exceptional.API_KEY === undefined) { throw "API_KEY must be set"; } - var doc = Exceptional.error_json(error); + var doc = Exceptional.error_json(error, additional_data); Exceptional.send_error(doc); }, - error_json: function(error) { - return JSON.stringify({ + handle_express:function(error, req) { + Exceptional.handle(error,{ + "request":{ + "remote_ip":req.socket.remoteAddress, + "url":req.url, + "headers":req.headers, + "session":req.session, + "request_method":req.method, + "parameters":req.params + } + }); + }, + + error_dump: function(error, additional_data) { + var dump = { "application_environment": { "application_root_directory": process.cwd(), "language": "node-javascript", @@ -53,7 +66,27 @@ var Exceptional = { "version": Exceptional.VERSION, "protocol_version": Exceptional.PROTOCOL_VERSION } - }); + }; + + var deepExtend = function(obj,data) { + for (var k in data) { + if (data.hasOwnProperty(k)) { + if (typeof obj[k]=="object" && typeof data[k]=="object") { + deepExtend(obj[k],data[k]); + } else { + obj[k]=data[k]; + } + } + } + }; + if (additional_data) { + deepExtend(dump,additional_data); + } + return dump; + }, + + error_json: function(error, additional_data) { + return JSON.stringify(Exceptional.error_dump(error, additional_data)); }, send_error: function(doc) { From b66913d096193fa0af8714ea066d04ee008108fc Mon Sep 17 00:00:00 2001 From: Sylvain Zimmer Date: Sat, 4 Feb 2012 16:10:52 +0100 Subject: [PATCH 2/2] Add a filter function to hide sensitive ENV for instance --- lib/exceptional.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/exceptional.js b/lib/exceptional.js index 3c9597b..84dd0f1 100644 --- a/lib/exceptional.js +++ b/lib/exceptional.js @@ -82,6 +82,9 @@ var Exceptional = { if (additional_data) { deepExtend(dump,additional_data); } + + dump = Exceptional.filter_error(dump); + return dump; }, @@ -89,6 +92,10 @@ var Exceptional = { return JSON.stringify(Exceptional.error_dump(error, additional_data)); }, + filter_error:function(error) { + return error; + }, + send_error: function(doc) { gzip(doc, 1, function(err, data) {