diff --git a/lib/storage_leveldb.js b/lib/storage_leveldb.js index f2bed0b..8553287 100644 --- a/lib/storage_leveldb.js +++ b/lib/storage_leveldb.js @@ -2,7 +2,6 @@ var _ = require('lodash'); var levelup = require('levelup'); -var multilevel = require('multilevel'); var net = require('net'); var async = require('async'); var $ = require('preconditions').singleton(); @@ -22,16 +21,9 @@ var Storage = function(opts) { this.db = opts.db; if (!this.db) { - if (opts.multiLevel) { - this.db = multilevel.client(); - var con = net.connect(opts.multiLevel); - con.pipe(this.db.createRpcStream()).pipe(con); - log.info('Using multilevel server:' + opts.multiLevel.host + ':' + opts.multiLevel.port); - } else { - this.db = levelup(opts.dbPath || './db/bws.db', { - valueEncoding: 'json' - }); - } + this.db = levelup(opts.dbPath || './db/bws.db', { + valueEncoding: 'json' + }); } }; diff --git a/scripts/level2mongo.js b/scripts/level2mongo.js new file mode 100644 index 0000000..125d484 --- /dev/null +++ b/scripts/level2mongo.js @@ -0,0 +1,63 @@ +'use strict'; + +var LevelStorage = require('../lib/storage_leveldb'); +var MongoStorage = require('../lib/storage'); + + +var level = new LevelStorage({ + dbPath: './db/bws.db', +}); + +var mongo = new MongoStorage(); +mongo.connect({ + host: 'localhost', + port: '27017' +}, function(err) { + if (err) throw err; + mongo.db.dropDatabase(function(err) { + if (err) throw err; + run(function(err) { + if (err) throw err; + console.log('All data successfully migrated'); + process.exit(0); + // mongo._dump(function() { + // process.exit(0); + // }); + }); + }); +}); + + +function run(cb) { + level.db.readStream() + .on('data', function(data) { + migrate(data.key, data.value, function(err) { + if (err) throw err; + }); + }) + .on('error', function(err) { + return cb(err); + }) + .on('end', function() { + return cb(); + }); +}; + +function migrate(key, value, cb) { + if (key.match(/^copayer!/)) { + value.copayerId = key.substring(key.indexOf('!') + 1); + mongo.db.collection('copayers_lookup').insert(value, cb); + } else if (key.match(/!addr!/)) { + value.walletId = key.substring(2, key.indexOf('!addr')); + mongo.db.collection('addresses').insert(value, cb); + } else if (key.match(/!not!/)) { + mongo.db.collection('notifications').insert(value, cb); + } else if (key.match(/!p?txp!/)) { + value.isPending = key.indexOf('!ptxp!') != -1; + mongo.db.collection('txs').insert(value, cb); + } else if (key.match(/!main$/)) { + mongo.db.collection('wallets').insert(value, cb); + } else { + return cb(new Error('Invalid key ' + key)); + } +};