From c644ebeac8a3770b3a5bdaa021327ade79dd1c41 Mon Sep 17 00:00:00 2001 From: cgeek <cem.moreau@gmail.com> Date: Sun, 5 Apr 2020 15:41:44 +0200 Subject: [PATCH] [refact] abstracted `monetaryMass` --- lib/DataFinder.ts | 12 ++++++++++ routes/index.js | 2 +- routes/{monetaryMass.js => monetaryMass2.ts} | 25 ++++++++++++-------- 3 files changed, 28 insertions(+), 11 deletions(-) rename routes/{monetaryMass.js => monetaryMass2.ts} (86%) diff --git a/lib/DataFinder.ts b/lib/DataFinder.ts index 8f63faa..012b2a2 100644 --- a/lib/DataFinder.ts +++ b/lib/DataFinder.ts @@ -131,4 +131,16 @@ export class DataFinder { return this.getFromCacheOrDB('getBlockWhereMedianTimeLteAndGt', [medianTime, previousBlockchainTime].join('-'), () => this.query('SELECT `issuer`,`membersCount`,`medianTime`,`dividend`,`number`,`nonce` FROM block WHERE `fork`=0 AND `medianTime` <= '+medianTime+' AND `medianTime` > '+previousBlockchainTime+' ORDER BY `medianTime` ASC')) } + + @MonitorExecutionTime() + getBlockWhereMedianTimeLteAndGteNoLimit(endMedianTime: number, beginMedianTime: number) { + return this.getFromCacheOrDB('getBlockWhereMedianTimeLteAndGteNoLimit', [endMedianTime, beginMedianTime].join('-'), + () => this.query('SELECT `issuer`,`membersCount`,`monetaryMass`,`medianTime`,`dividend`,`number`,`nonce` FROM block WHERE `fork`=0 AND `medianTime` <= '+endMedianTime+' AND `medianTime` >= '+beginMedianTime+' ORDER BY `medianTime` ASC')) + } + + @MonitorExecutionTime() + getBlockWhereMedianTimeGtNoLimit(beginMedianTime: number) { + return this.getFromCacheOrDB('getBlockWhereMedianTimeGtNoLimit', String(beginMedianTime), + () => this.query('SELECT `issuer`,`membersCount`,`monetaryMass`,`medianTime`,`dividend`,`number`,`nonce` FROM block WHERE `fork`=0 AND `medianTime` >= '+beginMedianTime+' ORDER BY `medianTime` ASC')) + } } diff --git a/routes/index.js b/routes/index.js index ff2a495..9f28bfa 100755 --- a/routes/index.js +++ b/routes/index.js @@ -149,7 +149,7 @@ app.get('/blockCount', * Évolution de la masse monétaire totale ***************************************/ app.get('/monetaryMass', - require(__dirname + '/monetaryMass.js'), + require(__dirname + '/monetaryMass2.js'), (req, res)=> res.render('Chart.html', { printMenu, pageName: 'MONETARY_MASS', diff --git a/routes/monetaryMass.js b/routes/monetaryMass2.ts similarity index 86% rename from routes/monetaryMass.js rename to routes/monetaryMass2.ts index afe0f58..12a1115 100755 --- a/routes/monetaryMass.js +++ b/routes/monetaryMass2.ts @@ -1,12 +1,17 @@ "use strict"; +import {DataFinder} from "../lib/DataFinder"; + const co = require('co') const timestampToDatetime = require(__dirname + '/../lib/timestampToDatetime') const getLang = require(__dirname + '/../lib/getLang') +const constants = require(__dirname + '/../lib/constants.js') -module.exports = (req, res, next) => co(function *() { +module.exports = async (req:any, res:any, next:any) => { var { duniterServer } = req.app.locals + + const dataFinder = new DataFinder(duniterServer) try { // get GET parameters @@ -22,30 +27,30 @@ module.exports = (req, res, next) => co(function *() { const meanMonetaryMassAtFullCurrency = Math.ceil((1/duniterServer.conf.c)*(duniterServer.conf.dtReeval / duniterServer.conf.dt)); // get beginBlock and endBlock - var beginBlock = yield duniterServer.dal.peerDAL.query('SELECT `medianTime` FROM block WHERE `number` = '+begin+' LIMIT 1'); + var beginBlock = [await dataFinder.getBlock(begin)]; var endBlock = null; if (end > 0) { - endBlock = yield duniterServer.dal.peerDAL.query('SELECT `medianTime`,`membersCount` FROM block WHERE `number` = '+end+' LIMIT 1'); + endBlock = [await dataFinder.getBlock(end)]; if ( typeof(endBlock[0]) == 'undefined') { - endBlock = yield duniterServer.dal.peerDAL.query('SELECT `medianTime`,`membersCount`,`number` FROM block ORDER BY `medianTime` DESC LIMIT 1'); + endBlock = [await dataFinder.getCurrentBlockOrNull()]; end = endBlock[0].number; } } else { - endBlock = yield duniterServer.dal.peerDAL.query('SELECT `medianTime`,`membersCount` FROM block ORDER BY `medianTime` DESC LIMIT 1'); + endBlock = [await dataFinder.getCurrentBlockOrNull()]; } // get blockchain if (end >= begin && begin >= 1) { - var blockchain = yield duniterServer.dal.peerDAL.query('SELECT `issuer`,`membersCount`,`monetaryMass`,`medianTime`,`dividend`,`number`,`nonce` FROM block WHERE `fork`=0 AND `medianTime` <= '+endBlock[0].medianTime+' AND `medianTime` >= '+beginBlock[0].medianTime+' ORDER BY `medianTime` ASC'); + var blockchain = await dataFinder.getBlockWhereMedianTimeLteAndGteNoLimit(endBlock[0].medianTime, (beginBlock[0] as any).medianTime); } else { - var blockchain = yield duniterServer.dal.peerDAL.query('SELECT `issuer`,`membersCount`,`monetaryMass`,`medianTime`,`dividend`,`number`,`nonce` FROM block WHERE `fork`=0 AND `medianTime` >= '+beginBlock[0].medianTime+' ORDER BY `medianTime` ASC'); + var blockchain = await dataFinder.getBlockWhereMedianTimeGtNoLimit((beginBlock[0] as any).medianTime); } // get blockchain timestamp @@ -66,7 +71,7 @@ module.exports = (req, res, next) => co(function *() { timestamp: blockchain[b].medianTime, dateTime: timestampToDatetime(blockchain[b].medianTime, true), membersCount: blockchain[b].membersCount, - monetaryMass: parseInt(blockchain[b].monetaryMass / 100), + monetaryMass: blockchain[b].monetaryMass / 100, monetaryMassPerMembers: parseFloat(((blockchain[b].monetaryMass / 100) / blockchain[b].membersCount).toFixed(2)), derivedChoiceMonetaryMass: 0 }); @@ -189,7 +194,7 @@ module.exports = (req, res, next) => co(function *() { type: type, position: 'left', ticks: { - callback: function(value, index, values) {//needed to change the scientific notation results from using logarithmic scale + callback: function(value:any, index:any, values:any) {//needed to change the scientific notation results from using logarithmic scale return Number(value.toString()); //pass tick values as a string into Number function }, max: maxYAxes, @@ -216,4 +221,4 @@ module.exports = (req, res, next) => co(function *() { // En cas d'exception, afficher le message res.status(500).send(`<pre>${e.stack || e.message}</pre>`); } -}) +} -- GitLab