UNPKG

fh-fhc

Version:

A Command Line Interface for FeedHenry

129 lines (118 loc) 2.99 kB
/* globals i18n */ module.exports = errorHandler; var cbCalled = false; var log = require("./log"); var fhc = require("../fhc"); var rm = require("./rm-rf"); var util = require('util'); var constants = require("constants"); var itWorked = false; process.on("exit", function(code) { if (code) { itWorked = false; } if (itWorked) { log(i18n._("Command executed with success.")); } else { if (!cbCalled) { log.error(i18n._("cb() never called!\n ")); } log.win(i18n._("Command executed with error")); } itWorked = false; // ready for next exit }); /** * Ensuring that an error is logged with a request ID if it is present. * @param errorToLog - The error to log. */ function logReqError(errorToLog) { if (errorToLog && errorToLog.requestId) { log.error(errorToLog); log.error(util.format(i18n._("Request ID: "), errorToLog.requestId)); } else { log.error(errorToLog); } } function errorHandler(er) { if (cbCalled) { throw new Error(i18n._("Callback called more than once.")); } cbCalled = true; if (!er) { return exit(0); } if (!(er instanceof Error)) { log.error(er); return exit(1); } if (!er.errno) { // TODO Refactor error handling functionality (check output.js as well) var m = er.message.match(/^(?:Error: )?(E[A-Z]+)/); if (m) { m = m[1]; if (!constants[m] && !fhc[m]) { constants[m] = {}; } er.errno = fhc[m] || constants[m]; } } switch (er.errno) { case constants.ECONNREFUSED: logReqError(er); log.error([i18n._("Connection refused!"), i18n._("Check if your target server is reachable and you have v") ].join("\n")); break; default: logReqError(er); break; } var os = require("os"); log.error(""); log.error(os.type() + " " + os.release(), "System"); log.error(process.argv .map(JSON.stringify).join(" "), "command"); exit(typeof er.errno === "number" ? er.errno : 1); } function exit(code) { var doExit = fhc.config.get("_exit"); log.verbose([code, doExit], "exit"); if (code) { writeLogFile(reallyExit); } else { rm("fhc-debug.log", function() { rm(fhc.tmp, reallyExit); }); } function reallyExit() { itWorked = !code; if (doExit) { process.exit(code || 0); } else { process.emit("exit", code || 0); } } } function writeLogFile(cb) { var fs = require("fs") , fstr = fs.createWriteStream("fhc-debug.log") , sys = require("util"); log.history.forEach(function(m) { var msg; if (typeof m.msg === "string") { msg = m.msg; } else if (msg instanceof Error) { msg = msg.stack || msg.message; } else { msg = sys.inspect(m.msg, 0, 4); } var lvl = log.LEVEL[m.level]; var pref = m.pref ? " " + m.pref : ""; var b = lvl + pref + " "; fstr.write(new Buffer(b + (msg.split(/\n+/).join("\n" + b)) + "\n")); }); fstr.end(); fstr.on("close", cb); }