mirror of
https://git.roussel.pro/telecom-paris/pact.git
synced 2026-02-09 02:20:17 +01:00
76 lines
2.7 KiB
JavaScript
76 lines
2.7 KiB
JavaScript
import conn from '../database.js';
|
|
import fs from "fs";
|
|
import { CronJob } from 'cron';
|
|
|
|
/**
|
|
* Calcules les stats sur une periode donnée et les stocke dans la BDD
|
|
* @param {Number} timePeriod Periode de temps sur laquelle calculer les données. Par exemple 7 si on veut faire les stats des 7 derniers jours
|
|
* @param {String} generalTableName Nom de la table dans laquelle mettre les statistiques générales (tables valides : stats_general_jour stats_general_semaine stats_general_mois stats_general_annee)
|
|
* @param {*} otherTableName Nom de la table dans laquelle mettre les statistiques spécifiques (tables valides : stats_autres_jour stats_autres_autres_autres_mois stats_general_annee)
|
|
* @returns Une Promise qui résout si la requête a fonctionnée
|
|
*/
|
|
const computeStats = async (timePeriod, generalTableName, otherTableName) => {
|
|
return new Promise((resolve, reject) => {
|
|
let sql = fs.readFileSync("stats/update_request.sql").toString();
|
|
sql = sql
|
|
.replace(new RegExp("DAY_COUNT_DELAY",'g'), timePeriod.toString())
|
|
.replace(new RegExp("STATS_GENERAL_TABLE_NAME", 'g'), generalTableName)
|
|
.replace(new RegExp('STATS_AUTRES_TABLE_NAME', 'g'), otherTableName)
|
|
conn.query(sql, (err, res) => {
|
|
if(err) {
|
|
reject(err)
|
|
}else {
|
|
resolve();
|
|
}
|
|
});
|
|
})
|
|
}
|
|
export const startCronJobs = () => {
|
|
//Update les stats journalières tout les jours a minuit
|
|
new CronJob(
|
|
'0 0 * * * * ',
|
|
() => {
|
|
computeStats(1,"stats_general_jour","stats_autres_jour");
|
|
},
|
|
null,
|
|
true
|
|
)
|
|
|
|
//update les stats de la semaine tous les lundis a minuit
|
|
new CronJob(
|
|
'0 0 * * 1 * ',
|
|
() => {
|
|
computeStats(7,"stats_general_semaine","stats_autres_jour");
|
|
},
|
|
null,
|
|
true
|
|
)
|
|
|
|
//update les stats mensuelles les 1er du mois a minuit
|
|
new CronJob(
|
|
'0 0 1 * * * ',
|
|
() => {
|
|
computeStats(30, "stats_general_mois","stats_autres_mois");
|
|
},
|
|
null,
|
|
true
|
|
)
|
|
|
|
//update les stats annuelles les premire de l'an a minuit
|
|
new CronJob(
|
|
'0 0 1 1 * * ',
|
|
() => {
|
|
computeStats(365, "stats_general_annee","stats_autres_annee");
|
|
},
|
|
null,
|
|
true
|
|
)
|
|
console.log("All cronjobs initiated")
|
|
}
|
|
|
|
export function manualUpdateStats() {
|
|
computeStats(1, "stats_general_jour", "stats_autres_jour");
|
|
computeStats(7, "stats_general_semaine", "stats_autres_jour");
|
|
computeStats(30, "stats_general_mois", "stats_autres_mois");
|
|
computeStats(365, "stats_general_annee", "stats_autres_annee");
|
|
} |