|
|
|
|
@@ -78,67 +78,78 @@ CronSchema.statics.executeQueryTable = function (idapp, params, user) {
|
|
|
|
|
CronSchema.statics.startJobCron = async function (idapp) {
|
|
|
|
|
// Esegui un loop su tutti i cron job che trovi per l'idapp specificato
|
|
|
|
|
const Cron = this;
|
|
|
|
|
const cronJobs = await Cron.find({ idapp, active: true });
|
|
|
|
|
try {
|
|
|
|
|
const cronJobs = await Cron.find({ idapp, active: true });
|
|
|
|
|
|
|
|
|
|
// console.log('Check startJobCron...', idapp);
|
|
|
|
|
// console.log('Check startJobCron...', idapp);
|
|
|
|
|
|
|
|
|
|
const mycronMod = new CronMod();
|
|
|
|
|
const mycronMod = new CronMod();
|
|
|
|
|
|
|
|
|
|
const currentDate = new Date();
|
|
|
|
|
const currentDate = new Date();
|
|
|
|
|
|
|
|
|
|
for (const mycron of cronJobs) {
|
|
|
|
|
const jobTime = new Date();
|
|
|
|
|
const [hours, minutes] = mycron.startTime.split(':');
|
|
|
|
|
jobTime.setHours(hours, minutes, 0, 0);
|
|
|
|
|
for (const mycron of cronJobs) {
|
|
|
|
|
const jobTime = new Date();
|
|
|
|
|
const [hours, minutes] = mycron.startTime.split(':');
|
|
|
|
|
jobTime.setHours(hours, minutes, 0, 0);
|
|
|
|
|
|
|
|
|
|
// Check if jobTime has passed and if 'everyXMinutes' have elapsed since last execution
|
|
|
|
|
if (!mycron.quanteVolteEseguito) mycron.quanteVolteEseguito = 0;
|
|
|
|
|
const timesPerDay = mycron.quanteVolteEseguiAlGG || 1;
|
|
|
|
|
const startDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());
|
|
|
|
|
const lastJobDate = new Date(
|
|
|
|
|
mycron.lastJobStarted.getFullYear(),
|
|
|
|
|
mycron.lastJobStarted.getMonth(),
|
|
|
|
|
mycron.lastJobStarted.getDate()
|
|
|
|
|
);
|
|
|
|
|
const tempooltre = currentDate - mycron.lastJobStarted >= mycron.everyXMinutes * 60 * 1000;
|
|
|
|
|
if (
|
|
|
|
|
((mycron.quanteVolteEseguito < timesPerDay && startDate.getTime() === lastJobDate.getTime()) ||
|
|
|
|
|
startDate.getTime() !== lastJobDate.getTime()) &&
|
|
|
|
|
(!mycron.lastJobStarted || tempooltre)
|
|
|
|
|
) {
|
|
|
|
|
if (currentDate >= jobTime) {
|
|
|
|
|
// Execute the function at the scheduled time
|
|
|
|
|
console.log(`Sto eseguendo il Cron Job: ${mycron.nomeFunzioneDbOp} alle ${currentDate.toLocaleTimeString()}`);
|
|
|
|
|
const status = shared_consts.STATUS_JOB.START;
|
|
|
|
|
if (startDate.getTime() !== lastJobDate.getTime()) {
|
|
|
|
|
mycron.quanteVolteEseguito = 0;
|
|
|
|
|
}
|
|
|
|
|
const quanteVolteEseguito = mycron.quanteVolteEseguito + 1;
|
|
|
|
|
await Cron.findOneAndUpdate(
|
|
|
|
|
{ _id: mycron._id },
|
|
|
|
|
{ $set: { lastJobStarted: currentDate, status, quanteVolteEseguito } },
|
|
|
|
|
{ new: true }
|
|
|
|
|
// Check if jobTime has passed and if 'everyXMinutes' have elapsed since last execution
|
|
|
|
|
if (!mycron.quanteVolteEseguito) mycron.quanteVolteEseguito = 0;
|
|
|
|
|
const timesPerDay = mycron.quanteVolteEseguiAlGG || 1;
|
|
|
|
|
const startDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());
|
|
|
|
|
let lastJobDate = null;
|
|
|
|
|
if (mycron.lastJobStarted) {
|
|
|
|
|
lastJobDate = new Date(
|
|
|
|
|
mycron.lastJobStarted.getFullYear(),
|
|
|
|
|
mycron.lastJobStarted.getMonth(),
|
|
|
|
|
mycron.lastJobStarted.getDate()
|
|
|
|
|
);
|
|
|
|
|
mycronMod
|
|
|
|
|
.eseguiDbOp(idapp, { dbop: mycron.nomeFunzioneDbOp }, null, null)
|
|
|
|
|
.then(async (ris) => {
|
|
|
|
|
console.log(`${currentDate.toLocaleTimeString()} LOG JOB: ${ris.mystr}`);
|
|
|
|
|
const myid = mycron._id;
|
|
|
|
|
const status = shared_consts.STATUS_JOB.FINISH;
|
|
|
|
|
const risupdate = await Cron.findOneAndUpdate(
|
|
|
|
|
{ _id: myid },
|
|
|
|
|
{ $set: { lastJobEnd: new Date(), status } },
|
|
|
|
|
{ new: true }
|
|
|
|
|
);
|
|
|
|
|
})
|
|
|
|
|
.catch(async (err) => {
|
|
|
|
|
const log = "Errore durante l'esecuzione del job: " + err.message || err;
|
|
|
|
|
const status = shared_consts.STATUS_JOB.ERR;
|
|
|
|
|
await Cron.findOneAndUpdate({ _id: mycron._id }, { $set: { log, status } }, { new: true });
|
|
|
|
|
console.error(log);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let tempooltre = currentDate - mycron.lastJobStarted >= mycron.everyXMinutes * 60 * 1000;
|
|
|
|
|
const canExecute =
|
|
|
|
|
(!mycron.lastJobStarted || // se non c'è un ultimo eseguito, esegui
|
|
|
|
|
tempooltre) && // se è passato il tempo di attesa, esegui
|
|
|
|
|
(mycron.lastJobStarted && (mycron.quanteVolteEseguito < timesPerDay) || // se non ho ancora raggiunto il numero di esecuzioni al giorno
|
|
|
|
|
(!lastJobDate || (startDate.getTime() !== lastJobDate.getTime()))); // se non è lo stesso giorno, esegui
|
|
|
|
|
if (canExecute) {
|
|
|
|
|
if (currentDate >= jobTime) {
|
|
|
|
|
// Execute the function at the scheduled time
|
|
|
|
|
console.log(`Sto eseguendo il Cron Job: ${mycron.nomeFunzioneDbOp} alle ${currentDate.toLocaleTimeString()}`);
|
|
|
|
|
const status = shared_consts.STATUS_JOB.START;
|
|
|
|
|
if (!lastJobDate || startDate.getTime() !== lastJobDate.getTime()) {
|
|
|
|
|
mycron.quanteVolteEseguito = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const quanteVolteEseguito = mycron.quanteVolteEseguito + 1;
|
|
|
|
|
await Cron.findOneAndUpdate(
|
|
|
|
|
{ _id: mycron._id },
|
|
|
|
|
{ $set: { lastJobStarted: currentDate, status, quanteVolteEseguito } },
|
|
|
|
|
{ new: true }
|
|
|
|
|
);
|
|
|
|
|
mycronMod
|
|
|
|
|
.eseguiDbOp(idapp, { dbop: mycron.nomeFunzioneDbOp }, null, null)
|
|
|
|
|
.then(async (ris) => {
|
|
|
|
|
console.log(`${currentDate.toLocaleTimeString()} LOG JOB: ${ris.mystr}`);
|
|
|
|
|
const myid = mycron._id;
|
|
|
|
|
const status = shared_consts.STATUS_JOB.FINISH;
|
|
|
|
|
const risupdate = await Cron.findOneAndUpdate(
|
|
|
|
|
{ _id: myid },
|
|
|
|
|
{ $set: { lastJobEnd: new Date(), status } },
|
|
|
|
|
{ new: true }
|
|
|
|
|
);
|
|
|
|
|
})
|
|
|
|
|
.catch(async (err) => {
|
|
|
|
|
const log = "Errore durante l'esecuzione del job: " + err.message || err;
|
|
|
|
|
const status = shared_consts.STATUS_JOB.ERR;
|
|
|
|
|
await Cron.findOneAndUpdate({ _id: mycron._id }, { $set: { log, status } }, { new: true });
|
|
|
|
|
console.error(log);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.error('Error startJobCron:', e);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|