50 lines
1.4 KiB
JavaScript
50 lines
1.4 KiB
JavaScript
/**
|
|
* Meters the number of page errors, and provides traces as offenders for "jsErrors" metric
|
|
*/
|
|
|
|
exports.version = '0.3.a';
|
|
|
|
exports.module = function(phantomas) {
|
|
'use strict';
|
|
|
|
phantomas.setMetric('jsErrors'); // @desc number of JavaScript errors
|
|
|
|
function formatTrace(trace) {
|
|
var ret = [];
|
|
|
|
if(Array.isArray(trace)) {
|
|
trace.forEach(function(entry) {
|
|
ret.push((entry.function ? entry.function + ' ' : '') + (entry.sourceURL || entry.file) + ':' + entry.line);
|
|
});
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
phantomas.on('jserror', function(msg, trace) {
|
|
trace = formatTrace(trace);
|
|
|
|
phantomas.log(msg);
|
|
phantomas.log('Backtrace: ' + trace.join(' / '));
|
|
|
|
phantomas.incrMetric('jsErrors');
|
|
phantomas.addOffender('jsErrors', msg + ' - ' + trace.join(' / '));
|
|
|
|
// Yeah, this is weird, i'm sending the error back to the browser...
|
|
phantomas.evaluate(function(msg, caller, trace) {
|
|
(function(phantomas) {
|
|
|
|
phantomas.pushContext({
|
|
type: 'error',
|
|
callDetails: {
|
|
arguments: [msg]
|
|
},
|
|
caller: caller,
|
|
backtrace: trace
|
|
});
|
|
|
|
})(window.__phantomas);
|
|
}, msg, trace[0], trace.join(' / '));
|
|
});
|
|
};
|