diff --git a/plugins/c9.error/error_handler.js b/plugins/c9.error/error_handler.js index af2a29db..bb582236 100644 --- a/plugins/c9.error/error_handler.js +++ b/plugins/c9.error/error_handler.js @@ -1,6 +1,7 @@ "use strict"; var errors = require("http-error"); +var EventEmitter = require("events").EventEmitter; plugin.consumes = [ "connect", @@ -72,10 +73,12 @@ var NICE_USER_ERROR_MSG = "Something went wrong. Please retry in a few minutes a function plugin(options, imports, register) { var connect = imports.connect; + var showStackTrace = false; var frontdoor = require("frontdoor"); var statics = imports["connect.static"]; + var emitter = new EventEmitter(); function isDev(mode) { return /^(onlinedev|devel)$/.test(mode); @@ -99,7 +102,6 @@ function plugin(options, imports, register) { return code; } - connect.useError(function(err, req, res, next) { if (typeof err == "string") err = new errors.InternalServerError(err); @@ -112,6 +114,13 @@ function plugin(options, imports, register) { var accept = req.headers.accept || ''; + if (statusCode == 500) { + emitter.emit("internalServerError", { + err: err, + req: req + }); + } + if (/json/.test(accept)) { var error = { code: statusCode, @@ -159,6 +168,8 @@ function plugin(options, imports, register) { }); register(null, { - "connect.error": {} + "connect.error": { + on: emitter.on.bind(emitter) + } }); } diff --git a/plugins/c9.error/raygun.connect.js b/plugins/c9.error/raygun.connect.js index c10315f2..512be225 100644 --- a/plugins/c9.error/raygun.connect.js +++ b/plugins/c9.error/raygun.connect.js @@ -4,7 +4,13 @@ var domain = require("domain"); var url = require("url"); var _ = require("lodash"); -plugin.consumes = ["raygun", "connect", "http", "connect.remote-address", "metrics"]; +plugin.consumes = [ + "raygun", + "connect", + "http", + "connect.remote-address", + "connect.error" +]; plugin.provides = ["raygun.connect"]; module.exports = plugin; @@ -14,8 +20,12 @@ function plugin(options, imports, register) { var errorClient = raygun.errorClient; var warningClient = raygun.warningClient; var connect = imports.connect; + var connectError = imports["connect.error"]; var server = imports.http.getServer(); - var metrics = imports.metrics; + + connectError.on("internalServerError", function(msg) { + sendRequestError(msg.err, msg.req); + }); errorClient.user = warningClient.user = function(req) { return (req && req.user) ? req.user.name : "";