mirror of
https://git.roussel.pro/telecom-paris/pact.git
synced 2026-02-09 10:30:17 +01:00
ajout de cronjobs pour update les stats auto
This commit is contained in:
@@ -3,6 +3,7 @@ import express from 'express';
|
|||||||
import bodyParser from 'body-parser';
|
import bodyParser from 'body-parser';
|
||||||
import { addReviewFromRequest } from './borne/handler.js';
|
import { addReviewFromRequest } from './borne/handler.js';
|
||||||
import { addSocialReviewFromRequest } from './reseaux_sociaux/handler.js';
|
import { addSocialReviewFromRequest } from './reseaux_sociaux/handler.js';
|
||||||
|
import { startCronJobs } from './stats/update_stats.js';
|
||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
|
|
||||||
@@ -11,6 +12,8 @@ dotenv.config()
|
|||||||
app.post('/add_review', (req,res) => addReviewFromRequest(req,res));
|
app.post('/add_review', (req,res) => addReviewFromRequest(req,res));
|
||||||
app.post('/add_social_review', (req,res) => addSocialReviewFromRequest(req,res));
|
app.post('/add_social_review', (req,res) => addSocialReviewFromRequest(req,res));
|
||||||
|
|
||||||
|
startCronJobs();
|
||||||
|
|
||||||
app.listen(process.env.PORT, () => {
|
app.listen(process.env.PORT, () => {
|
||||||
console.log("Server démaré sur le port " + process.env.PORT)
|
console.log("Server démaré sur le port " + process.env.PORT)
|
||||||
})
|
})
|
||||||
|
|||||||
30
code/server/package-lock.json
generated
30
code/server/package-lock.json
generated
@@ -10,6 +10,7 @@
|
|||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"body-parser": "^1.20.1",
|
"body-parser": "^1.20.1",
|
||||||
|
"cron": "^2.1.0",
|
||||||
"dotenv": "^16.0.3",
|
"dotenv": "^16.0.3",
|
||||||
"express": "^4.18.2",
|
"express": "^4.18.2",
|
||||||
"mysql2": "^2.3.3"
|
"mysql2": "^2.3.3"
|
||||||
@@ -107,6 +108,14 @@
|
|||||||
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
||||||
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
|
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
|
||||||
},
|
},
|
||||||
|
"node_modules/cron": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cron/-/cron-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-Hq7u3P8y7UWYvsZbSKHHJDVG0VO9O7tp2qljxzTScelcTODBfCme8AIhnZsFwmQ9NchZ3hr2uNr+s3DSms7q6w==",
|
||||||
|
"dependencies": {
|
||||||
|
"luxon": "^1.23.x"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/debug": {
|
"node_modules/debug": {
|
||||||
"version": "2.6.9",
|
"version": "2.6.9",
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||||
@@ -356,6 +365,14 @@
|
|||||||
"node": ">=10"
|
"node": ">=10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/luxon": {
|
||||||
|
"version": "1.28.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/luxon/-/luxon-1.28.0.tgz",
|
||||||
|
"integrity": "sha512-TfTiyvZhwBYM/7QdAVDh+7dBTBA29v4ik0Ce9zda3Mnf8on1S5KJI8P2jKFZ8+5C0jhmr0KwJEO/Wdpm0VeWJQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/media-typer": {
|
"node_modules/media-typer": {
|
||||||
"version": "0.3.0",
|
"version": "0.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
||||||
@@ -785,6 +802,14 @@
|
|||||||
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
||||||
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
|
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
|
||||||
},
|
},
|
||||||
|
"cron": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cron/-/cron-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-Hq7u3P8y7UWYvsZbSKHHJDVG0VO9O7tp2qljxzTScelcTODBfCme8AIhnZsFwmQ9NchZ3hr2uNr+s3DSms7q6w==",
|
||||||
|
"requires": {
|
||||||
|
"luxon": "^1.23.x"
|
||||||
|
}
|
||||||
|
},
|
||||||
"debug": {
|
"debug": {
|
||||||
"version": "2.6.9",
|
"version": "2.6.9",
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||||
@@ -979,6 +1004,11 @@
|
|||||||
"yallist": "^4.0.0"
|
"yallist": "^4.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"luxon": {
|
||||||
|
"version": "1.28.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/luxon/-/luxon-1.28.0.tgz",
|
||||||
|
"integrity": "sha512-TfTiyvZhwBYM/7QdAVDh+7dBTBA29v4ik0Ce9zda3Mnf8on1S5KJI8P2jKFZ8+5C0jhmr0KwJEO/Wdpm0VeWJQ=="
|
||||||
|
},
|
||||||
"media-typer": {
|
"media-typer": {
|
||||||
"version": "0.3.0",
|
"version": "0.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"body-parser": "^1.20.1",
|
"body-parser": "^1.20.1",
|
||||||
|
"cron": "^2.1.0",
|
||||||
"dotenv": "^16.0.3",
|
"dotenv": "^16.0.3",
|
||||||
"express": "^4.18.2",
|
"express": "^4.18.2",
|
||||||
"mysql2": "^2.3.3"
|
"mysql2": "^2.3.3"
|
||||||
|
|||||||
@@ -1,9 +1,17 @@
|
|||||||
import conn from '../database.js';
|
import conn from '../database.js';
|
||||||
import fs from "fs";
|
import fs from "fs";
|
||||||
|
import { CronJob } from 'cron';
|
||||||
|
|
||||||
export const computeStats = async (timePeriod, generalTableName, otherTableName) => {
|
/**
|
||||||
|
* 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) => {
|
return new Promise((resolve, reject) => {
|
||||||
let sql = fs.readFileSync("stats/update_stats.sql").toString();
|
let sql = fs.readFileSync("stats/update_request.sql").toString();
|
||||||
sql = sql
|
sql = sql
|
||||||
.replace(new RegExp("DAY_COUNT_DELAY",'g'), timePeriod.toString())
|
.replace(new RegExp("DAY_COUNT_DELAY",'g'), timePeriod.toString())
|
||||||
.replace(new RegExp("STATS_GENERAL_TABLE_NAME", 'g'), generalTableName)
|
.replace(new RegExp("STATS_GENERAL_TABLE_NAME", 'g'), generalTableName)
|
||||||
@@ -12,10 +20,50 @@ export const computeStats = async (timePeriod, generalTableName, otherTableName)
|
|||||||
if(err) {
|
if(err) {
|
||||||
reject(err)
|
reject(err)
|
||||||
}else {
|
}else {
|
||||||
resolve(res.insertId);
|
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
|
||||||
|
)
|
||||||
|
|
||||||
// computeStats(7,"stats_general_semaine","stats_autres_semaine").then(() => {console.log("OK")});
|
//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")
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user