diff --git a/app.js b/app.js index de54c84..3a800ce 100755 --- a/app.js +++ b/app.js @@ -136,6 +136,62 @@ function logNetworkStats() { } } +function logBlockStats() { + if (global.influxdb) { + if (global.blockStatsStatus == null) { + global.blockStatsStatus = {currentBlock:-1}; + } + + coreApi.getBlockchainInfo().then(function(getblockchaininfo) { + var blockHeights = []; + if (getblockchaininfo.blocks) { + for (var i = 0; i < 5; i++) { + blockHeights.push(getblockchaininfo.blocks - i); + } + } + + coreApi.getBlocksByHeight(blockHeights).then(function(blocks) { + var points = []; + + for (var i = 0; i < blocks.length; i++) { + var block = blocks[i]; + + var totalfees = new Decimal(parseFloat(block.totalFees)); + var blockreward = new Decimal(parseFloat(global.coinConfig.blockRewardFunction(block.height))); + var timestamp = new Date(block.time * 1000); + + var blockInfo = { + strippedsize:block.strippedsize, + size:block.size, + weight:block.weight, + version:block.version, + nonce:block.nonce, + txcount:block.nTx, + totalfees:totalfees.toNumber(), + avgfee:(block.totalFees / block.nTx), + blockreward:blockreward.toNumber(), + timemediantimediff:(block.time - block.mediantime), + feeratio:totalfees.dividedBy(totalfees.plus(blockreward)).toNumber() + }; + + for (var key in blockInfo) { + points.push({measurement:`${global.coinConfig.name.toLowerCase()}.blocks.${key}`, fields:{value:blockInfo[key]}, timestamp:timestamp}); + } + + //console.log("block: " + block.height + ": " + JSON.stringify(blockInfo, null, 4)); + //console.log("points: " + JSON.stringify(points, null, 4)); + } + + global.influxdb.writePoints(points).catch(err => { + console.error(`Error saving data to InfluxDB: ${err.stack}`); + }); + }); + }).catch(function(err) { + console.log(`Error logging block stats: ${err}`); + }); + } +} + app.runOnStartup = function() { global.config = config; @@ -171,11 +227,6 @@ app.runOnStartup = function() { coreApi.getNetworkInfo().then(function(getnetworkinfo) { console.log("Connected via RPC to node. Basic info: version=" + getnetworkinfo.version + ", subversion=" + getnetworkinfo.subversion + ", protocolversion=" + getnetworkinfo.protocolversion + ", services=" + getnetworkinfo.localservices); - }).catch(function(err) { - console.log("Error 923grf20fge: " + err + ", error json: " + JSON.stringify(err)); - }); - } - if (config.credentials.influxdb.active) { global.influxdb = new Influx.InfluxDB(config.credentials.influxdb); @@ -183,6 +234,13 @@ app.runOnStartup = function() { logNetworkStats(); setInterval(logNetworkStats, 1 * 60000); + + logBlockStats(); + setInterval(logBlockStats, 5 * 60000); + } + }).catch(function(err) { + console.log("Error 923grf20fge: " + err + ", error json: " + JSON.stringify(err)); + }); } if (config.donationAddresses) {