45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
/**
|
|
* For all logging that has notify set to true well send an email to the system admins, if we have a discord webhook set well send it there as well
|
|
*/
|
|
|
|
import { eq } from "drizzle-orm";
|
|
import { db } from "../db/db.controller.js";
|
|
import { user } from "../db/schema/auth.schema.js";
|
|
import { sendEmail } from "../utils/sendEmail.utils.js";
|
|
|
|
type NotifyData = {
|
|
module: string;
|
|
submodule: string;
|
|
hostname: string;
|
|
msg: string;
|
|
stack: unknown[];
|
|
};
|
|
|
|
export const notifySystemIssue = async (data: NotifyData) => {
|
|
// build the email out
|
|
|
|
const formattedError = Array.isArray(data.stack)
|
|
? data.stack.map((e: any) => e.error || e)
|
|
: data.stack;
|
|
|
|
const sysAdmin = await db
|
|
.select()
|
|
.from(user)
|
|
.where(eq(user.role, "systemAdmin"));
|
|
|
|
await sendEmail({
|
|
email: sysAdmin.map((r) => r.email).join("; ") ?? "cowchmonkey@gmail.com", // change to pull in system admin emails
|
|
subject: `${data.hostname} has encountered a critical issue.`,
|
|
template: "serverCritialIssue",
|
|
context: {
|
|
plant: data.hostname,
|
|
module: data.module,
|
|
subModule: data.submodule,
|
|
message: data.msg,
|
|
error: JSON.stringify(formattedError, null, 2),
|
|
},
|
|
});
|
|
|
|
// TODO: add discord
|
|
};
|