actionhero
Version:
The reusable, scalable, and quick node.js API server for stateless and stateful applications
84 lines (83 loc) • 3.63 kB
JavaScript
;
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;