var express = require('express'); var router = express.Router(); const {Sequelize} = require("sequelize"); //___________________________________________________________________________________ // Ce petit script permet de connaitre la taille memoire d'un utilisateur // Auteur : Nathaniel Guiquerro Lauryne Gaultier // // GET : Quand on charge la page on tombe sur un formulaire // il faut alors renseigner le email et un nombre entre 1 et 30 // ex : contact1@kaz.local et 25 // POST: SI l'email existe ou le nombre n'est pas correcte alors on va rechercher si // il existe les quotas avec le script ../../quotas/UtilisateurTailleGlobal.sh // SINON on renvoie l'erreur du script ../../quotas/UtilisateurTailleGlobal.sh //___________________________________________________________________________________ //fonction de convertiseur d'uniter automatique function formatBytes(bytes, decimals = 2) { if (bytes === 0) return '0 Bytes'; const k = 1024; const dm = decimals < 0 ? 0 : decimals; const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; const i = Math.floor(Math.log(bytes) / Math.log(k)); return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; } //fonction qui converti la donnée en paramètre // bytes -----> Mb function getMB(bytes){ return bytes/1000000; } async function getData(email , nb ){ var tabDeDonnee = []; // XXX Felix // const sequelize = new Sequelize("quotas","root","tartelette",{ // host: "quotasDB", // dialect:"mariadb" // }); try{ await sequelize.authenticate(); //connecté const query ="SELECT * FROM Utilisateur WHERE utilisateur='"+email+"' ORDER BY date desc ;"; sequelize.query(query).then(([results, metadata]) => { var i=0; while(i<nb){ tabDeDonnee.push(getMB(results[i].total)); var date = new Date(results[i].date); var m =date.getMonth()+1; tabDeDonnee.push(date.getDate()+"/"+m+"/"+date.getFullYear()+" "+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds()); i++; } }) } catch (error){ //pas connecté console.log(error); } return tabDeDonnee; } //fonction qui permet de recuperer la limitation de place d'un utilisateur async function getLimit(email, nb ){ var tabDeDonnee = []; // XXX Felix // const sequelize = new Sequelize("quotas","root","tartelette",{ // host: "quotasDB", // dialect:"mariadb" // }); try{ await sequelize.authenticate(); //connecté const query ="SELECT * FROM Utilisateur WHERE utilisateur='"+email+"' ORDER BY date desc ;"; sequelize.query(query).then(([results, metadata]) => { var i=0; while(i<nb){ tabDeDonnee.push(getMB(results[i].limite*1000000000)); i++; } tabDeDonnee }) } catch (error){ //pas connecté console.log(error); } return tabDeDonnee; } function splitDonne(array){ var tabDonne = []; for (let i = 0; i < array.length; i++) { if(i%2==0){ tabDonne.push(array[i]); } } return tabDonne; } function splitTime(array){ var tabTime = []; for (let i = 0; i < array.length; i++) { if(i%2!=0){ tabTime.push(array[i]); } } return tabTime; } //fonction qui converti le timestamp en un objet Date function timeConverter(UNIX_timestamp){ var date = new Date(UNIX_timestamp); return (date.getDate()+ "/"+(date.getMonth()+1)+ "/"+date.getFullYear()+ " "+date.getHours()+ ":"+date.getMinutes()+ ":"+date.getSeconds()); } /* GET users listing. Cette page affiche le formulaire avec l'email */ router.get('/', function(req, res, next) { res.render('users'); }); /* ICI ce trouve le traitement du mail renseignée via le formulaire */ router.post('/', async function(req, res, next) { myArray = req.body.email; var splits = myArray.split("@"); email=splits[0]; var nombreJ = req.body.nombreJ; if(nombreJ<1 || nombreJ>30) res.render('usersError'); // XXX Felix // const sequelize = new Sequelize("quotas","root","tartelette",{ // host: "quotasDB", // dialect:"mariadb" // }); (async ()=>{ try{ await sequelize.authenticate(); var dat = await getData(email,nombreJ); var lim = await getLimit(email,nombreJ); setTimeout(function(){ console.log("Ready") var tabDonne = splitDonne(dat); var tabTime = splitTime(dat); //connecté const query ="SELECT * FROM Utilisateur WHERE utilisateur='"+email+"' ORDER BY date desc LIMIT 1;"; sequelize.query(query).then(([results, metadata]) => { var i=0; var trouve =false; while(i<results.length && !trouve ){ if(results[i].utilisateur==email){ var R = {"nom":email,"Postfix":getMB(results[i].postfix),"NextCloud":getMB(results[i].nextcloud),"Total":getMB(results[i].total),"Dateduprélevement":timeConverter(results[i].date),"dataChart":tabDonne,"labels":tabTime,"Lim":lim}; res.render('usersfound',{data:R}); trouve=true; } i++; } if(!trouve){ res.render('usersError'); } }) }, 1000); } catch (error){ //pas connecté console.log(error); } })(); }); module.exports = router;