bitcore-wallet-service/scripts/level2mongo.js

75 lines
1.8 KiB
JavaScript
Raw Normal View History

2015-04-22 06:20:20 -07:00
'use strict';
var LevelStorage = require('../lib/storage_leveldb');
var MongoStorage = require('../lib/storage');
var level = new LevelStorage({
2015-04-22 11:02:25 -07:00
dbPath: './db',
2015-04-22 06:20:20 -07:00
});
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) {
2015-04-22 11:02:25 -07:00
var pending = 0,
ended = false;
2015-04-22 06:20:20 -07:00
level.db.readStream()
.on('data', function(data) {
2015-04-22 11:02:25 -07:00
pending++;
2015-04-22 06:20:20 -07:00
migrate(data.key, data.value, function(err) {
if (err) throw err;
2015-04-22 11:02:25 -07:00
pending--;
if (pending==0 && ended) {
return cb();
}
2015-04-22 06:20:20 -07:00
});
})
.on('error', function(err) {
return cb(err);
})
.on('end', function() {
2015-04-22 11:02:25 -07:00
console.log('All old data read')
ended = true;
if (!pending) {
return cb();
}
2015-04-22 06:20:20 -07:00
});
};
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));
}
};