diff --git a/lg/members_fr.txt b/lg/members_fr.txt index ef8f58efbe1923d2c3133d79f9642ac8a35e446b..ffa3aad18f834ead377b30267b105830c6e38bb7 100755 --- a/lg/members_fr.txt +++ b/lg/members_fr.txt @@ -18,7 +18,7 @@ LEGEND_AVAILABILITY [disponibilité : date à partir de laquelle cette certifica WHAT_IS_CENTRALITY_TITLE Qu'est ce que le degré de centralité ? WHAT_IS_CENTRALITY_TEXT Le degré de centralité d'un membre est le nombre de couples orientés (membre->membre) pour lesquels il fait parti d'un des plus court chemin reliant ce couple. QUALITY_MEMBER_TITLE Qu'est ce que la qualité d'un membre ? -QUALITY_MEMBER_TXT C'est le rapport entre le taux de membres référents rendu atteignables par une certification de ce membre et le taux de membres référents qui faut atteindre pour respecter la règle de distance. Si ce nombre est supérieur ou égal à 1 c'est qu'une certification de ce membre suffit à elle seule pour respecter la règle de distance. Si les qualités de plusieurs certifieurs ne se sommes pas c'est tout simplement parce qu'une grande partie des membres référents qu'ils permettent d'atteindre sont les mêmes. +QUALITY_MEMBER_TXT C'est le rapport entre le taux de membres référents rendu atteignables par une certification de ce membre et le taux de membres référents qui faut atteindre pour respecter la règle de distance. Si ce nombre est supérieur ou égal à 1 c'est qu'une certification de ce membre suffit à elle seule pour respecter la règle de distance. Si les qualités de plusieurs certifieurs ne s'additionnent pas c'est tout simplement parce qu'une grande partie des membres référents qu'ils permettent d'atteindre sont les mêmes. WOT_TENSION_STATE État de tension de la toile CENTRALITY_NOT_CALC le degré de centralité des membres n'a jamais été calculé CENTRALITY_CALC_BUSY Les données de centralité sont en cours de mise à jours, pour les voir, rechargez cette page d'ici quelques minutes. diff --git a/lg/willMembers_en.txt b/lg/willMembers_en.txt index 94af0d558acb61eedbbc59cecb2f09769e534993..b14185ba3914fd0e213fcb7f404eda3ff5d9f021 100755 --- a/lg/willMembers_en.txt +++ b/lg/willMembers_en.txt @@ -24,23 +24,7 @@ BLOCKCHAIN_TIME Current Blockchain Time TABLE_TITLE1 Identities that will expire in less than TABLE_TITLE2 days COUNT_READY_MEMBERS Identities having received 5 valid certifications or more -WOT_TENSION_STATE Wot tension state -CENTRALITY_NOT_CALC The degree of centrality of the members was never calculated -CENTRALITY_CALC_BUSY The centrality data are currently recalculate, to see them, refresh this page by a few minutes -MEAN_CENTRALITY Mean centrality -NUMBER_OF_EXIST_PATH Number of pairs directed for which there is a path of 5 steps or less -NUMBER_OF_PAIRS_MEMBER Number of pairs directed (member->member) -PROPORTION_OF_EXIST_PATH Percent of pairs directed for which there is a path of 5 steps or less -MEAN_LENGTH_PATH mean length shortest path -WOT_TENSION_FACTOR Wot tension factor* -MEMBERS_PAGE_NOT_LOAD Please load members page at least once time for get wot tension data -DATA_AT Data at -meanMembersReachedByMembersInSingleExtCert Mean members/sentries reached in single member/sentry certification -SENTRIES_REACHED sentries reached -MEMBERS_REACHED members reached -SENTRY_CERT sentry certification -MEMBER_CERT member certification -MEAN_QUALITY mean quality +WOT_TENSION_STATE Quality averages cases of membership according to the number of received valid certifications NUMBER_OF_RECEIVED_CERTS Number of received certs MEAN_SENTRIES_REACHED mean sentries reached MEAN_QUALITY_CERTS Quality averages of the set of certifications diff --git a/lg/willMembers_fr.txt b/lg/willMembers_fr.txt index 89872b2b58872c6b7437e6e74df08494096ada38..68c2c1ddff8dc11b233220c39e01e366721508d1 100755 --- a/lg/willMembers_fr.txt +++ b/lg/willMembers_fr.txt @@ -19,28 +19,12 @@ DISTANCE_RULE_TXT Il faut qu'il existe un chemin de 5 pas maximum d'au moins <fo WHAT_IS_CENTRALITY_TITLE Qu'est ce que le degré de centralité ? WHAT_IS_CENTRALITY_TEXT Le degré de centralité d'un membre est le nombre de couples orientés (membre->membre) pour lesquels il fait parti d'un des plus court chemin reliant ce couple. QUALITY_MEMBER_TITLE Qu'est ce que la qualité d'un membre ? -QUALITY_MEMBER_TXT C'est le rapport entre le taux de membres référents rendu atteignables par une certification de ce membre et le taux de membres référents qui faut atteindre pour respecter la règle de distance. Si ce nombre est supérieur ou égal à 1 c'est qu'une certification de ce membre suffit à elle seule pour respecter la règle de distance. Si les qualités de plusieurs certifieurs ne se sommes pas c'est tout simplement parce qu'une grande partie des membres référents qu'ils permettent d'atteindre sont les mêmes. +QUALITY_MEMBER_TXT C'est le rapport entre le taux de membres référents rendu atteignables par une certification de ce membre et le taux de membres référents qui faut atteindre pour respecter la règle de distance. Si ce nombre est supérieur ou égal à 1 c'est qu'une certification de ce membre suffit à elle seule pour respecter la règle de distance. Si les qualités de plusieurs certifieurs ne s'additionnent pas c'est tout simplement parce qu'une grande partie des membres référents qu'ils permettent d'atteindre sont les mêmes. BLOCKCHAIN_TIME Temps Blockchain actuel TABLE_TITLE1 Identités qui vont expirer dans moins de TABLE_TITLE2 jours COUNT_READY_MEMBERS Identités avec au moins 5 certifications valides reçues -WOT_TENSION_STATE État de tension de la toile -CENTRALITY_NOT_CALC le degré de centralité des membres n'a jamais été calculé -CENTRALITY_CALC_BUSY Les données de centralité sont en cours de mise à jours, pour les voir, rechargez cette page d'ici quelques minutes. -MEAN_CENTRALITY Centralité moyenne -NUMBER_OF_EXIST_PATH Nombre de couples orientés pour lequels il existe un chemin de 5 pas ou moins -NUMBER_OF_PAIRS_MEMBER Nombre de couples orientés (membre->membre) -PROPORTION_OF_EXIST_PATH Proportion de couples orientés pour lequels il existe un chemin de 5 pas ou moins -MEAN_LENGTH_PATH Longueur moyenne d'un plus court chemin -WOT_TENSION_FACTOR Facteur de tension de la toile* -MEMBERS_PAGE_NOT_LOAD Svp veillez charger la page "liste des membres" au moins une fois pour obtenir l'état de tension de la toile -DATA_AT Données au -meanMembersReachedByMembersInSingleExtCert Taux moyen de membres joiniables via une seule certification -MEMBER_CERT certification d'un membre -MEMBERS_REACHED membres joiniables -SENTRY_CERT certification d'un membre référent -SENTRIES_REACHED membres référents joiniables -MEAN_QUALITY Qualité moyenne +WOT_TENSION_STATE Qualité moyenne des dossiers d'adhésion en fonction du nombre de certifications valides reçues NUMBER_OF_RECEIVED_CERTS Nombre de certifications reçues MEAN_SENTRIES_REACHED Taux moyen de membres référents joiniables MEAN_QUALITY_CERTS Qualité moyenne par groupe de certifications reçues diff --git a/lib/main.js b/lib/main.js index a30e0ccd95d3dc94f9ee1671956b9cec4c564731..80ad872dd2ee3663d114b5b016c165a3ba52da03 100755 --- a/lib/main.js +++ b/lib/main.js @@ -14,30 +14,6 @@ module.exports = (duniterServer, host, port, appParente, program) => co(function // Define cache var cache = { - // willMembers - lockWillMembers: false, - willMembersLastUptime: 0, - meanSentriesReachedByIdtyPerCert: new Array(), - meanMembersReachedByIdtyPerCert: new Array(), - countIdtiesPerReceiveCert: new Array(), - - // members - lockMembers: false, - membersLastUptime: 0, - membersQualityExt: new Array(), - meanSentriesReachedBySentriesInSingleExtCert: 0, - meanMembersReachedBySentriesInSingleExtCert: 0, - meanSentriesReachedByMembersInSingleExtCert: 0, - meanMembersReachedByMembersInSingleExtCert: 0, - - // wotCentrality - lockCentralityCalc: false, - membersLastCentralityCalcTime: 0, - membersCentrality: new Array(), - meanCentrality: 0, - meanShortestsPathLength: 0, - nbShortestsPath: 0, - // membersCount lockMembersCount: false, lastUptime: 0, diff --git a/routes/members.js b/routes/members.js index 429db1266f797aed5f914f0e8f69ddadab43173d..bf135f8aa6c3a2cada0ed27d1da124822f4bdd4c 100755 --- a/routes/members.js +++ b/routes/members.js @@ -8,6 +8,8 @@ const timestampToDatetime = require(__dirname + '/../lib/timestampToDatetime') const MIN_MEMBERS_UPDATE_FREQ = 180; // Préserver les résultats en cache +var lockMembers = false; +var membersLastUptime = 0; var previousMode = null; var previousCentrality = null; var membersList = []; @@ -21,10 +23,24 @@ var membershipsExpireTimeList = []; var nbMaxCertifs = 0; var sentries = []; var sentriesIndex = []; +var membersQualityExt = []; +var meanSentriesReachedBySentriesInSingleExtCert = 0; +var meanMembersReachedBySentriesInSingleExtCert = 0; +var meanSentriesReachedByMembersInSingleExtCert = 0; +var meanMembersReachedByMembersInSingleExtCert = 0; + +// wotCentrality cache +var lockCentralityCalc = false; +var membersLastCentralityCalcTime = 0; +var membersCentrality = []; +var meanCentrality = 0; +var meanShortestsPathLength = 0; +var nbShortestsPath = 0; + module.exports = (req, res, next) => co(function *() { - var { duniterServer, cache } = req.app.locals + var { duniterServer } = req.app.locals try { // Initaliser les constantes @@ -54,11 +70,11 @@ module.exports = (req, res, next) => co(function *() { const wotbInstance = wotb.newFileInstance(duniterServer.home + '/wotb.bin'); // Attendre que le cache members soit déverouiller puis prendre la main dessus - while(cache.lockMembers); - cache.lockMembers = true; + while(lockMembers); + lockMembers = true; // Vérifier si le cache doit être Réinitialiser - let reinitCache = (Math.floor(Date.now() / 1000) > (cache.membersLastUptime + MIN_MEMBERS_UPDATE_FREQ)); + let reinitCache = (Math.floor(Date.now() / 1000) > (membersLastUptime + MIN_MEMBERS_UPDATE_FREQ)); // Si changement de conditions, forcer le rechargement du cache if (previousMode != mode || previousCentrality != centrality) { reinitCache = true; } @@ -66,6 +82,7 @@ module.exports = (req, res, next) => co(function *() { if (reinitCache) { // Réinitialiser le cache + membersLastUptime = Math.floor(Date.now() / 1000); previousMode = mode; previousCentrality = centrality; membersList = []; @@ -79,29 +96,20 @@ module.exports = (req, res, next) => co(function *() { nbMaxCertifs = 0; sentries = []; sentriesIndex = []; - cache.membersLastUptime = Math.floor(Date.now() / 1000); - cache.membersQualityExt = []; - cache.meanSentriesReachedBySentriesInSingleExtCert = 0; - cache.meanMembersReachedBySentriesInSingleExtCert = 0; - cache.meanSentriesReachedByMembersInSingleExtCert = 0; - cache.meanMembersReachedByMembersInSingleExtCert = 0; + membersQualityExt = []; + meanSentriesReachedBySentriesInSingleExtCert = 0; + meanMembersReachedBySentriesInSingleExtCert = 0; + meanSentriesReachedByMembersInSingleExtCert = 0; + meanMembersReachedByMembersInSingleExtCert = 0; - // Réinitialiser le cache des donénes de centralité (sauf il elles sont déjà en cours de recalcul) + // Réinitialiser le cache des données de centralité if (centrality=='yes') { - if (cache.lockCentralityCalc) - { - centrality = 'no'; - } - else - { - cache.lockCentralityCalc = true; - cache.membersLastCentralityCalcTime = Math.floor(Date.now() / 1000); - cache.membersCentrality = []; - cache.meanCentrality = 0; - cache.meanShortestsPathLength = 0; - cache.nbShortestsPath = 0; - } + membersLastCentralityCalcTime = Math.floor(Date.now() / 1000); + membersCentrality = []; + meanCentrality = 0; + meanShortestsPathLength = 0; + nbShortestsPath = 0; } // Récupérer la liste des membres référents @@ -146,7 +154,7 @@ module.exports = (req, res, next) => co(function *() { // Réinitialiser le degré de centralité du membre if (centrality=='yes') { - cache.membersCentrality[membersList[m].wotb_id] = 0; + membersCentrality[membersList[m].wotb_id] = 0; } // Créer une wot temporaire @@ -160,17 +168,17 @@ module.exports = (req, res, next) => co(function *() { // Mesurer la qualité externe du membre courant let detailedDistanceQualityExt = tmpWot.detailedDistance(membersList[m].wotb_id, dSen, conf.stepMax-1, conf.xpercent); - cache.membersQualityExt[membersList[m].uid] = ((detailedDistanceQualityExt.nbSuccess/detailedDistanceQualityExt.nbSentries)/conf.xpercent).toFixed(2); + membersQualityExt[membersList[m].uid] = ((detailedDistanceQualityExt.nbSuccess/detailedDistanceQualityExt.nbSentries)/conf.xpercent).toFixed(2); // Calculate meanSentriesReachedBySentriesInSingleExtCert, meanMembersReachedBySentriesInSingleExtCert, meanSentriesReachedByMembersInSingleExtCert and meanMembersReachedByMembersInSingleExtCert if (currentMemberIsSentry) { - cache.meanSentriesReachedBySentriesInSingleExtCert += parseFloat(((detailedDistanceQualityExt.nbSuccess/detailedDistanceQualityExt.nbSentries)*100).toFixed(2)); - cache.meanMembersReachedBySentriesInSingleExtCert += parseFloat(((detailedDistanceQualityExt.nbReached/membersList.length)*100).toFixed(2)); + meanSentriesReachedBySentriesInSingleExtCert += parseFloat(((detailedDistanceQualityExt.nbSuccess/detailedDistanceQualityExt.nbSentries)*100).toFixed(2)); + meanMembersReachedBySentriesInSingleExtCert += parseFloat(((detailedDistanceQualityExt.nbReached/membersList.length)*100).toFixed(2)); countSentries++; } - cache.meanSentriesReachedByMembersInSingleExtCert += parseFloat(((detailedDistanceQualityExt.nbSuccess/detailedDistanceQualityExt.nbSentries)*100).toFixed(2)); - cache.meanMembersReachedByMembersInSingleExtCert += parseFloat(((detailedDistanceQualityExt.nbReached/membersList.length)*100).toFixed(2)); + meanSentriesReachedByMembersInSingleExtCert += parseFloat(((detailedDistanceQualityExt.nbSuccess/detailedDistanceQualityExt.nbSentries)*100).toFixed(2)); + meanMembersReachedByMembersInSingleExtCert += parseFloat(((detailedDistanceQualityExt.nbReached/membersList.length)*100).toFixed(2)); // Nettoyer la wot temporaire tmpWot.clear(); @@ -336,8 +344,8 @@ module.exports = (req, res, next) => co(function *() { if (paths.length > 0) { let shortestPathLength = paths[paths.length-1].length; - cache.meanShortestsPathLength += shortestPathLength; - cache.nbShortestsPath++; + meanShortestsPathLength += shortestPathLength; + nbShortestsPath++; let indexMembersPresent = new Array(); /*for (const path of paths) { @@ -351,7 +359,7 @@ module.exports = (req, res, next) => co(function *() { if (path.length == shortestPathLength && i>0 && i<(path.length-1)) { //if (path[0] == 0) { test += path[i]+'-->'; } - cache.membersCentrality[path[i]]++; + membersCentrality[path[i]]++; indexMembersPresent[path[i]] = path[i]; } } @@ -359,7 +367,7 @@ module.exports = (req, res, next) => co(function *() { } for (const indexMember of indexMembersPresent) { - cache.membersCentrality[indexMember]++; + membersCentrality[indexMember]++; } } } @@ -398,7 +406,7 @@ module.exports = (req, res, next) => co(function *() { { for (const member of membersList) { - tabSort.push(cache.membersCentrality[member.wotb_id]); + tabSort.push(membersCentrality[member.wotb_id]); } } else if (sort_by == "sigCount") @@ -460,31 +468,25 @@ module.exports = (req, res, next) => co(function *() { // Calculate mean Members/Sentries ReachedBy Members/Sentries InSingleExtCert if (countSentries > 0) { - cache.meanSentriesReachedBySentriesInSingleExtCert = parseFloat((cache.meanSentriesReachedBySentriesInSingleExtCert/countSentries).toFixed(2)); - cache.meanMembersReachedBySentriesInSingleExtCert = parseFloat((cache.meanMembersReachedBySentriesInSingleExtCert/countSentries).toFixed(2)); + meanSentriesReachedBySentriesInSingleExtCert = parseFloat((meanSentriesReachedBySentriesInSingleExtCert/countSentries).toFixed(2)); + meanMembersReachedBySentriesInSingleExtCert = parseFloat((meanMembersReachedBySentriesInSingleExtCert/countSentries).toFixed(2)); } if (membersList.length > 0) { - cache.meanSentriesReachedByMembersInSingleExtCert = parseFloat((cache.meanSentriesReachedByMembersInSingleExtCert/membersList.length).toFixed(2)); - cache.meanMembersReachedByMembersInSingleExtCert = parseFloat((cache.meanMembersReachedByMembersInSingleExtCert/membersList.length).toFixed(2)); + meanSentriesReachedByMembersInSingleExtCert = parseFloat((meanSentriesReachedByMembersInSingleExtCert/membersList.length).toFixed(2)); + meanMembersReachedByMembersInSingleExtCert = parseFloat((meanMembersReachedByMembersInSingleExtCert/membersList.length).toFixed(2)); } // recalculate meanCentrality and meanShortestsPathLength if (centrality=='yes') { - for (const memberCentrality of cache.membersCentrality) + for (const memberCentrality of membersCentrality) { - cache.meanCentrality += memberCentrality; + meanCentrality += memberCentrality; } - cache.meanCentrality /= cache.membersCentrality.length; - cache.meanShortestsPathLength /= cache.nbShortestsPath; - - // Dévérouiller le cache des données de centralité - cache.lockCentralityCalc = false; + meanCentrality /= membersCentrality.length; + meanShortestsPathLength /= nbShortestsPath; } - - // Dévérouiller le cache Members - cache.lockMembers = false; } // Si le client demande la réponse au format JSON =, le faire @@ -519,20 +521,20 @@ module.exports = (req, res, next) => co(function *() { stepMax: conf.stepMax, // members cache data - membersLastUptime: cache.membersLastUptime, - membersQualityExt: cache.membersQualityExt, - meanSentriesReachedBySentriesInSingleExtCert: cache.meanSentriesReachedBySentriesInSingleExtCert, - meanMembersReachedBySentriesInSingleExtCert: cache.meanMembersReachedBySentriesInSingleExtCert, - meanSentriesReachedByMembersInSingleExtCert: cache.meanSentriesReachedByMembersInSingleExtCert, - meanMembersReachedByMembersInSingleExtCert: cache.meanMembersReachedByMembersInSingleExtCert, + membersLastUptime, + membersQualityExt, + meanSentriesReachedBySentriesInSingleExtCert, + meanMembersReachedBySentriesInSingleExtCert, + meanSentriesReachedByMembersInSingleExtCert, + meanMembersReachedByMembersInSingleExtCert, // centrality cache data - lockCentralityCalc: cache.lockCentralityCalc, - membersLastCentralityCalcTime: cache.membersLastCentralityCalcTime, - membersCentrality: cache.membersCentrality, - meanCentrality: cache.meanCentrality, - meanShortestsPathLength: cache.meanShortestsPathLength, - nbShortestsPath: cache.nbShortestsPath, + lockCentralityCalc, + membersLastCentralityCalcTime, + membersCentrality, + meanCentrality, + meanShortestsPathLength, + nbShortestsPath, // Template helpers timestampToDatetime, @@ -574,7 +576,7 @@ module.exports = (req, res, next) => co(function *() { // } } // Dévérouiller le cache members - cache.lockMembers = false; + lockMembers = false; next() } } catch (e) { diff --git a/routes/willMembers.js b/routes/willMembers.js index ecabbd0193e7fea38ecac0e70320a1ca15f71e64..b7bcbdd9688d06a408f7d86bc4d0309958fe3150 100755 --- a/routes/willMembers.js +++ b/routes/willMembers.js @@ -9,6 +9,8 @@ const timestampToDatetime = require(__dirname + '/../lib/timestampToDatetime') const MIN_WILLMEMBERS_UPDATE_FREQ = 180; // Préserver les résultats en cache +var lockWillMembers = false; +var willMembersLastUptime = 0; var identitiesList = []; var idtysPendingCertifsList = []; var nbMaxCertifs = 0; @@ -16,10 +18,14 @@ var countMembersWithSigQtyValidCert = 0; var sentries = []; var sentriesIndex = []; var wotbIdIndex = []; +var meanSentriesReachedByIdtyPerCert = []; +var meanMembersReachedByIdtyPerCert = []; +var countIdtiesPerReceiveCert = []; +var membersQualityExt = []; module.exports = (req, res, next) => co(function *() { - var { duniterServer, cache } = req.app.locals + var { duniterServer } = req.app.locals try { // get blockchain timestamp @@ -54,11 +60,11 @@ module.exports = (req, res, next) => co(function *() { const wotbInstance = wotb.newFileInstance(duniterServer.home + '/wotb.bin'); // Attendre que le cache willMembers soit déverouillé (même si on ne le modifie pas !) puis prendre la main dessus - while(cache.lockWillMembers); - cache.lockWillMembers = true; + while(lockWillMembers); + lockWillMembers = true; // Vérifier si le cache doit être Réinitialiser - let reinitCache = (Math.floor(Date.now() / 1000) > (cache.willMembersLastUptime + MIN_WILLMEMBERS_UPDATE_FREQ)); + let reinitCache = (Math.floor(Date.now() / 1000) > (willMembersLastUptime + MIN_WILLMEMBERS_UPDATE_FREQ)); if (reinitCache) { @@ -70,7 +76,8 @@ module.exports = (req, res, next) => co(function *() { sentries = []; sentriesIndex = []; wotbIdIndex = []; - cache.willMembersLastUptime = Math.floor(Date.now() / 1000); + membersQualityExt = []; + willMembersLastUptime = Math.floor(Date.now() / 1000); // Récupérer la liste des membres référents sentries = wotbInstance.getSentries(dSen); @@ -221,9 +228,9 @@ module.exports = (req, res, next) => co(function *() { // Réinitialiser sumSentriesReachedByIdtyPerCert, sumMembersReachedByIdtyPerCert et countIdtiesPerReceiveCert for (let i=0;i<=nbMaxCertifs;i++) { - cache.meanSentriesReachedByIdtyPerCert[i] = 0; - cache.meanMembersReachedByIdtyPerCert[i] = 0; - cache.countIdtiesPerReceiveCert[i] = 0; + meanSentriesReachedByIdtyPerCert[i] = 0; + meanMembersReachedByIdtyPerCert[i] = 0; + countIdtiesPerReceiveCert[i] = 0; } } // END if (reinitCache) @@ -351,18 +358,29 @@ module.exports = (req, res, next) => co(function *() { } } - // Tester la distance à l'aide des certifications disponibles + // Créer une wot temporaire let tmpWot = wotbInstance.memCopy(); + + // Mesurer la qualité externe de chaque emetteur de chaque certification + for (const cert of idtysPendingCertifsList[idMax]) + { + if ( typeof(membersQualityExt[cert.from]) == 'undefined' ) + { + let detailedDistanceQualityExt = tmpWot.detailedDistance(cert.wotb_id, dSen, conf.stepMax-1, conf.xpercent); + membersQualityExt[cert.from] = ((detailedDistanceQualityExt.nbSuccess/detailedDistanceQualityExt.nbSentries)/conf.xpercent).toFixed(2); + } + } + + // Ajouter un noeud a la wot temporaire et lui donner toute les certifications valides reçues par l'indentité idMax let pendingIdtyWID = tmpWot.addNode(); - let certIndex=0; for (const cert of idtysPendingCertifsList[idMax]) { if (cert.validBlockStamp) { tmpWot.addLink(cert.wotb_id, pendingIdtyWID); } - certIndex++; } + // Récupérer les données de distance du dossier d'adhésion de l'indentité idMax let detailedDistance = tmpWot.detailedDistance(pendingIdtyWID, dSen, conf.stepMax, conf.xpercent); // Nettoyer la wot temporaire @@ -393,9 +411,9 @@ module.exports = (req, res, next) => co(function *() { if (reinitCache && identitiesList[idMax].nbValidPendingCert > 0) { let nbReceiveCert = identitiesList[idMax].nbValidPendingCert; - cache.meanSentriesReachedByIdtyPerCert[nbReceiveCert-1] += percentSentriesReached; - cache.meanMembersReachedByIdtyPerCert[nbReceiveCert-1] += percentMembersReached; - cache.countIdtiesPerReceiveCert[nbReceiveCert-1] += 1; + meanSentriesReachedByIdtyPerCert[nbReceiveCert-1] += percentSentriesReached; + meanMembersReachedByIdtyPerCert[nbReceiveCert-1] += percentMembersReached; + countIdtiesPerReceiveCert[nbReceiveCert-1] += 1; } } // END if (!doubloon) } // END days limit rule @@ -421,15 +439,15 @@ module.exports = (req, res, next) => co(function *() { // Calculate meanSentriesReachedByIdtyPerCert and meanMembersReachedByIdtyPerCert for (let i=0;i<=nbMaxCertifs;i++) { - if ( cache.countIdtiesPerReceiveCert[i] > 0 ) + if ( countIdtiesPerReceiveCert[i] > 0 ) { - cache.meanSentriesReachedByIdtyPerCert[i] = parseFloat((cache.meanSentriesReachedByIdtyPerCert[i]/cache.countIdtiesPerReceiveCert[i]).toFixed(2)); - cache.meanMembersReachedByIdtyPerCert[i] = parseFloat((cache.meanMembersReachedByIdtyPerCert[i]/cache.countIdtiesPerReceiveCert[i]).toFixed(2)); + meanSentriesReachedByIdtyPerCert[i] = parseFloat((meanSentriesReachedByIdtyPerCert[i]/countIdtiesPerReceiveCert[i]).toFixed(2)); + meanMembersReachedByIdtyPerCert[i] = parseFloat((meanMembersReachedByIdtyPerCert[i]/countIdtiesPerReceiveCert[i]).toFixed(2)); } else { - cache.meanSentriesReachedByIdtyPerCert[i] = 0.0; - cache.meanMembersReachedByIdtyPerCert[i] = 0.0; + meanSentriesReachedByIdtyPerCert[i] = 0.0; + meanMembersReachedByIdtyPerCert[i] = 0.0; } } } @@ -468,24 +486,9 @@ module.exports = (req, res, next) => co(function *() { idtyWindow: conf.idtyWindow, xpercent: conf.xpercent, // willMembers cache data - meanSentriesReachedByIdtyPerCert: cache.meanSentriesReachedByIdtyPerCert, - meanMembersReachedByIdtyPerCert: cache.meanMembersReachedByIdtyPerCert, - // members cache data - membersLastUptime: cache.membersLastUptime, - membersQualityExt: cache.membersQualityExt, - meanSentriesReachedBySentriesInSingleExtCert: cache.meanSentriesReachedBySentriesInSingleExtCert, - meanMembersReachedBySentriesInSingleExtCert: cache.meanMembersReachedBySentriesInSingleExtCert, - meanSentriesReachedByMembersInSingleExtCert: cache.meanSentriesReachedByMembersInSingleExtCert, - meanMembersReachedByMembersInSingleExtCert: cache.meanMembersReachedByMembersInSingleExtCert, - // centrality cache data - lockCentralityCalc: cache.lockCentralityCalc, - membersLastCentralityCalcTime: cache.membersLastCentralityCalcTime, - membersCentrality: cache.membersCentrality, - meanCentrality: cache.meanCentrality, - meanShortestsPathLength: cache.meanShortestsPathLength, - nbShortestsPath: cache.nbShortestsPath, - - + meanSentriesReachedByIdtyPerCert, + meanMembersReachedByIdtyPerCert, + membersQualityExt, // Template helpers timestampToDatetime, // Calculer la proportion de temps restant avant l'expiration @@ -499,7 +502,7 @@ module.exports = (req, res, next) => co(function *() { } } // Dévérouiller les caches willMembers et members - cache.lockWillMembers = false; + lockWillMembers = false; // Passer la main au template next() } diff --git a/views/about.html b/views/about.html index 0cd9fc3fe194d0a227be07b00e5e1db2fbb0863b..5b5028781cff27e624a07a6a5279a31f345a6e11 100755 --- a/views/about.html +++ b/views/about.html @@ -31,7 +31,7 @@ ${(host.substr(host.length-6,6) == '.onion') ? HTML_TOR_HEAD:HTML_HEAD} <a href="https://github.com/duniter/duniter-currency-monit/blob/master/LICENSE">License AGPL V 3.0</a><br> <a href="https://github.com/duniter/duniter-currency-monit/">github repository</a> </div><br> -<div align="left">Version : <a href="https://github.com/duniter/duniter-currency-monit/releases/tag/module-0.3.2">module-0.3.2</a></div><br> +<div align="left">Version : <a href="https://github.com/duniter/duniter-currency-monit/releases/tag/module-0.3.3">module-0.3.3</a></div><br> <div align="left">Author : <a href="https://github.com/librelois">Éloïs Librelois</a></div><br> <div align="left">Contributors : <a href="https://github.com/jytou">jytou</a> (translator), <a href="https://github.com/devingfx">devingfx</a> (frontend), <a href="https://github.com/c-geek">cgeek</a> (willMembers and wotex),<a href="https://github.com/M5oul">M5oul</a> (adjustments)</div><br> <br> diff --git a/views/willMembers.html b/views/willMembers.html index c1e314e03679e9f627ff13a792b9a5e73b36c658..ca80fafd834a4776aa5d3ec00e0d2d5724e8f4f6 100755 --- a/views/willMembers.html +++ b/views/willMembers.html @@ -61,7 +61,7 @@ ${(host.substr(host.length-6,6) == '.onion') ? HTML_TOR_HEAD:HTML_HEAD} <!-- Afficher la légende et l'aide --> ${(help != 'no') ? ` <div id="zone1" style="width: 100%; height: 20px; background: White; border: 1px solid DimGrey; transition: height 1s; -moz-transition: height 1s;-webkit-transition: height 1s;-o-transition: height 1s; overflow: hidden;"> - <div id="bandeau1" style="height: 20px; width: 100%; font-size: medium; color: white; background-color: darkgrey;" onmouseover="deroule(1,500);" onmouseout="deroule(1,20);"><b>${LANG["LEGEND"]}</b> + <div id="bandeau1" style="height: 20px; width: 100%; font-size: medium; color: white; background-color: darkgrey;" onmouseover="deroule(1,400);" onmouseout="deroule(1,20);"><b>${LANG["LEGEND"]}</b> </div> <div id="texte1" style="float: left;"> <i><font color='DarkRed'>${LANG["SIG_PERIOD_LEGEND"]}</font><br> @@ -84,36 +84,9 @@ ${(help != 'no') ? ` <!-- Afficher l'état de tension de la toile de confiance --> <div id="zone2" style="width: 100%; height: 20px; background: White; border: 1px solid DimGrey; transition: height 1s; -moz-transition: height 1s;-webkit-transition: height 1s;-o-transition: height 1s; overflow: hidden;"> - <div id="bandeau2" style="height: 20px; width: 100%; font-size: medium; color: white; background-color: darkgrey;" onmouseover="deroule(2,500);" onmouseout="deroule(2,20);"><b>${LANG["WOT_TENSION_STATE"]}</b> + <div id="bandeau2" style="height: 20px; width: 100%; font-size: medium; color: white; background-color: darkgrey;" onmouseover="deroule(2,150);" onmouseout="deroule(2,20);"><b>${LANG["WOT_TENSION_STATE"]}</b> </div> <div id="texte2" style="float: left;"> - ${(membersLastCentralityCalcTime==0) ? ` - ${LANG["CENTRALITY_NOT_CALC"]}.<br> - `:` - ${(lockCentralityCalc) ? ` - ${LANG["CENTRALITY_CALC_BUSY"]}.<br> - `:` - <table border="1"> - <tr><td align='center' colspan='2'>${LANG["DATA_AT"]} ${timestampToDatetime(membersLastCentralityCalcTime)}</td></tr> - <tr><td align='center'>${LANG["MEAN_LENGTH_PATH"]}</td><td align='center'><b>${(meanShortestsPathLength).toFixed(2)}</b></td></tr> - <tr><td align='center'>${LANG["MEAN_CENTRALITY"]}</td><td align='center'><b>${meanCentrality.toFixed(2)}</b></td></tr> - <tr><td align='center'>${LANG["NUMBER_OF_PAIRS_MEMBER"]}</td><td align='center'>${(currentMembersCount*(currentMembersCount-1))}</td></tr> - <tr><td align='center'>${LANG["NUMBER_OF_EXIST_PATH"]}</td><td align='center'><b>${nbShortestsPath}</b></td></tr> - <tr><td align='center'><b>${LANG["PROPORTION_OF_EXIST_PATH"]}</b></td><td align='center'><font color="red"><b>${((nbShortestsPath/(currentMembersCount*(currentMembersCount-1)))*100).toFixed(2)}%</b></font></td></tr> - </table> - `} - `} - <br> - ${(membersLastUptime==0) ? `<b>${LANG["MEMBERS_PAGE_NOT_LOAD"]} !</b><br>`:` - <table border="1"> - <tr><td align='center' colspan='3'>${LANG["DATA_AT"]} ${timestampToDatetime(membersLastUptime)}</td></tr> - <tr><td align='center'>${LANG["meanMembersReachedByMembersInSingleExtCert"]}</td><td align='center'>${LANG["SENTRIES_REACHED"]}</td><td align='center'>${LANG["MEMBERS_REACHED"]}</td></tr> - <tr><td align='center'>${LANG["SENTRY_CERT"]}</td><td align='center'>${meanSentriesReachedBySentriesInSingleExtCert}%</td><td align='center'>${meanMembersReachedBySentriesInSingleExtCert}%</td></tr> - <tr><td align='center'>${LANG["MEMBER_CERT"]}</td><td align='center'><font color="${(meanSentriesReachedByMembersInSingleExtCert<xpercent) ? 'DarkRed' : 'blue' }"><b>${meanSentriesReachedByMembersInSingleExtCert}%</b></font></td><td align='center'><b>${meanMembersReachedByMembersInSingleExtCert}%</b></td></tr> - <tr><td align='center'><b>${LANG["MEAN_QUALITY"]}</b></td><td align='center'><font color="red"><b>${(meanSentriesReachedByMembersInSingleExtCert/(xpercent*100)).toFixed(2)}</b></font></td><td align='center'><b>${(meanMembersReachedByMembersInSingleExtCert/(xpercent*100)).toFixed(2)}</b></td></tr> - </table> - `} - <br> <table border="1"> <tr> <td align='center'>${LANG["NUMBER_OF_RECEIVED_CERTS"]}</td><td align='center'>1</td><td align='center'>2</td><td align='center'>3</td><td align='center'>4</td><td align='center'>5</td> @@ -216,7 +189,7 @@ ${(help != 'no') ? ` ${cert.issuerIsSentry ? '<b>':''} <a href="wotex?lg=${MENU_LANG['LG']}${(typeof(help) != 'undefined' && help == 'no') ? '&help=no':''}&to=${cert['from']}&pending=on&mode=undefined">${cert['from']}</a> ${cert.issuerIsSentry ? '</b>':''} - <br>${LANG['QUALITY']} : <b>${(membersLastUptime==0) ? `?`:`${(typeof(membersQualityExt[cert.from])=='undefined' || !cert.validBlockStamp) ? `0.00`:membersQualityExt[cert.from]}`}</b> + <br>${LANG['QUALITY']} : <b>${(typeof(membersQualityExt[cert.from])=='undefined' || !cert.validBlockStamp) ? `0.00`:membersQualityExt[cert.from]}</b> <br>${timestampToDatetime(cert.timestampExpire)} <br>#${cert['blockNumber']} ${j==(4+idty.pendingCertifications.length-idty.nbValidPendingCert)?'<b>':''}