mirror of
https://github.com/HackPlan/RootPanel.git
synced 2026-03-27 22:44:32 +08:00
database migration
This commit is contained in:
@@ -1,81 +0,0 @@
|
||||
#!/usr/bin/env coffee
|
||||
|
||||
_ = require 'underscore'
|
||||
async = require 'async'
|
||||
{MongoClient} = require 'mongodb'
|
||||
|
||||
config = require '../config'
|
||||
{user, password, host, name} = config.mongodb
|
||||
mongodb_uri = "mongodb://#{user}:#{password}@#{host}/#{name}"
|
||||
|
||||
version = _.last process.argv
|
||||
|
||||
migration_action =
|
||||
'0.7.1': (callback) ->
|
||||
###
|
||||
npm install coffee-script -g
|
||||
|
||||
vi /etc/rc.local
|
||||
|
||||
iptables-restore < /etc/iptables.rules
|
||||
|
||||
vi /etc/supervisor/conf.d/rpadmin.conf
|
||||
|
||||
[program:RootPanel]
|
||||
command=node /home/rpadmin/RootPanel/start.js
|
||||
autorestart=true
|
||||
user=rpadmin
|
||||
|
||||
service supervisor restart
|
||||
###
|
||||
|
||||
crypto = require 'crypto'
|
||||
bitcoin = require '../core/bitcoin'
|
||||
|
||||
MongoClient.connect mongodb_uri, (err, db) ->
|
||||
mAccount = db.collection 'accounts'
|
||||
|
||||
mAccount.find().toArray (err, accounts) ->
|
||||
async.each accounts, (account, callback) ->
|
||||
bitcoin_secret = crypto.createHash('sha256').update(crypto.randomBytes(256)).digest('hex')
|
||||
|
||||
bitcoin.genAddress bitcoin_secret, (address) ->
|
||||
mAccount.update {_id: account._id},
|
||||
$set:
|
||||
'attribute.bitcoin_deposit_address': address
|
||||
'bitcoin_secret': bitcoin_secret
|
||||
, (err) ->
|
||||
callback err
|
||||
|
||||
, (err) ->
|
||||
throw err if err
|
||||
console.log "[account.attribute.bitcoin_secret] update #{accounts.length} rows"
|
||||
callback()
|
||||
|
||||
'0.6.0': (callback) ->
|
||||
MongoClient.connect mongodb_uri, (err, db) ->
|
||||
mAccount = db.collection 'accounts'
|
||||
|
||||
async.parallel [
|
||||
(callback) ->
|
||||
mAccount.update
|
||||
'tokens.available':
|
||||
$exists: true
|
||||
,
|
||||
$unset:
|
||||
'tokens.$.available': true
|
||||
,
|
||||
multi: true
|
||||
, (err, rows) ->
|
||||
console.log "[accounts.tokens.available] update #{rows} rows"
|
||||
callback err
|
||||
], (err) ->
|
||||
throw err if err
|
||||
callback()
|
||||
|
||||
if migration_action[version]
|
||||
migration_action[version] ->
|
||||
console.log "Finish migration to #{version}"
|
||||
process.exit()
|
||||
else
|
||||
throw new Error 'Unknown Version'
|
||||
14
migration/database/v0.6.0.coffee
Normal file
14
migration/database/v0.6.0.coffee
Normal file
@@ -0,0 +1,14 @@
|
||||
module.exports = (db, callback) ->
|
||||
cAccount = db.collection 'accounts'
|
||||
|
||||
cAccount.update
|
||||
'tokens.available':
|
||||
$exists: true
|
||||
,
|
||||
$unset:
|
||||
'tokens.$.available': true
|
||||
,
|
||||
multi: true
|
||||
, (err, rows) ->
|
||||
console.log "[accounts.tokens.available] update #{rows} rows"
|
||||
callback err
|
||||
34
migration/database/v0.7.1.coffee
Normal file
34
migration/database/v0.7.1.coffee
Normal file
@@ -0,0 +1,34 @@
|
||||
async = require 'async'
|
||||
crypto = require 'crypto'
|
||||
request = require 'request'
|
||||
|
||||
config = require '../../config'
|
||||
|
||||
genAddress = (bitcoin_secret, callback) ->
|
||||
request 'https://coinbase.com/api/v1/account/generate_receive_address',
|
||||
method: 'POST'
|
||||
json:
|
||||
api_key: config.plugins.bitcoin.coinbase_api_key
|
||||
address:
|
||||
callback_url: "#{config.web.url}/bitcoin/coinbase_callback?secret=#{bitcoin_secret}"
|
||||
, (err, res, body) ->
|
||||
throw err if err
|
||||
callback body.address
|
||||
|
||||
module.exports = (db, callback) ->
|
||||
cAccount = db.collection 'accounts'
|
||||
|
||||
cAccount.find().toArray (err, accounts) ->
|
||||
async.each accounts, (account, callback) ->
|
||||
bitcoin_secret = crypto.createHash('sha256').update(crypto.randomBytes(256)).digest('hex')
|
||||
|
||||
genAddress bitcoin_secret, (address) ->
|
||||
mAccount.update {_id: account._id},
|
||||
$set:
|
||||
'attribute.bitcoin_deposit_address': address
|
||||
'bitcoin_secret': bitcoin_secret
|
||||
, callback
|
||||
|
||||
, (err) ->
|
||||
console.log "[account.attribute.bitcoin_secret] update #{accounts.length} rows"
|
||||
callback err
|
||||
61
migration/migrate.coffee
Normal file
61
migration/migrate.coffee
Normal file
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env coffee
|
||||
|
||||
{MongoClient} = require 'mongodb'
|
||||
semver = require 'semver'
|
||||
async = require 'async'
|
||||
path = require 'path'
|
||||
fs = require 'fs'
|
||||
_ = require 'underscore'
|
||||
|
||||
config = require '../config'
|
||||
|
||||
{user, password, host, name} = config.mongodb
|
||||
mongodb_uri = "mongodb://#{user}:#{password}@#{host}/#{name}"
|
||||
|
||||
MongoClient.connect mongodb_uri, (err, db) ->
|
||||
throw err if err
|
||||
|
||||
migrations = _.map fs.readdirSync("#{__dirname}/database"), (filename) ->
|
||||
return filename.match(/v(\d+\.\d+\.\d+)\.coffee/)[1]
|
||||
|
||||
migrations.sort (a, b) ->
|
||||
if semver.gt a, b
|
||||
return 1
|
||||
|
||||
if semver.lt a, b
|
||||
return -1
|
||||
|
||||
return 0
|
||||
|
||||
db.collection('options').findOne
|
||||
key: 'db_version'
|
||||
, (err, result) ->
|
||||
latest_version = require('../package.json').version
|
||||
current_version = result?.version ? latest_version
|
||||
|
||||
async.eachSeries migrations, (migration, callback) ->
|
||||
if semver.gt(migration, current_version) and semver.lte(migration, latest_version)
|
||||
console.log "Running migration #{migration}..."
|
||||
|
||||
require("#{__dirname}/database/v#{migration}.coffee") db, (err) ->
|
||||
return callback err if err
|
||||
|
||||
db.collection('options').update
|
||||
key: 'db_version'
|
||||
,
|
||||
key: 'db_version'
|
||||
version: migration
|
||||
,
|
||||
upsert: true
|
||||
, (err) ->
|
||||
callback err
|
||||
|
||||
else
|
||||
callback()
|
||||
|
||||
, (err) ->
|
||||
if err
|
||||
throw err
|
||||
else
|
||||
console.log 'Migration Finish'
|
||||
process.exit 0
|
||||
14
migration/system/v0.7.1.md
Normal file
14
migration/system/v0.7.1.md
Normal file
@@ -0,0 +1,14 @@
|
||||
npm install coffee-script -g
|
||||
|
||||
vi /etc/rc.local
|
||||
|
||||
iptables-restore < /etc/iptables.rules
|
||||
|
||||
vi /etc/supervisor/conf.d/rpadmin.conf
|
||||
|
||||
[program:RootPanel]
|
||||
command=node /home/rpadmin/RootPanel/start.js
|
||||
autorestart=true
|
||||
user=rpadmin
|
||||
|
||||
service supervisor restart
|
||||
0
migration/system/v0.8.0.md
Normal file
0
migration/system/v0.8.0.md
Normal file
@@ -17,6 +17,7 @@
|
||||
],
|
||||
"scripts": {
|
||||
"start": "./node_modules/.bin/coffee app.coffee",
|
||||
"migrate": "./node_modules/.bin/coffee migration/migrate.coffee",
|
||||
"test": "COV_TEST=true ./node_modules/.bin/mocha --compilers coffee:coffee-script/register --require test/support/env --reporter test/support/reporter-cov-summary.js -- core/test/*.test.coffee core/test/*/*.test.coffee plugin/*/test",
|
||||
"test-only": "./node_modules/.bin/mocha --compilers coffee:coffee-script/register --require test/support/env -- core/test/*.test.coffee core/test/*/*.test.coffee plugin/*/test",
|
||||
"test-cov-html": "COV_TEST=true ./node_modules/.bin/mocha --compilers coffee:coffee-script/register --require test/support/env --reporter html-cov -- core/test/*.test.coffee core/test/*/*.test.coffee plugin/*/test > coverage-reporter.html"
|
||||
@@ -24,7 +25,6 @@
|
||||
"bin": {
|
||||
"rp-fix-permissions": "./bin/rp-fix-permissions.coffee",
|
||||
"rp-system-sync": "./bin/rp-system-sync.coffee",
|
||||
"rp-migration": "./bin/rp-migration.coffee",
|
||||
"rp-clean": "./bin/rp-clean.coffee"
|
||||
},
|
||||
"dependencies": {
|
||||
@@ -56,7 +56,8 @@
|
||||
"redis": "^0.12.1",
|
||||
"request": "^2.45.0",
|
||||
"tmp": "^0.0.24",
|
||||
"underscore": "^1.6.0"
|
||||
"underscore": "^1.6.0",
|
||||
"semver": "^4.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"mocha": "^2.0.0",
|
||||
|
||||
Reference in New Issue
Block a user