UNPKG

actionhero

Version:

The reusable, scalable, and quick node.js API server for stateless and stateful applications

84 lines (83 loc) 3.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Exceptions = void 0; const index_1 = require("../index"); /** * Handlers for when things go wrong. */ class Exceptions extends index_1.Initializer { constructor() { super(); this.name = "exceptions"; this.loadPriority = 130; } relevantDetails() { return ["action", "remoteIP", "type", "params", "room"]; } async initialize(config) { index_1.api.exceptionHandlers = { reporters: [], report: (error, type, name, objects, severity) => { if (!severity) { severity = "error"; } for (const i in index_1.api.exceptionHandlers.reporters) { index_1.api.exceptionHandlers.reporters[i](error, type, name, objects, severity); } }, }; index_1.api.exceptionHandlers.loader = (fullFilePath, error) => { const name = "loader:" + fullFilePath; index_1.api.exceptionHandlers.report(error, "loader", name, { fullFilePath: fullFilePath }, "alert"); }; index_1.api.exceptionHandlers.action = (error, { to, action, params, duration, response }) => { index_1.api.exceptionHandlers.report(error, "action", `action: ${action}`, { to, action, params, duration, error, response }, "alert"); }; index_1.api.exceptionHandlers.task = (error, queue, task, workerId) => { let simpleName; try { simpleName = task.class; } catch (e) { simpleName = error.message; } const name = "task:" + simpleName; index_1.api.exceptionHandlers.report(error, "task", name, { task: task, queue: queue, workerId: workerId }, config.tasks.workerLogging.failure); }; const consoleReporter = (error, type, name, objects, severity) => { var _a; let message = ""; const data = {}; if (type === "action") { // no need to log anything, it was handled already by the actionProcessor } else if (type === "loader") { message = `Failed to load ${objects.fullFilePath}`; } else if (type === "task") { message = `error from task`; data["name"] = name; data["queue"] = objects.queue; data["worker"] = objects.workerId; data["arguments"] = ((_a = objects === null || objects === void 0 ? void 0 : objects.task) === null || _a === void 0 ? void 0 : _a.args) ? JSON.stringify(objects.task.args[0]) : undefined; } else { message = `Error: ${(error === null || error === void 0 ? void 0 : error.message) || error.toString()}`; Object.getOwnPropertyNames(error) .filter((prop) => prop !== "message") .sort((a, b) => (a === "stack" || b === "stack" ? -1 : 1)) .forEach((prop) => (data[prop] = error[prop])); data["type"] = type; data["name"] = name; data["data"] = objects; } data["stacktrace"] = error === null || error === void 0 ? void 0 : error.stack; if (message !== "") index_1.log(message, severity, data); }; index_1.api.exceptionHandlers.reporters.push(consoleReporter); } } exports.Exceptions = Exceptions;