diff --git a/lib/exceptional.js b/lib/exceptional.js index f9046e0..84dd0f1 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,34 @@ 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); + } + + dump = Exceptional.filter_error(dump); + + return dump; + }, + + error_json: function(error, additional_data) { + return JSON.stringify(Exceptional.error_dump(error, additional_data)); + }, + + filter_error:function(error) { + return error; }, send_error: function(doc) {