From d93801214b387012f92eef8f64323a3d95c0fc12 Mon Sep 17 00:00:00 2001 From: Fabian Jakobs Date: Thu, 25 Feb 2016 15:55:48 +0000 Subject: [PATCH 1/2] log all internal server errors to raygun --- plugins/c9.error/error_handler.js | 17 +++++++++++++++-- plugins/c9.error/raygun.connect.js | 18 ++++++++++++++++-- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/plugins/c9.error/error_handler.js b/plugins/c9.error/error_handler.js index af2a29db..5e9b40c0 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("serverError", { + err: err, + req: req + }); + } + if (/json/.test(accept)) { var error = { code: statusCode, @@ -159,6 +168,10 @@ function plugin(options, imports, register) { }); register(null, { - "connect.error": {} + "connect.error": { + onInternalServerError: function(handler) { + emitter.on("serverError", handler); + } + } }); } diff --git a/plugins/c9.error/raygun.connect.js b/plugins/c9.error/raygun.connect.js index c10315f2..67f65baf 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,16 @@ 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; + + var noInternalServerErrors = !!options.noInternalServerErrors; + + if (!noInternalServerErrors) { + connectError.onInternalServerError(function(msg) { + sendRequestError(msg.err, msg.req); + }); + } errorClient.user = warningClient.user = function(req) { return (req && req.user) ? req.user.name : ""; From 1e9afb398c11609009f70aede6406b1b1e7e0f77 Mon Sep 17 00:00:00 2001 From: Fabian Jakobs Date: Fri, 26 Feb 2016 10:10:26 +0000 Subject: [PATCH 2/2] also support oldclient and rename method to "on" --- plugins/c9.error/error_handler.js | 6 ++---- plugins/c9.error/raygun.connect.js | 10 +++------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/plugins/c9.error/error_handler.js b/plugins/c9.error/error_handler.js index 5e9b40c0..bb582236 100644 --- a/plugins/c9.error/error_handler.js +++ b/plugins/c9.error/error_handler.js @@ -115,7 +115,7 @@ function plugin(options, imports, register) { var accept = req.headers.accept || ''; if (statusCode == 500) { - emitter.emit("serverError", { + emitter.emit("internalServerError", { err: err, req: req }); @@ -169,9 +169,7 @@ function plugin(options, imports, register) { register(null, { "connect.error": { - onInternalServerError: function(handler) { - emitter.on("serverError", handler); - } + on: emitter.on.bind(emitter) } }); } diff --git a/plugins/c9.error/raygun.connect.js b/plugins/c9.error/raygun.connect.js index 67f65baf..512be225 100644 --- a/plugins/c9.error/raygun.connect.js +++ b/plugins/c9.error/raygun.connect.js @@ -23,13 +23,9 @@ function plugin(options, imports, register) { var connectError = imports["connect.error"]; var server = imports.http.getServer(); - var noInternalServerErrors = !!options.noInternalServerErrors; - - if (!noInternalServerErrors) { - connectError.onInternalServerError(function(msg) { - sendRequestError(msg.err, msg.req); - }); - } + connectError.on("internalServerError", function(msg) { + sendRequestError(msg.err, msg.req); + }); errorClient.user = warningClient.user = function(req) { return (req && req.user) ? req.user.name : "";