From d23075cadc8c5313acc1404fdf2296731daeb080 Mon Sep 17 00:00:00 2001 From: Matias Pando Date: Mon, 4 May 2015 14:22:56 -0300 Subject: [PATCH 1/8] Refactoring --- lib/stats.js | 82 ++++++++++++++++++++++++---------------------------- 1 file changed, 37 insertions(+), 45 deletions(-) diff --git a/lib/stats.js b/lib/stats.js index afed3bc..33d5351 100644 --- a/lib/stats.js +++ b/lib/stats.js @@ -1,5 +1,8 @@ #!/usr/bin/env node +'use strict'; + +var _ = require('lodash'); var mongodb = require('mongodb'); var moment = require('moment'); var async = require('async'); @@ -14,17 +17,22 @@ try { } var Today = otherDate || moment(); -var TotalTxLivenet = 0; -var TotalAmountLivenet = 0; -var TotalNewWalletsLivenet = 0; -var TotalTxTestnet = 0; -var TotalAmountTestnet = 0; -var TotalNewWalletsTestnet = 0; +var stats = { + 'livenet': { + totalTx: 0, + totalAmount: 0, + totalNewWallets: 0 + }, + 'testnet': { + totalTx: 0, + totalAmount: 0, + totalNewWallets: 0 + } +} var wallets = {}; - var IsToday = function(date) { if (!date) return false; var date = moment(date * 1000); @@ -34,61 +42,44 @@ var IsToday = function(date) { var TotalTxpForToday = 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]); - } + var network = wallets[data.walletId]; + stats[network].totalTx++; + stats[network].totalAmount += data.amount; +}; + + +var AddingWalletToCache = function(data) { + if (!data) return; + wallets[data.id] = data.network; }; var TotalNewWalletForToday = function(data) { if (!data) return; - if (!wallets[data.id]) { - wallets[data.id] = data.network; - } if (!IsToday(data.createdOn)) return; + stats[data.network].totalNewWallets++; - if (data.network == 'livenet') { - TotalNewWalletsLivenet++; - } else if (data.network == 'testnet') { - TotalNewWalletsTestnet++; - } else { - console.log('Invalid data ', data); - console.log('Invalid network ', data.network); - } }; 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); + + for (var s in stats) { + console.log(' '); + console.log(s + ' stats--------------------------------- ') + console.log('New wallets : ', stats[s].totalNewWallets); + console.log('Total tx : ', stats[s].totalTx); + console.log('Total amount in tx (BTC) : ', stats[s].totalAmount * 1 / 1e8); + } }; var ProcessData = function(DB, cb) { ProccesWallets(DB, function() { ProccesTxs(DB, cb); }); - }; var ProccesWallets = function(DB, cb) { @@ -96,6 +87,7 @@ var ProccesWallets = function(DB, cb) { collection.find({}).toArray(function(err, items) { for (var i = 0; i < items.length; i++) { + AddingWalletToCache(items[i]); TotalNewWalletForToday(items[i]); }; cb(); @@ -118,16 +110,16 @@ 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); + process.exit(1); } console.log('Connection established to ', url); ProcessData(db, function(err) { if (err) { console.log('error ', err); - process.exit(code = 1); + process.exit(1); } PrintStats(); db.close(); - process.exit(code = 0); + process.exit(0); }); }); From efbbc21a91d1a1396744f154d1bacd7b1491ca2c Mon Sep 17 00:00:00 2001 From: Matias Pando Date: Mon, 4 May 2015 14:26:03 -0300 Subject: [PATCH 2/8] Moving stats.js to /scripts --- {lib => scripts}/stats.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {lib => scripts}/stats.js (100%) diff --git a/lib/stats.js b/scripts/stats.js similarity index 100% rename from lib/stats.js rename to scripts/stats.js From ee3e07eec72b91fac2f47529ebeeb5b586d3017e Mon Sep 17 00:00:00 2001 From: Matias Pando Date: Mon, 4 May 2015 17:36:49 -0300 Subject: [PATCH 3/8] Adding stats on bws --- lib/expressapp.js | 10 +++++++ scripts/stats.js | 67 ++++++++++++++++++++++++++--------------------- 2 files changed, 47 insertions(+), 30 deletions(-) diff --git a/lib/expressapp.js b/lib/expressapp.js index 4b7dad2..7e88863 100644 --- a/lib/expressapp.js +++ b/lib/expressapp.js @@ -9,6 +9,7 @@ var querystring = require('querystring'); var bodyParser = require('body-parser') var WalletService = require('./server'); +var stats = require('../scripts/stats'); log.disableColor(); log.debug = log.verbose; @@ -315,10 +316,19 @@ ExpressApp.prototype.start = function(opts, cb) { }); }); + router.get('/v1/stats/', function(req, res) { + var data = stats.getStats(function(err, data) { + if (err) return returnError(err, res, req); + res.json(data); + res.end(); + }); + }); + this.app.use(opts.basePath || '/bws/api', router); WalletService.initialize(opts, cb); + }; module.exports = ExpressApp; diff --git a/scripts/stats.js b/scripts/stats.js index 33d5351..edfc192 100644 --- a/scripts/stats.js +++ b/scripts/stats.js @@ -6,6 +6,7 @@ var _ = require('lodash'); var mongodb = require('mongodb'); var moment = require('moment'); var async = require('async'); +var config = require('../config'); var otherDate; @@ -16,6 +17,9 @@ try { console.log('Enter the date in the format YYYY-MM-DD.'); } +var c = config.storageOpts.mongoDb; +var url = 'mongodb://' + (c.host || 'localhost') + ':' + (c.port ||  27017) + '/bws'; + var Today = otherDate || moment(); var stats = { @@ -33,16 +37,18 @@ var stats = { var wallets = {}; -var IsToday = function(date) { +var bwsStats = {}; + +bwsStats.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.TotalTxpForToday = function(data) { if (!data) return; - if (!IsToday(data.createdOn)) return; + if (!bwsStats.IsToday(data.createdOn)) return; var network = wallets[data.walletId]; stats[network].totalTx++; @@ -50,20 +56,20 @@ var TotalTxpForToday = function(data) { }; -var AddingWalletToCache = function(data) { +bwsStats.AddingWalletToCache = function(data) { if (!data) return; wallets[data.id] = data.network; }; -var TotalNewWalletForToday = function(data) { +bwsStats.TotalNewWalletForToday = function(data) { if (!data) return; - if (!IsToday(data.createdOn)) return; + if (!bwsStats.IsToday(data.createdOn)) return; stats[data.network].totalNewWallets++; }; -var PrintStats = function() { +bwsStats.PrintStats = function() { console.log('Stats for date : ', Today.format("YYYY-MM-DD")); console.log(' '); @@ -76,50 +82,51 @@ var PrintStats = function() { } }; -var ProcessData = function(DB, cb) { - ProccesWallets(DB, function() { - ProccesTxs(DB, cb); +bwsStats.ProcessData = function(DB, cb) { + bwsStats.ProccesWallets(DB, function() { + bwsStats.ProccesTxs(DB, 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++) { - AddingWalletToCache(items[i]); - TotalNewWalletForToday(items[i]); + bwsStats.AddingWalletToCache(items[i]); + bwsStats.TotalNewWalletForToday(items[i]); }; cb(); }); }; -var ProccesTxs = function(DB, cb) { +bwsStats.ProccesTxs = function(DB, cb) { var collection = DB.collection('txs'); collection.find({}).toArray(function(err, items) { for (var i = 0; i < items.length; i++) { - TotalTxpForToday(items[i]); + bwsStats.TotalTxpForToday(items[i]); }; 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(1); - } - console.log('Connection established to ', url); - ProcessData(db, function(err) { +bwsStats.getStats = function(cb) { + mongodb.MongoClient.connect(url, function(err, db) { if (err) { - console.log('error ', err); - process.exit(1); + console.log('Unable to connect to the mongoDB server. Error:', err); + return; } - PrintStats(); - db.close(); - process.exit(0); + console.log('Connection established to ', url); + bwsStats.ProcessData(db, function(err) { + db.close(); + if (err) { + cb(err, null); + return; + } + cb(null, stats) + }); }); -}); +} + +module.exports = bwsStats; From 2873fd8e406e20716b6623ce21150d41160effb4 Mon Sep 17 00:00:00 2001 From: Matias Pando Date: Thu, 7 May 2015 17:07:29 -0300 Subject: [PATCH 4/8] Splitting stats by date --- lib/expressapp.js | 7 ++- scripts/stats.js | 155 +++++++++++++++++++++++++++------------------- 2 files changed, 95 insertions(+), 67 deletions(-) diff --git a/lib/expressapp.js b/lib/expressapp.js index 7e88863..fa553f7 100644 --- a/lib/expressapp.js +++ b/lib/expressapp.js @@ -316,8 +316,11 @@ ExpressApp.prototype.start = function(opts, cb) { }); }); - router.get('/v1/stats/', function(req, res) { - var data = stats.getStats(function(err, data) { + router.get('/v1/stats/:from/:to/', function(req, res) { + var opts = {}; + opts.from = req.params['from']; + opts.to = req.params['to']; + var data = stats.getStats(opts, function(err, data) { if (err) return returnError(err, res, req); res.json(data); res.end(); diff --git a/scripts/stats.js b/scripts/stats.js index edfc192..04cdf39 100644 --- a/scripts/stats.js +++ b/scripts/stats.js @@ -8,53 +8,26 @@ 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 c = config.storageOpts.mongoDb; var url = 'mongodb://' + (c.host || 'localhost') + ':' + (c.port ||  27017) + '/bws'; -var Today = otherDate || moment(); - -var stats = { - 'livenet': { - totalTx: 0, - totalAmount: 0, - totalNewWallets: 0 - }, - 'testnet': { - totalTx: 0, - totalAmount: 0, - totalNewWallets: 0 - } -} +var startDate = moment(); +var endDate = moment(); + +var stats = {}; var wallets = {}; var bwsStats = {}; -bwsStats.IsToday = function(date) { - if (!date) return false; - var date = moment(date * 1000); - return (date >= Today.startOf('day') && date <= Today.endOf('day')); +bwsStats.cleanUp = function() { + stats = { + 'livenet': {}, + 'testnet': {} + }; } -bwsStats.TotalTxpForToday = function(data) { - if (!data) return; - - if (!bwsStats.IsToday(data.createdOn)) return; - - var network = wallets[data.walletId]; - stats[network].totalTx++; - stats[network].totalAmount += data.amount; -}; - bwsStats.AddingWalletToCache = function(data) { if (!data) return; @@ -63,55 +36,107 @@ bwsStats.AddingWalletToCache = function(data) { bwsStats.TotalNewWalletForToday = function(data) { if (!data) return; - - if (!bwsStats.IsToday(data.createdOn)) return; - stats[data.network].totalNewWallets++; - + 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++; }; -bwsStats.PrintStats = function() { - console.log('Stats for date : ', Today.format("YYYY-MM-DD")); - console.log(' '); - - for (var s in stats) { - console.log(' '); - console.log(s + ' stats--------------------------------- ') - console.log('New wallets : ', stats[s].totalNewWallets); - console.log('Total tx : ', stats[s].totalTx); - console.log('Total amount in tx (BTC) : ', stats[s].totalAmount * 1 / 1e8); +bwsStats.TotalTxpForToday = 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; }; + bwsStats.ProcessData = function(DB, cb) { bwsStats.ProccesWallets(DB, function() { - bwsStats.ProccesTxs(DB, cb); + bwsStats.ProccesNewWallets(DB, function() { + bwsStats.ProccesTxs(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++) { - bwsStats.AddingWalletToCache(items[i]); - bwsStats.TotalNewWalletForToday(items[i]); - }; + if (err) { + console.log('Error.', err); + } + + items.forEach(function(it) { + bwsStats.AddingWalletToCache(it); + }); cb(); }); }; -bwsStats.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++) { - bwsStats.TotalTxpForToday(items[i]); - }; + collection.find({ + createdOn: { + $gt: start, + $lt: end + } + }).toArray(function(err, items) { + if (err) { + console.log('Error.', err); + } + items.forEach(function(it) { + bwsStats.TotalNewWalletForToday(it); + }); cb(); }); }; -bwsStats.getStats = function(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 + } + }, + function(err, items) { + if (err || !items) { + console.log("No items found."); + } else { + items.forEach(function(it) { + bwsStats.TotalTxpForToday(it); + }); + } + cb(); + }); +}; + +bwsStats.getStats = function(opts, cb) { + if (opts) { + startDate = moment(opts.from); + endDate = moment(opts.to); + } + bwsStats.cleanUp(); + mongodb.MongoClient.connect(url, function(err, db) { if (err) { console.log('Unable to connect to the mongoDB server. Error:', err); @@ -119,12 +144,12 @@ bwsStats.getStats = function(cb) { } console.log('Connection established to ', url); bwsStats.ProcessData(db, function(err) { - db.close(); if (err) { + console.log('Error.', err); cb(err, null); return; } - cb(null, stats) + cb(null, stats); }); }); } From ade91a561233e8324d9430a9cb65252262c66a47 Mon Sep 17 00:00:00 2001 From: Matias Pando Date: Thu, 7 May 2015 19:21:09 -0300 Subject: [PATCH 5/8] Fixing minor issues --- lib/expressapp.js | 2 +- scripts/stats.js | 38 ++++++++++++++++++++------------------ 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/lib/expressapp.js b/lib/expressapp.js index fa553f7..75fc2e5 100644 --- a/lib/expressapp.js +++ b/lib/expressapp.js @@ -320,7 +320,7 @@ ExpressApp.prototype.start = function(opts, cb) { var opts = {}; opts.from = req.params['from']; opts.to = req.params['to']; - var data = stats.getStats(opts, function(err, data) { + stats.getStats(opts, function(err, data) { if (err) return returnError(err, res, req); res.json(data); res.end(); diff --git a/scripts/stats.js b/scripts/stats.js index 04cdf39..c647baf 100644 --- a/scripts/stats.js +++ b/scripts/stats.js @@ -16,9 +16,7 @@ var startDate = moment(); var endDate = moment(); var stats = {}; - var wallets = {}; - var bwsStats = {}; bwsStats.cleanUp = function() { @@ -26,7 +24,7 @@ bwsStats.cleanUp = function() { 'livenet': {}, 'testnet': {} }; -} +}; bwsStats.AddingWalletToCache = function(data) { @@ -34,7 +32,7 @@ bwsStats.AddingWalletToCache = function(data) { wallets[data.id] = data.network; }; -bwsStats.TotalNewWalletForToday = function(data) { +bwsStats.TotalNewWallets = function(data) { if (!data) return; var day = moment(data.createdOn * 1000).format('YYYYMMDD'); if (!stats[data.network][day]) { @@ -47,7 +45,7 @@ bwsStats.TotalNewWalletForToday = function(data) { stats[data.network][day].totalNewWallets++; }; -bwsStats.TotalTxpForToday = function(data) { +bwsStats.TotalTxps = function(data) { if (!data) return; var day = moment(data.createdOn * 1000).format('YYYYMMDD'); var network = wallets[data.walletId]; @@ -62,21 +60,22 @@ bwsStats.TotalTxpForToday = function(data) { stats[network][day].totalAmount += data.amount; }; - bwsStats.ProcessData = function(DB, cb) { bwsStats.ProccesWallets(DB, function() { bwsStats.ProccesNewWallets(DB, function() { - bwsStats.ProccesTxs(DB, cb); + bwsStats.ProccesTxs(DB, function() { + cb(); + }); }); }); }; - bwsStats.ProccesWallets = function(DB, cb) { var collection = DB.collection('wallets'); collection.find({}).toArray(function(err, items) { if (err) { console.log('Error.', err); + cb(err); } items.forEach(function(it) { @@ -99,9 +98,10 @@ bwsStats.ProccesNewWallets = function(DB, cb) { }).toArray(function(err, items) { if (err) { console.log('Error.', err); + cb(err); } items.forEach(function(it) { - bwsStats.TotalNewWalletForToday(it); + bwsStats.TotalNewWallets(it); }); cb(); }); @@ -113,17 +113,18 @@ bwsStats.ProccesTxs = function(DB, cb) { var end = Math.floor(endDate.endOf('day').valueOf() / 1000); collection.find({ - createdOn: { - $gt: start, - $lt: end - } - }, + createdOn: { + $gt: start, + $lt: end + } + }).toArray( function(err, items) { - if (err || !items) { - console.log("No items found."); + if (err) { + console.log('Error.', err); + cb(err); } else { items.forEach(function(it) { - bwsStats.TotalTxpForToday(it); + bwsStats.TotalTxps(it); }); } cb(); @@ -140,6 +141,7 @@ bwsStats.getStats = function(opts, cb) { mongodb.MongoClient.connect(url, function(err, db) { if (err) { console.log('Unable to connect to the mongoDB server. Error:', err); + cb(err, null); return; } console.log('Connection established to ', url); @@ -152,6 +154,6 @@ bwsStats.getStats = function(opts, cb) { cb(null, stats); }); }); -} +}; module.exports = bwsStats; From 7f4bd311fe79ce322f640adec51ae0c1c2b7f58b Mon Sep 17 00:00:00 2001 From: Matias Pando Date: Tue, 12 May 2015 11:22:59 -0300 Subject: [PATCH 6/8] Closing db connection --- scripts/stats.js | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/stats.js b/scripts/stats.js index c647baf..6111994 100644 --- a/scripts/stats.js +++ b/scripts/stats.js @@ -64,6 +64,7 @@ bwsStats.ProcessData = function(DB, cb) { bwsStats.ProccesWallets(DB, function() { bwsStats.ProccesNewWallets(DB, function() { bwsStats.ProccesTxs(DB, function() { + DB.close(); cb(); }); }); From 0412a35195a5b086af9292fb1c89db177938d14d Mon Sep 17 00:00:00 2001 From: Matias Pando Date: Tue, 12 May 2015 11:47:51 -0300 Subject: [PATCH 7/8] Added missing returns and moved to /lib --- lib/expressapp.js | 2 +- scripts/stats.js | 160 ---------------------------------------------- 2 files changed, 1 insertion(+), 161 deletions(-) delete mode 100644 scripts/stats.js diff --git a/lib/expressapp.js b/lib/expressapp.js index 75fc2e5..7824824 100644 --- a/lib/expressapp.js +++ b/lib/expressapp.js @@ -9,7 +9,7 @@ var querystring = require('querystring'); var bodyParser = require('body-parser') var WalletService = require('./server'); -var stats = require('../scripts/stats'); +var stats = require('./stats'); log.disableColor(); log.debug = log.verbose; diff --git a/scripts/stats.js b/scripts/stats.js deleted file mode 100644 index 6111994..0000000 --- a/scripts/stats.js +++ /dev/null @@ -1,160 +0,0 @@ -#!/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 c = config.storageOpts.mongoDb; -var url = 'mongodb://' + (c.host || 'localhost') + ':' + (c.port ||  27017) + '/bws'; - -var startDate = moment(); -var endDate = moment(); - -var stats = {}; -var wallets = {}; -var bwsStats = {}; - -bwsStats.cleanUp = function() { - stats = { - 'livenet': {}, - 'testnet': {} - }; -}; - - -bwsStats.AddingWalletToCache = function(data) { - if (!data) return; - wallets[data.id] = data.network; -}; - -bwsStats.TotalNewWallets = function(data) { - if (!data) return; - 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++; -}; - -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; -}; - -bwsStats.ProcessData = function(DB, cb) { - bwsStats.ProccesWallets(DB, function() { - bwsStats.ProccesNewWallets(DB, function() { - bwsStats.ProccesTxs(DB, function() { - DB.close(); - cb(); - }); - }); - }); -}; - -bwsStats.ProccesWallets = function(DB, cb) { - var collection = DB.collection('wallets'); - collection.find({}).toArray(function(err, items) { - if (err) { - console.log('Error.', err); - cb(err); - } - - items.forEach(function(it) { - bwsStats.AddingWalletToCache(it); - }); - cb(); - }); -}; - -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({ - createdOn: { - $gt: start, - $lt: end - } - }).toArray(function(err, items) { - if (err) { - console.log('Error.', err); - 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); - cb(err); - } else { - items.forEach(function(it) { - bwsStats.TotalTxps(it); - }); - } - cb(); - }); -}; - -bwsStats.getStats = function(opts, cb) { - if (opts) { - startDate = moment(opts.from); - endDate = moment(opts.to); - } - bwsStats.cleanUp(); - - mongodb.MongoClient.connect(url, function(err, db) { - if (err) { - console.log('Unable to connect to the mongoDB server. Error:', err); - cb(err, null); - return; - } - console.log('Connection established to ', url); - bwsStats.ProcessData(db, function(err) { - if (err) { - console.log('Error.', err); - cb(err, null); - return; - } - cb(null, stats); - }); - }); -}; - -module.exports = bwsStats; From f8121a1133e069891459e1d386a684e83a4b1c3c Mon Sep 17 00:00:00 2001 From: Matias Pando Date: Tue, 12 May 2015 11:54:03 -0300 Subject: [PATCH 8/8] Adding stats to /lib --- lib/stats.js | 158 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 lib/stats.js diff --git a/lib/stats.js b/lib/stats.js new file mode 100644 index 0000000..586582d --- /dev/null +++ b/lib/stats.js @@ -0,0 +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 c = config.storageOpts.mongoDb; +var url = 'mongodb://' + (c.host || 'localhost') + ':' + (c.port ||  27017) + '/bws'; + +var startDate = moment(); +var endDate = moment(); + +var stats = {}; +var wallets = {}; +var bwsStats = {}; + +bwsStats.cleanUp = function() { + stats = { + 'livenet': {}, + 'testnet': {} + }; +}; + + +bwsStats.AddingWalletToCache = function(data) { + if (!data) return; + wallets[data.id] = data.network; +}; + +bwsStats.TotalNewWallets = function(data) { + if (!data) return; + 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++; +}; + +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; +}; + +bwsStats.ProcessData = function(DB, cb) { + bwsStats.ProccesWallets(DB, function() { + bwsStats.ProccesNewWallets(DB, function() { + bwsStats.ProccesTxs(DB, function() { + DB.close(); + cb(); + }); + }); + }); +}; + +bwsStats.ProccesWallets = function(DB, cb) { + var collection = DB.collection('wallets'); + collection.find({}).toArray(function(err, items) { + if (err) { + console.log('Error.', err); + return cb(err); + } + + items.forEach(function(it) { + bwsStats.AddingWalletToCache(it); + }); + cb(); + }); +}; + +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({ + 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(); + }); +}; + +bwsStats.getStats = function(opts, cb) { + if (opts) { + startDate = moment(opts.from); + endDate = moment(opts.to); + } + bwsStats.cleanUp(); + + mongodb.MongoClient.connect(url, function(err, db) { + if (err) { + console.log('Unable to connect to the mongoDB server. Error:', err); + return cb(err, null); + } + 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;