Début test interface borne

This commit is contained in:
2023-01-04 22:07:32 +01:00
parent 66d1aaf027
commit b31ee7c0b9
39 changed files with 3354 additions and 3260 deletions

View File

@@ -1,50 +1,50 @@
/*
Dans cette requête il faut replacer DAY_COUNT_DELAY par le nombre de jours sur lequel calculer les stats, STATS_GENERAL_TABLE_NAME par la table dans laquelle mettre les stats globales (par exemple stats_general_jour si les valeurs sont calculées sur 1 jour) et pareil pour STATS_AUTRES_TABLE_NAME
C'est un peu bizzare comme technique mais j'ai pas trouvé de meilleur solution
*/
SET @date_limite = DATE_ADD(NOW(), INTERVAL -DAY_COUNT_DELAY DAY);
/*
On récupère les notes notes moyennes sur la periode, en séparant global, borne et site
*/
SELECT @moyenne_globale:=AVG(note_principale)
FROM borne_avis
WHERE borne_avis.date > @date_limite;
SELECT @moyenne_borne:=AVG(note_principale)
FROM borne_avis
JOIN sources ON sources.id = borne_avis.source_id
WHERE borne_avis.date > @date_limite AND sources.nom = "borne";
SELECT @moyenne_site:=AVG(note_principale)
FROM borne_avis
JOIN sources ON sources.id = borne_avis.source_id
WHERE borne_avis.date > @date_limite AND sources.nom = "website";
/*
On récupère la distribution de sexes
*/
SELECT @stats_f:=COUNT(*) FROM borne_avis
JOIN borne_auteurs ON borne_avis.id_auteur = borne_auteurs.id
WHERE sexe='f' AND date > @date_limite;
SELECT @stats_h:=COUNT(*) FROM borne_avis
JOIN borne_auteurs ON borne_avis.id_auteur = borne_auteurs.id
WHERE sexe='h' AND date > @date_limite;
SELECT @stats_a:=COUNT(*) FROM borne_avis
JOIN borne_auteurs ON borne_avis.id_auteur = borne_auteurs.id
WHERE sexe='a' AND date > @date_limite;
SET @dist_sexe = CONCAT(@stats_f,",",@stats_h,",",@stats_a);
INSERT INTO STATS_GENERAL_TABLE_NAME (moyenne_globale, moyenne_borne, moyenne_site, dist_sexe) VALUES (@moyenne_globale, @moyenne_borne, @moyenne_site, @dist_sexe);
INSERT INTO STATS_AUTRES_TABLE_NAME (critere_id, note)
SELECT critere_id, AVG(note) as moyenne FROM borne_notes_autre
WHERE borne_notes_autre.date > @date_limite
GROUP BY critere_id
/*
TODO : Calcul de la distribution d'age
/*
Dans cette requête il faut replacer DAY_COUNT_DELAY par le nombre de jours sur lequel calculer les stats, STATS_GENERAL_TABLE_NAME par la table dans laquelle mettre les stats globales (par exemple stats_general_jour si les valeurs sont calculées sur 1 jour) et pareil pour STATS_AUTRES_TABLE_NAME
C'est un peu bizzare comme technique mais j'ai pas trouvé de meilleur solution
*/
SET @date_limite = DATE_ADD(NOW(), INTERVAL -DAY_COUNT_DELAY DAY);
/*
On récupère les notes notes moyennes sur la periode, en séparant global, borne et site
*/
SELECT @moyenne_globale:=AVG(note_principale)
FROM borne_avis
WHERE borne_avis.date > @date_limite;
SELECT @moyenne_borne:=AVG(note_principale)
FROM borne_avis
JOIN sources ON sources.id = borne_avis.source_id
WHERE borne_avis.date > @date_limite AND sources.nom = "borne";
SELECT @moyenne_site:=AVG(note_principale)
FROM borne_avis
JOIN sources ON sources.id = borne_avis.source_id
WHERE borne_avis.date > @date_limite AND sources.nom = "website";
/*
On récupère la distribution de sexes
*/
SELECT @stats_f:=COUNT(*) FROM borne_avis
JOIN borne_auteurs ON borne_avis.id_auteur = borne_auteurs.id
WHERE sexe='f' AND date > @date_limite;
SELECT @stats_h:=COUNT(*) FROM borne_avis
JOIN borne_auteurs ON borne_avis.id_auteur = borne_auteurs.id
WHERE sexe='h' AND date > @date_limite;
SELECT @stats_a:=COUNT(*) FROM borne_avis
JOIN borne_auteurs ON borne_avis.id_auteur = borne_auteurs.id
WHERE sexe='a' AND date > @date_limite;
SET @dist_sexe = CONCAT(@stats_f,",",@stats_h,",",@stats_a);
INSERT INTO STATS_GENERAL_TABLE_NAME (moyenne_globale, moyenne_borne, moyenne_site, dist_sexe) VALUES (@moyenne_globale, @moyenne_borne, @moyenne_site, @dist_sexe);
INSERT INTO STATS_AUTRES_TABLE_NAME (critere_id, note)
SELECT critere_id, AVG(note) as moyenne FROM borne_notes_autre
WHERE borne_notes_autre.date > @date_limite
GROUP BY critere_id
/*
TODO : Calcul de la distribution d'age
*/

View File

@@ -1,69 +1,69 @@
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")
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")
}