c9-core/plugins/c9.ide.errorhandler/raygun_error_handler.js

93 wiersze
2.8 KiB
JavaScript

/**
* This error handler is for client side error logging
* It also automatically catches window.onerror and sends them to raygun.io
* You can also import it and call .log to manually send an error
*
* @extends Plugin
* @singleton
*/
define(function(require, exports, module) {
"use strict";
main.consumes = [
"Plugin", "info", "metrics"
];
main.provides = ["error_handler"];
return main;
function main(options, imports, register) {
var Plugin = imports.Plugin;
var info = imports.info;
var metrics = imports.metrics;
/***** Initialization *****/
var Raygun = require("./raygun").Raygun;
var apiKey = options.apiKey;
var version = options.version;
var revision = options.revision;
var plugin = new Plugin("Ajax.org", main.consumes);
var loaded = false;
function load() {
if (loaded) return false;
loaded = true;
// without apiKey raygun throws an error
if (!apiKey) return;
var user = info.getUser();
var workspace = info.getWorkspace();
Raygun.init(apiKey).attach().withCustomData(function(ex) {
return {
user: {
id: user.id,
name: user.name,
email: user.email
},
workspace: {
id: workspace.id,
name: workspace.name,
contents: workspace.contents
},
revision: revision,
data: ex && ex.data
};
});
Raygun.setUser(info.getUser().name);
Raygun.setVersion(version + ".0");
}
function log(exception, customData, tags) {
metrics.increment("errorhandler.log");
if (typeof exception === "string")
exception = new Error(exception);
if (!exception)
exception = new Error("Unspecified error");
console.error(exception);
if (customData)
console.log(customData);
if (!exception.stack)
exception.stack = new Error().stack;
Raygun.send(exception, customData, tags);
}
/***** Lifecycle *****/
plugin.on("load", function() {
load();
});
/***** Register and define API *****/
plugin.freezePublicAPI({
/** @deprecated Use log() instead. */
reportError: log,
log: log
});
register(null, { "error_handler": plugin });
}
});