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") }