Browse Source

- add more node info

- prettier bar chart for mempool stats using chart.js
fix-133-memory-crash
Dan Janosik 7 years ago
parent
commit
9da69bfb58
  1. 38
      app/rpcApi.js
  2. 13
      routes/baseActionsRouter.js
  3. 64
      views/mempool.pug
  4. 14
      views/node-info.pug

38
app/rpcApi.js

@ -85,6 +85,22 @@ function getMempoolInfo() {
});
}
function getUptimeSeconds() {
return new Promise(function(resolve, reject) {
client.cmd('uptime', function(err, result, resHeaders) {
if (err) {
console.log("Error 3218y6gr3986sdd: " + err);
reject(err);
return;
}
resolve(result);
});
});
}
function getMempoolStats() {
return new Promise(function(resolve, reject) {
client.cmd('getrawmempool', true, function(err, result, resHeaders) {
@ -97,6 +113,7 @@ function getMempoolStats() {
}
var compiledResult = {};
compiledResult.count = 0;
compiledResult.fee_0_5 = 0;
compiledResult.fee_6_10 = 0;
@ -107,35 +124,53 @@ function getMempoolStats() {
compiledResult.fee_101_150 = 0;
compiledResult.fee_151_max = 0;
compiledResult.totalfee_0_5 = 0;
compiledResult.totalfee_6_10 = 0;
compiledResult.totalfee_11_25 = 0;
compiledResult.totalfee_26_50 = 0;
compiledResult.totalfee_51_75 = 0;
compiledResult.totalfee_76_100 = 0;
compiledResult.totalfee_101_150 = 0;
compiledResult.totalfee_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++;
compiledResult.totalfee_0_5 += txMempoolInfo.modifiedfee;
} else if (feeRate <= 10) {
compiledResult.fee_6_10++;
compiledResult.totalfee_6_10 += txMempoolInfo.modifiedfee;
} else if (feeRate <= 25) {
compiledResult.fee_11_25++;
compiledResult.totalfee_11_25 += txMempoolInfo.modifiedfee;
} else if (feeRate <= 50) {
compiledResult.fee_26_50++;
compiledResult.totalfee_26_50 += txMempoolInfo.modifiedfee;
} else if (feeRate <= 75) {
compiledResult.fee_51_75++;
compiledResult.totalfee_51_75 += txMempoolInfo.modifiedfee;
} else if (feeRate <= 100) {
compiledResult.fee_76_100++;
compiledResult.totalfee_76_100 += txMempoolInfo.modifiedfee;
} else if (feeRate <= 150) {
compiledResult.fee_101_150++;
compiledResult.totalfee_101_150 += txMempoolInfo.modifiedfee;
} else {
compiledResult.fee_151_max++;
compiledResult.totalfee_151_max += txMempoolInfo.modifiedfee;
}
compiledResult.count++;
@ -422,5 +457,6 @@ module.exports = {
getBlockData: getBlockData,
getRawTransaction: getRawTransaction,
getRawTransactions: getRawTransactions,
getMempoolStats: getMempoolStats
getMempoolStats: getMempoolStats,
getUptimeSeconds: getUptimeSeconds
};

13
routes/baseActionsRouter.js

@ -60,16 +60,21 @@ router.get("/node-info", function(req, res) {
rpcApi.getNetworkInfo().then(function(getnetworkinfo) {
res.locals.getnetworkinfo = getnetworkinfo;
res.render("node-info");
rpcApi.getUptimeSeconds().then(function(uptimeSeconds) {
res.locals.uptimeSeconds = uptimeSeconds;
res.render("node-info");
}).catch(function(err) {
res.locals.userMessage = "Unable to connect to Bitcoin Node at " + env.bitcoind.host + ":" + env.bitcoind.port;
res.render("node-info");
});
}).catch(function(err) {
res.locals.userMessage = "Unable to connect to Bitcoin Node at " + env.bitcoind.host + ":" + env.bitcoind.port;
res.render("node-info");
});
}).catch(function(err) {
res.locals.userMessage = "Unable to connect to Bitcoin Node at " + env.bitcoind.host + ":" + env.bitcoind.port;

64
views/mempool.pug

@ -58,18 +58,62 @@ block content
- var feeBucketLabels = [ "0 - 5 sat/B", "6 - 10 sat/B", "11 - 25 sat/B", "26 - 50 sat/B", "51 - 75 sat/B", "76 - 100 sat/B", "101 - 150 sat/B", "151+ sat/B" ];
- var feeBucketTxCounts = [ mempoolstats.fee_0_5, mempoolstats.fee_6_10, mempoolstats.fee_11_25, mempoolstats.fee_26_50, mempoolstats.fee_51_75, mempoolstats.fee_76_100, mempoolstats.fee_101_150, mempoolstats.fee_151_max ];
- var totalfeeBuckets = [ mempoolstats.totalfee_0_5, mempoolstats.totalfee_6_10, mempoolstats.totalfee_11_25, mempoolstats.totalfee_26_50, mempoolstats.totalfee_51_75, mempoolstats.totalfee_76_100, mempoolstats.totalfee_101_150, mempoolstats.totalfee_151_max ];
- var bgColors = [ "bg-primary", "bg-success", "bg-info", "bg-warning", "bg-danger", "bg-primary progress-bar-striped", "bg-success progress-bar-striped", "bg-info progress-bar-striped" ];
table(class="table")
each feeBucketLabel, index in feeBucketLabels
tr
th(class=("properties-header " + bgColors[index])) #{feeBucketLabel}
td(class="monospace") #{feeBucketTxCounts[index].toLocaleString()}
canvas(id="mempoolBarChart", height="150")
script(src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.bundle.min.js")
script var feeBucketLabels = [];
each feeBucketLabel, index in feeBucketLabels
- var percentTx = Math.round(100 * feeBucketTxCounts[index] / getmempoolinfo.size).toLocaleString();
script feeBucketLabels.push(["#{feeBucketLabel}","#{feeBucketTxCounts[index]} tx (#{percentTx}%)","#{totalfeeBuckets[index].toLocaleString()} BTC"]);
div(class="progress")
each txCount, index in feeBucketTxCounts
- var percent = 100 * txCount / getmempoolinfo.size;
script var feeBucketTxCounts = [#{feeBucketTxCounts}];
div(class=("progress-bar " + bgColors[index]), role="progressbar", style=("width: " + percent + "%;"), aria-valuenow=percent, aria-valuemin="0", aria-valuemax="100")
span #{txCount}
script.
var ctx = document.getElementById("mempoolBarChart").getContext('2d');
var mempoolBarChart = new Chart(ctx, {
type: 'bar',
data: {
labels: feeBucketLabels,
datasets: [{
data: feeBucketTxCounts,
backgroundColor: [
'rgba(255, 99, 132, 0.3)',
'rgba(255, 159, 64, 0.3)',
'rgba(255, 206, 86, 0.3)',
'rgba(55, 212, 140, 0.3)',
'rgba(75, 192, 192, 0.3)',
'rgba(54, 162, 235, 0.3)',
'rgba(153, 102, 255, 0.3)',
'rgba(0, 0, 0, 0.3)',
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(255, 159, 64, 1)',
'rgba(255, 206, 86, 1)',
'rgba(55, 212, 140, 1)',
'rgba(75, 192, 192, 1)',
'rgba(54, 162, 235, 1)',
'rgba(153, 102, 255, 1)',
'rgba(0, 0, 0, 1)',
],
borderWidth: 2
}]
},
options: {
legend: {
display: false
},
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}]
}
}
});

14
views/node-info.pug

@ -25,6 +25,7 @@ block content
tr
th(class="table-active properties-header") Version
td(class="monospace") #{getnetworkinfo.version}
span(class="monospace") (#{getnetworkinfo.subversion})
tr
th(class="table-active properties-header") Protocol Version
td(class="monospace") #{getnetworkinfo.protocolversion}
@ -56,7 +57,18 @@ block content
if (getblockchaininfo.initialblockdownload)
span Initial block download progress #{(100 * getblockchaininfo.verificationprogress).toLocaleString()}%
else
span Up-to-date
span Synchronized with network
- var startTimeAgo = moment.duration(uptimeSeconds * 1000);
tr
th(class="table-active properties-header") Uptime
td(class="monospace") #{startTimeAgo.format()}
tr
th(class="table-active properties-header") Blockchain Size on Disk
td(class="monospace") #{getblockchaininfo.size_on_disk.toLocaleString()}
span (pruned: #{getblockchaininfo.pruned})
tr
th(class="table-active properties-header") Warnings
td(class="monospace") #{getblockchaininfo.warnings}

Loading…
Cancel
Save