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