diff --git a/bws.js b/bws.js index 271cafe..b0e5247 100755 --- a/bws.js +++ b/bws.js @@ -51,7 +51,7 @@ var start = function() { }); }; -if (config.cluster && (!config.storageOpts.multiLevel || !config.lockOpts.lockerServer)) - throw 'When running in cluster mode, multilevel and locker server need to be configured'; +if (config.cluster && !config.lockOpts.lockerServer) + throw 'When running in cluster mode, locker server need to be configured'; start(); diff --git a/config.js b/config.js index 1507220..b31a895 100644 --- a/config.js +++ b/config.js @@ -1,7 +1,7 @@ var config = { basePath: '/bws/api', disableLogs: false, - port: 3232, + port: 3232, // Uncomment to make BWS a forking server // cluster: true, // Uncomment to use the nr of availalbe CPUs @@ -12,19 +12,17 @@ var config = { // certificateFile: 'cert.pem', storageOpts: { - dbPath: './db', - // Uncomment to use multilevel server - // multiLevel: { - // host: 'localhost', - // port: 3230, - // }, + mongoDb: { + host: 'localhost', + port: 27017, + }, }, lockOpts: { // To use locker-server, uncomment this: - // lockerServer: { - // host: 'localhost', - // port: 3231, - // }, + // lockerServer: { + // host: 'localhost', + // port: 3231, + // }, }, blockchainExplorerOpts: { livenet: { diff --git a/lib/server.js b/lib/server.js index 9f61da4..2d5a8c6 100644 --- a/lib/server.js +++ b/lib/server.js @@ -57,7 +57,8 @@ WalletService.onNotification = function(func) { WalletService.initialize = function(opts) { opts = opts || {}; lock = opts.lock || new Lock(opts.lockOpts); - storage = opts.storage || new Storage(opts.storageOpts); + // TODO: This method needs to be async + storage = opts.storage || new Storage().connect(opts.storageOpts, function() {}); blockchainExplorer = opts.blockchainExplorer; blockchainExplorerOpts = opts.blockchainExplorerOpts; initialized = true; diff --git a/lib/storage.js b/lib/storage.js index 19fe047..f7105e4 100644 --- a/lib/storage.js +++ b/lib/storage.js @@ -19,21 +19,27 @@ var collections = { NOTIFICATIONS: 'notifications', }; -var Storage = function(opts) { +var Storage = function() {}; + +Storage.prototype.connect = function(opts, cb) { + var self = this; + opts = opts || {}; this.db = opts.db; - if (!this.db) { - var url = 'mongodb://localhost:27017/bws'; - mongodb.MongoClient.connect(url, function(err, db) { - if (err) { - log.error('Unable to connect to the mongoDB server. Error:', err); - return; - } - this.db = db; - console.log('Connection established to ', url); - }); - } + if (this.db) return cb(); + + var config = opts.mongoDb || {}; + var url = 'mongodb://' + (config.host || 'localhost') + ':' + (config.port ||  27017) + '/bws'; + mongodb.MongoClient.connect(url, function(err, db) { + if (err) { + log.error('Unable to connect to the mongoDB server.'); + return cb(err); + } + self.db = db; + console.log('Connection established to ', url); + return cb(); + }); }; Storage.prototype.fetchWallet = function(id, cb) { diff --git a/multilevel/clientMultilevel.js b/multilevel/clientMultilevel.js deleted file mode 100755 index f2d028a..0000000 --- a/multilevel/clientMultilevel.js +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env node - -var multilevel = require('multilevel'); -var net = require('net'); -var moment = require('moment'); - -var PORT = 3230; - -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 db = multilevel.client(); -var con = net.connect(PORT); -con.pipe(db.createRpcStream()).pipe(con); - - -var Today = otherDate || moment(); -var TotalTx = 0; -var TotalAmount = 0; -var TotalNewWallets = 0; - -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) { - if (!data) return; - if (data.key.indexOf('!txp!') < 0) return; - if (!data.value || !IsToday(data.value.createdOn)) return; - TotalTx++; - TotalAmount = TotalAmount + data.value.amount; -}; - -var TotalNewWalletForToday = function(data) { - if (!data) return; - if (data.key.indexOf('!main') < 0) return; - if (!data.value || !IsToday(data.value.createdOn)) return; - TotalNewWallets++; -}; - -var PrintStats = function() { - console.log('Stats for date : ', Today.format("YYYY-MM-DD")); - console.log('New wallets : ', TotalNewWallets); - console.log('Total tx : ', TotalTx); - console.log('Total amount in tx (satoshis) : ', TotalAmount); -}; - -var ProcessData = function(data) { - TotalTxpForToday(data); - TotalNewWalletForToday(data); -}; - -// streams -db.createReadStream().on('data', function(data) { - ProcessData(data); -}).on('error', function(err) { - console.log('Error : ', err); - process.exit(code = 1); -}).on('close', function() { - PrintStats(); - process.exit(code = 0); -}); diff --git a/multilevel/multilevel.js b/multilevel/multilevel.js deleted file mode 100755 index 742638a..0000000 --- a/multilevel/multilevel.js +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env node - -var multilevel = require('multilevel'); -var net = require('net'); -var level = require('levelup'); - -var db = level('./db', { - valueEncoding: 'json' -}); -var HOST = 'localhost'; -var PORT = 3230; - - -console.log('Server started at port ' + PORT + '...'); -net.createServer(function(con) { - con.pipe(multilevel.server(db)).pipe(con); -}).listen(PORT, HOST); diff --git a/test/integration/server.js b/test/integration/server.js index 1017c08..5a0140e 100644 --- a/test/integration/server.js +++ b/test/integration/server.js @@ -244,17 +244,20 @@ function closeDb(cb) { describe('Wallet service', function() { beforeEach(function(done) { openDb(function() { - storage = new Storage({ + storage = new Storage(); + storage.connect({ db: db - }); - blockchainExplorer = sinon.stub(); + }, function(err) { + should.not.exist(err); + blockchainExplorer = sinon.stub(); - WalletService.initialize({ - storage: storage, - blockchainExplorer: blockchainExplorer, + WalletService.initialize({ + storage: storage, + blockchainExplorer: blockchainExplorer, + }); + helpers.offset = 0; + done(); }); - helpers.offset = 0; - done(); }); }); after(function(done) { @@ -3055,18 +3058,21 @@ describe('Blockchain monitor', function() { sinon.stub(BlockchainMonitor.prototype, '_getAddressSubscriber').onFirstCall().returns(addressSubscriber); openDb(function() { - storage = new Storage({ + storage = new Storage(); + storage.connect({ db: db - }); - blockchainExplorer = sinon.stub(); + }, function(err) { + should.not.exist(err); + blockchainExplorer = sinon.stub(); - WalletService.initialize({ - storage: storage, - blockchainExplorer: blockchainExplorer, - }); - helpers.offset = 0; + WalletService.initialize({ + storage: storage, + blockchainExplorer: blockchainExplorer, + }); + helpers.offset = 0; - done(); + done(); + }); }); }); afterEach(function() { diff --git a/test/storage.js b/test/storage.js index e2ed216..1748f58 100644 --- a/test/storage.js +++ b/test/storage.js @@ -27,10 +27,13 @@ describe('Storage', function() { beforeEach(function(done) { initDb(function(err, db) { should.not.exist(err); - storage = new Storage({ + storage = new Storage(); + storage.connect({ db: db + }, function(err) { + should.not.exist(err); + done(); }); - done(); }); }); describe('Store & fetch wallet', function() {