2 changed files with 130 additions and 92 deletions
@ -1,133 +1,158 @@ |
|||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||
|
|
||||
|
'use strict'; |
||||
|
|
||||
|
var _ = require('lodash'); |
||||
var mongodb = require('mongodb'); |
var mongodb = require('mongodb'); |
||||
var moment = require('moment'); |
var moment = require('moment'); |
||||
var async = require('async'); |
var async = require('async'); |
||||
|
var config = require('../config'); |
||||
|
|
||||
var otherDate; |
|
||||
|
|
||||
//trying to parse optional parameter to get stats on any given date
|
|
||||
try { |
|
||||
otherDate = process.argv[2] && moment(process.argv[2]).isValid() ? moment(process.argv[2]) : null; |
|
||||
} catch (e) { |
|
||||
console.log('Enter the date in the format YYYY-MM-DD.'); |
|
||||
} |
|
||||
|
|
||||
var Today = otherDate || moment(); |
var c = config.storageOpts.mongoDb; |
||||
var TotalTxLivenet = 0; |
var url = 'mongodb://' + (c.host || 'localhost') + ':' + (c.port || 27017) + '/bws'; |
||||
var TotalAmountLivenet = 0; |
|
||||
var TotalNewWalletsLivenet = 0; |
|
||||
|
|
||||
var TotalTxTestnet = 0; |
var startDate = moment(); |
||||
var TotalAmountTestnet = 0; |
var endDate = moment(); |
||||
var TotalNewWalletsTestnet = 0; |
|
||||
|
|
||||
|
var stats = {}; |
||||
var wallets = {}; |
var wallets = {}; |
||||
|
var bwsStats = {}; |
||||
|
|
||||
|
bwsStats.cleanUp = function() { |
||||
|
stats = { |
||||
|
'livenet': {}, |
||||
|
'testnet': {} |
||||
|
}; |
||||
|
}; |
||||
|
|
||||
var IsToday = function(date) { |
|
||||
if (!date) return false; |
|
||||
var date = moment(date * 1000); |
|
||||
return (date >= Today.startOf('day') && date <= Today.endOf('day')); |
|
||||
} |
|
||||
|
|
||||
var TotalTxpForToday = function(data) { |
bwsStats.AddingWalletToCache = function(data) { |
||||
if (!data) return; |
if (!data) return; |
||||
|
wallets[data.id] = data.network; |
||||
if (!wallets[data.walletId]) { |
|
||||
console.log('Walletid not found! ', data.walletId); |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
if (!IsToday(data.createdOn)) return; |
|
||||
|
|
||||
if (wallets[data.walletId] == 'livenet') { |
|
||||
TotalTxLivenet++; |
|
||||
TotalAmountLivenet = TotalAmountLivenet + data.amount; |
|
||||
} else if (wallets[data.walletId] == 'testnet') { |
|
||||
TotalTxTestnet++; |
|
||||
TotalAmountTestnet = TotalAmountTestnet + data.amount; |
|
||||
} else { |
|
||||
console.log('Invalid network ', wallets[data.walletId]); |
|
||||
} |
|
||||
}; |
}; |
||||
|
|
||||
var TotalNewWalletForToday = function(data) { |
bwsStats.TotalNewWallets = function(data) { |
||||
if (!data) return; |
if (!data) return; |
||||
|
var day = moment(data.createdOn * 1000).format('YYYYMMDD'); |
||||
if (!wallets[data.id]) { |
if (!stats[data.network][day]) { |
||||
wallets[data.id] = data.network; |
stats[data.network][day] = { |
||||
} |
totalTx: 0, |
||||
if (!IsToday(data.createdOn)) return; |
totalAmount: 0, |
||||
|
totalNewWallets: 0 |
||||
if (data.network == 'livenet') { |
}; |
||||
TotalNewWalletsLivenet++; |
|
||||
} else if (data.network == 'testnet') { |
|
||||
TotalNewWalletsTestnet++; |
|
||||
} else { |
|
||||
console.log('Invalid data ', data); |
|
||||
console.log('Invalid network ', data.network); |
|
||||
} |
} |
||||
|
stats[data.network][day].totalNewWallets++; |
||||
}; |
}; |
||||
|
|
||||
var PrintStats = function() { |
bwsStats.TotalTxps = function(data) { |
||||
console.log('Stats for date : ', Today.format("YYYY-MM-DD")); |
if (!data) return; |
||||
console.log(' '); |
var day = moment(data.createdOn * 1000).format('YYYYMMDD'); |
||||
console.log('Livenet stats--------------------------------- ') |
var network = wallets[data.walletId]; |
||||
console.log('New wallets : ', TotalNewWalletsLivenet); |
if (!stats[network][day]) { |
||||
console.log('Total tx : ', TotalTxLivenet); |
stats[network][day] = { |
||||
console.log('Total amount in tx (BTC) : ', TotalAmountLivenet * 1 / 1e8); |
totalTx: 0, |
||||
console.log(' '); |
totalAmount: 0, |
||||
console.log('Testnet stats--------------------------------- ') |
totalNewWallets: 0 |
||||
console.log('New wallets : ', TotalNewWalletsTestnet); |
}; |
||||
console.log('Total tx : ', TotalTxTestnet); |
} |
||||
console.log('Total amount in tx (BTC) : ', TotalAmountTestnet * 1 / 1e8); |
stats[network][day].totalTx++; |
||||
|
stats[network][day].totalAmount += data.amount; |
||||
}; |
}; |
||||
|
|
||||
var ProcessData = function(DB, cb) { |
bwsStats.ProcessData = function(DB, cb) { |
||||
ProccesWallets(DB, function() { |
bwsStats.ProccesWallets(DB, function() { |
||||
ProccesTxs(DB, cb); |
bwsStats.ProccesNewWallets(DB, function() { |
||||
|
bwsStats.ProccesTxs(DB, function() { |
||||
|
DB.close(); |
||||
|
cb(); |
||||
|
}); |
||||
|
}); |
||||
}); |
}); |
||||
|
|
||||
}; |
}; |
||||
|
|
||||
var ProccesWallets = function(DB, cb) { |
bwsStats.ProccesWallets = function(DB, cb) { |
||||
var collection = DB.collection('wallets'); |
var collection = DB.collection('wallets'); |
||||
|
|
||||
collection.find({}).toArray(function(err, items) { |
collection.find({}).toArray(function(err, items) { |
||||
for (var i = 0; i < items.length; i++) { |
if (err) { |
||||
TotalNewWalletForToday(items[i]); |
console.log('Error.', err); |
||||
}; |
return cb(err); |
||||
|
} |
||||
|
|
||||
|
items.forEach(function(it) { |
||||
|
bwsStats.AddingWalletToCache(it); |
||||
|
}); |
||||
cb(); |
cb(); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
var ProccesTxs = function(DB, cb) { |
bwsStats.ProccesNewWallets = function(DB, cb) { |
||||
var collection = DB.collection('txs'); |
var collection = DB.collection('wallets'); |
||||
|
var start = Math.floor(startDate.startOf('day').valueOf() / 1000); |
||||
|
var end = Math.floor(endDate.endOf('day').valueOf() / 1000); |
||||
|
|
||||
collection.find({}).toArray(function(err, items) { |
collection.find({ |
||||
for (var i = 0; i < items.length; i++) { |
createdOn: { |
||||
TotalTxpForToday(items[i]); |
$gt: start, |
||||
}; |
$lt: end |
||||
|
} |
||||
|
}).toArray(function(err, items) { |
||||
|
if (err) { |
||||
|
console.log('Error.', err); |
||||
|
return cb(err); |
||||
|
} |
||||
|
items.forEach(function(it) { |
||||
|
bwsStats.TotalNewWallets(it); |
||||
|
}); |
||||
cb(); |
cb(); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
|
bwsStats.ProccesTxs = function(DB, cb) { |
||||
|
var collection = DB.collection('txs'); |
||||
|
var start = Math.floor(startDate.startOf('day').valueOf() / 1000); |
||||
|
var end = Math.floor(endDate.endOf('day').valueOf() / 1000); |
||||
|
|
||||
|
collection.find({ |
||||
|
createdOn: { |
||||
|
$gt: start, |
||||
|
$lt: end |
||||
|
} |
||||
|
}).toArray( |
||||
|
function(err, items) { |
||||
|
if (err) { |
||||
|
console.log('Error.', err); |
||||
|
return cb(err); |
||||
|
} else { |
||||
|
items.forEach(function(it) { |
||||
|
bwsStats.TotalTxps(it); |
||||
|
}); |
||||
|
} |
||||
|
cb(); |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
var url = 'mongodb://localhost:27017/bws'; |
bwsStats.getStats = function(opts, cb) { |
||||
mongodb.MongoClient.connect(url, function(err, db) { |
if (opts) { |
||||
if (err) { |
startDate = moment(opts.from); |
||||
console.log('Unable to connect to the mongoDB server. Error:', err); |
endDate = moment(opts.to); |
||||
process.exit(code = 1); |
|
||||
} |
} |
||||
console.log('Connection established to ', url); |
bwsStats.cleanUp(); |
||||
ProcessData(db, function(err) { |
|
||||
|
mongodb.MongoClient.connect(url, function(err, db) { |
||||
if (err) { |
if (err) { |
||||
console.log('error ', err); |
console.log('Unable to connect to the mongoDB server. Error:', err); |
||||
process.exit(code = 1); |
return cb(err, null); |
||||
} |
} |
||||
PrintStats(); |
console.log('Connection established to ', url); |
||||
db.close(); |
bwsStats.ProcessData(db, function(err) { |
||||
process.exit(code = 0); |
if (err) { |
||||
|
console.log('Error.', err); |
||||
|
return cb(err, null); |
||||
|
} |
||||
|
cb(null, stats); |
||||
|
}); |
||||
}); |
}); |
||||
}); |
}; |
||||
|
|
||||
|
module.exports = bwsStats; |
||||
|
Loading…
Reference in new issue