96 lines
3.6 KiB
TypeScript
96 lines
3.6 KiB
TypeScript
// SELECT count(*) FROM V_EtikettenGedruckt where AnzahlGedruckterKopien > 2 and CONVERT(varchar(5), Add_Date,108) not like CONVERT(varchar(5), Upd_Date,108) and Upd_Date > DATEADD(SECOND, -30,getdate()) and VpkVorschriftBez not like '%$%'
|
|
|
|
import { eq, sql } from "drizzle-orm";
|
|
import { db } from "../../../../../database/dbclient.js";
|
|
import { notifications } from "../../../../../database/schema/notifications.js";
|
|
import { tryCatch } from "../../../../globalUtils/tryCatch.js";
|
|
import { createLog } from "../../../logger/logger.js";
|
|
import { sendEmail } from "../sendMail.js";
|
|
import { query } from "../../../sqlServer/prodSqlServer.js";
|
|
import { downTimeCheck } from "../../../sqlServer/querys/notifications/downtimecheck.js";
|
|
|
|
export interface DownTime {
|
|
downTimeId?: number;
|
|
machineAlias?: string;
|
|
}
|
|
export default async function reprintLabelMonitor(notifyData: any) {
|
|
// we will over ride this with users that want to sub to this
|
|
// a new table will be called subalerts and link to the do a kinda linkn where the user wants it then it dose subId: 1, userID: x, notificationId: y. then in here we look up the userid to get the email :D
|
|
// this could then leave the emails in the notificaion blank and let users sub to it.
|
|
if (notifyData.emails === "") {
|
|
createLog(
|
|
"error",
|
|
"notify",
|
|
"notify",
|
|
`There are no emails set for ${notifyData.name}`
|
|
);
|
|
|
|
return;
|
|
}
|
|
|
|
// console.log(data.secondarySetting[0].duration);
|
|
let dQuery = downTimeCheck
|
|
.replace("[dtDuration]", notifyData.notifiySettings?.duration)
|
|
.replace("[daysInPast]", notifyData.notifiySettings?.daysInPast);
|
|
//console.log(query);
|
|
let downTime: any = []; //DownTime[];
|
|
try {
|
|
const res: any = await query(dQuery, "downTimeCheck");
|
|
//console.log(labels.length);
|
|
downTime = res.data;
|
|
if (
|
|
downTime.length > 0
|
|
// && downTime[0]?.downTimeId > notifyData.notifiySettings.prodID
|
|
) {
|
|
//send the email :D
|
|
const emailSetup = {
|
|
email: notifyData.emails,
|
|
subject: `Alert! Downtime recorded greater than ${
|
|
notifyData.notifiySettings?.duration
|
|
}min ${
|
|
downTime.length === 1
|
|
? `on ${downTime[0].machineAlias}`
|
|
: ""
|
|
}`,
|
|
template: "downTimeCheck",
|
|
context: {
|
|
items: downTime,
|
|
secondarySetting: notifyData.notifiySettings,
|
|
},
|
|
};
|
|
|
|
const sentEmail = await sendEmail(emailSetup);
|
|
|
|
if (!sentEmail.success) {
|
|
createLog(
|
|
"error",
|
|
"notify",
|
|
"notify",
|
|
"Failed to send email, will try again on next interval"
|
|
);
|
|
return;
|
|
}
|
|
|
|
const { data, error } = await tryCatch(
|
|
db
|
|
.update(notifications)
|
|
.set({
|
|
lastRan: sql`NOW()`,
|
|
notifiySettings: {
|
|
...notifyData.notifiySettings,
|
|
prodID: downTime[0].downTimeId,
|
|
},
|
|
})
|
|
.where(eq(notifications.name, notifyData.name))
|
|
);
|
|
}
|
|
} catch (err) {
|
|
createLog(
|
|
"error",
|
|
"notify",
|
|
"notify",
|
|
`Error from running the downtimeCheck query: ${err}`
|
|
);
|
|
}
|
|
}
|