From ada2059c3121a198c1c823a059570c71eaf33351 Mon Sep 17 00:00:00 2001 From: Dan Janosik Date: Sun, 22 Oct 2017 00:55:45 -0400 Subject: [PATCH] include breakdown of transaction counts by fee level on mempool info page --- app/rpcApi.js | 64 ++++++++++++++++++++++++++- routes/baseActionsRouter.js | 8 +++- views/layout.pug | 2 +- views/mempool-info.pug | 18 -------- views/mempool.pug | 87 +++++++++++++++++++++++++++++++++++++ 5 files changed, 157 insertions(+), 22 deletions(-) delete mode 100644 views/mempool-info.pug create mode 100644 views/mempool.pug diff --git a/app/rpcApi.js b/app/rpcApi.js index 2ff9f69..dfa69a3 100644 --- a/app/rpcApi.js +++ b/app/rpcApi.js @@ -59,6 +59,67 @@ function getMempoolInfo() { }); } +function getMempoolStats() { + return new Promise(function(resolve, reject) { + client.cmd('getrawmempool', true, function(err, result, resHeaders) { + if (err) { + return console.log("Error 428thwre0ufg: " + err); + } + + console.log("abc: " + JSON.stringify(result).substring(0, 100)); + + var compiledResult = {}; + compiledResult.count = 0; + compiledResult.fee_0_5 = 0; + compiledResult.fee_6_10 = 0; + compiledResult.fee_11_25 = 0; + compiledResult.fee_26_50 = 0; + compiledResult.fee_51_75 = 0; + compiledResult.fee_76_100 = 0; + compiledResult.fee_101_150 = 0; + compiledResult.fee_151_max = 0; + + var totalFee = 0; + for (var txid in result) { + var txMempoolInfo = result[txid]; + totalFee += txMempoolInfo.modifiedfee; + var feeRate = Math.round(txMempoolInfo.modifiedfee * 100000000 / txMempoolInfo.size); + + if (feeRate <= 5) { + compiledResult.fee_0_5++; + + } else if (feeRate <= 10) { + compiledResult.fee_6_10++; + + } else if (feeRate <= 25) { + compiledResult.fee_11_25++; + + } else if (feeRate <= 50) { + compiledResult.fee_26_50++; + + } else if (feeRate <= 75) { + compiledResult.fee_51_75++; + + } else if (feeRate <= 100) { + compiledResult.fee_76_100++; + + } else if (feeRate <= 150) { + compiledResult.fee_101_150++; + + } else { + compiledResult.fee_151_max++; + } + + compiledResult.count++; + } + + compiledResult.totalFee = totalFee; + + resolve(compiledResult); + }); + }); +} + function getBlockByHeight(blockHeight) { console.log("getBlockByHeight: " + blockHeight); @@ -310,5 +371,6 @@ module.exports = { getTransactionInputs: getTransactionInputs, getBlockData: getBlockData, getRawTransaction: getRawTransaction, - getRawTransactions: getRawTransactions + getRawTransactions: getRawTransactions, + getMempoolStats: getMempoolStats }; \ No newline at end of file diff --git a/routes/baseActionsRouter.js b/routes/baseActionsRouter.js index be85862..c20a714 100644 --- a/routes/baseActionsRouter.js +++ b/routes/baseActionsRouter.js @@ -58,13 +58,17 @@ router.get("/node-info", function(req, res) { }); }); -router.get("/mempool-info", function(req, res) { +router.get("/mempool", function(req, res) { var client = global.client; rpcApi.getMempoolInfo().then(function(getmempoolinfo) { res.locals.getmempoolinfo = getmempoolinfo; - res.render("mempool-info"); + rpcApi.getMempoolStats().then(function(mempoolstats) { + res.locals.mempoolstats = mempoolstats; + + res.render("mempool"); + }); }); }); diff --git a/views/layout.pug b/views/layout.pug index 25db30b..6a1d6e9 100644 --- a/views/layout.pug +++ b/views/layout.pug @@ -41,7 +41,7 @@ html div(class="container") a(href="/") Home a(href="/node-info") Node Info - a(href="/mempool-info") Mempool Info + a(href="/mempool") Mempool Info diff --git a/views/mempool-info.pug b/views/mempool-info.pug deleted file mode 100644 index 0b3e878..0000000 --- a/views/mempool-info.pug +++ /dev/null @@ -1,18 +0,0 @@ -extends layout - -block headContent - title Mempool Info - -block content - ol(class="breadcrumb") - li(class="breadcrumb-item") - a(href="/") - strong #{host} - span :#{port} - li(class="breadcrumb-item active") - a(href="/mempool-info") Mempool Info - - h1 Mempool Info - hr - - include includes/getmempoolinfo-table.pug \ No newline at end of file diff --git a/views/mempool.pug b/views/mempool.pug new file mode 100644 index 0000000..fde7e9c --- /dev/null +++ b/views/mempool.pug @@ -0,0 +1,87 @@ +extends layout + +block headContent + title Mempool Info + +block content + ol(class="breadcrumb") + li(class="breadcrumb-item") + a(href="/") + strong #{host} + span :#{port} + li(class="breadcrumb-item active") + a(href="/mempool-info") Mempool Info + + h1 Mempool Info + hr + + table(class="table") + tr + th(class="table-active properties-header") Transaction Count + td #{getmempoolinfo.size.toLocaleString()} + tr + - var scales = [ {val:1000000000, name:"GB"}, {val:1000000, name:"MB"}, {val:1000, name:"kB"} ]; + - var scaleDone = false; + th(class="table-active properties-header") Size + td + span #{getmempoolinfo.bytes.toLocaleString()} bytes + each item in scales + if (!scaleDone) + - var fraction = Math.floor(getmempoolinfo.bytes / item.val); + if (fraction >= 1) + - scaleDone = true; + span(class="text-muted") (#{fraction} #{item.name}) + tr + - var scales = [ {val:1000000000, name:"GB"}, {val:1000000, name:"MB"}, {val:1000, name:"kB"} ]; + - var scaleDone = false; + th(class="table-active properties-header") Size + td + span #{getmempoolinfo.usage.toLocaleString()} bytes + each item in scales + if (!scaleDone) + - var fraction = Math.floor(getmempoolinfo.usage / item.val); + if (fraction >= 1) + - scaleDone = true; + span(class="text-muted") (#{fraction} #{item.name}) + tr + th(class="table-active properties-header") Max Size + td #{getmempoolinfo.maxmempool.toLocaleString()} + tr + th(class="table-active properties-header") Min Fee + td #{getmempoolinfo.mempoolminfee.toLocaleString()} + tr + th(class="table-active properties-header") Total Fees + td #{mempoolstats.totalFee.toLocaleString()} + + + h4 Transaction count by fee level + hr + + if (false) + #{JSON.stringify(mempoolstats)} + + table(class="table") + tr + th(class="table-active properties-header") 0 - 5 sat/B + td #{mempoolstats.fee_0_5.toLocaleString()} + tr + th(class="table-active properties-header") 6 - 10 sat/B + td #{mempoolstats.fee_6_10.toLocaleString()} + tr + th(class="table-active properties-header") 11 - 25 sat/B + td #{mempoolstats.fee_11_25.toLocaleString()} + tr + th(class="table-active properties-header") 26 - 50 sat/B + td #{mempoolstats.fee_26_50.toLocaleString()} + tr + th(class="table-active properties-header") 51 - 75 sat/B + td #{mempoolstats.fee_51_75.toLocaleString()} + tr + th(class="table-active properties-header") 76 - 100 sat/B + td #{mempoolstats.fee_76_100.toLocaleString()} + tr + th(class="table-active properties-header") 101 - 150 sat/B + td #{mempoolstats.fee_101_150.toLocaleString()} + tr + th(class="table-active properties-header") 151+ sat/B + td #{mempoolstats.fee_151_max.toLocaleString()} \ No newline at end of file