From 916a3629a89d7c21668d4201afe7b9ed64cb79c3 Mon Sep 17 00:00:00 2001 From: Josh Harvey Date: Wed, 19 Jul 2017 16:14:45 +0200 Subject: [PATCH] refactor migration --- bin/lamassu-apply-defaults | 46 ++---------------------------------- bin/lamassu-migrate | 20 ++++++---------- lib/apply-defaults.js | 48 ++++++++++++++++++++++++++++++++++++++ lib/blockchain/ethereum.js | 2 +- lib/migrate.js | 19 +++++++++++++++ lib/options.js | 5 ++++ lib/settings-loader.js | 2 ++ 7 files changed, 84 insertions(+), 58 deletions(-) create mode 100644 lib/apply-defaults.js create mode 100644 lib/migrate.js diff --git a/bin/lamassu-apply-defaults b/bin/lamassu-apply-defaults index 355dfe93..6ef998c4 100755 --- a/bin/lamassu-apply-defaults +++ b/bin/lamassu-apply-defaults @@ -1,50 +1,8 @@ #!/usr/bin/env node -const assert = require('assert') -const _ = require('lodash/fp') +const applyDefaults = require('../lib/apply-defaults') -// const db = require('../lib/db') -const settingsLoader = require('../lib/settings-loader') -const schema = require('../lamassu-schema.json') -const newFields = [] - -const DEFAULT_CRYPTO = _.first(_.find(['code', 'cryptoCurrencies'], schema.fields).default) - -assert(DEFAULT_CRYPTO) - -Promise.resolve() -.then(() => { - schema.groups.forEach(group => { - return group.fields.forEach(fieldCode => { - const field = schema.fields.find(r => r.code === fieldCode) - if (!field) throw new Error('No such field: ' + fieldCode) - if (_.isNil(field.default)) return - if (group.machineScope === 'specific') return - - const crypto = group.cryptoScope === 'specific' - ? DEFAULT_CRYPTO - : 'global' - - return newFields.push({ - fieldLocator: { - fieldScope: { - crypto, - machine: 'global' - }, - code: fieldCode, - fieldType: field.fieldType, - fieldClass: field.fieldClass - }, - fieldValue: { - fieldType: field.fieldType, - value: field.default - } - }) - }) - }) - - return settingsLoader.save(newFields) -}) +applyDefaults.run() .then(() => { console.log('Success.') process.exit(0) diff --git a/bin/lamassu-migrate b/bin/lamassu-migrate index 932f63a3..ee212caa 100755 --- a/bin/lamassu-migrate +++ b/bin/lamassu-migrate @@ -1,19 +1,13 @@ #!/usr/bin/env node -const path = require('path') -const migrate = require('migrate') -const options = require('../lib/options') - -const migrateDir = path.resolve(__dirname, '..', 'migrations') -const migration = migrate.load(options.migrateStatePath, migrateDir) - -console.log(options.migrateStatePath) -migration.up(err => { - if (err) { - console.error('DB Migration failed: %s', err) - process.exit(1) - } +const migrate = require('../lib/migrate') +migrate.run() +.then(() => { console.log('DB Migration succeeded.') process.exit(0) }) +.catch(err => { + console.error('DB Migration failed: %s', err) + process.exit(1) +}) diff --git a/lib/apply-defaults.js b/lib/apply-defaults.js new file mode 100644 index 00000000..5834b0f3 --- /dev/null +++ b/lib/apply-defaults.js @@ -0,0 +1,48 @@ +const assert = require('assert') +const _ = require('lodash/fp') + +const settingsLoader = require('../lib/settings-loader') +const schema = require('../lamassu-schema.json') +const newFields = [] + +const DEFAULT_CRYPTO = _.first(_.find(['code', 'cryptoCurrencies'], schema.fields).default) + +assert(DEFAULT_CRYPTO) + +module.exports = {run} + +function run () { + return Promise.resolve() + .then(() => { + schema.groups.forEach(group => { + return group.fields.forEach(fieldCode => { + const field = schema.fields.find(r => r.code === fieldCode) + if (!field) throw new Error('No such field: ' + fieldCode) + if (_.isNil(field.default)) return + if (group.machineScope === 'specific') return + + const crypto = group.cryptoScope === 'specific' + ? DEFAULT_CRYPTO + : 'global' + + return newFields.push({ + fieldLocator: { + fieldScope: { + crypto, + machine: 'global' + }, + code: fieldCode, + fieldType: field.fieldType, + fieldClass: field.fieldClass + }, + fieldValue: { + fieldType: field.fieldType, + value: field.default + } + }) + }) + }) + + return settingsLoader.save(newFields) + }) +} diff --git a/lib/blockchain/ethereum.js b/lib/blockchain/ethereum.js index dfc025b9..0f629766 100644 --- a/lib/blockchain/ethereum.js +++ b/lib/blockchain/ethereum.js @@ -7,6 +7,6 @@ module.exports = {setup} function setup (dataDir) { const coinRec = coinUtils.getCryptoCurrency('ETH') common.firewall([coinRec.defaultPort]) - const cmd = `/usr/local/bin/${coinRec.daemon} --datadir "${dataDir}" --cache 500` + const cmd = `/usr/local/bin/${coinRec.daemon} --datadir "${dataDir}" --cache 500 --rpc` common.writeSupervisorConfig(coinRec, cmd) } diff --git a/lib/migrate.js b/lib/migrate.js new file mode 100644 index 00000000..d5f6462f --- /dev/null +++ b/lib/migrate.js @@ -0,0 +1,19 @@ +const path = require('path') +const migrate = require('migrate') + +const options = require('./options') + +const migrateDir = path.resolve(__dirname, '..', 'migrations') +const migration = migrate.load(options.migrateStatePath, migrateDir) + +module.exports = {run} + +function run () { + return new Promise((resolve, reject) => { + migration.up(err => { + if (err) return reject(err) + return resolve(0) + }) + }) +} + diff --git a/lib/options.js b/lib/options.js index b2c549b1..4ba090de 100644 --- a/lib/options.js +++ b/lib/options.js @@ -5,6 +5,11 @@ const _ = require('lodash/fp') const argv = require('minimist')(process.argv.slice(2)) function load () { + if (process.env.LAMASSU_CONFIG) { + const configPath = process.env.LAMASSU_CONFIG + return JSON.parse(fs.readFileSync(configPath)) + } + if (argv.f) { const configPath = argv.f return JSON.parse(fs.readFileSync(configPath)) diff --git a/lib/settings-loader.js b/lib/settings-loader.js index b525f91e..375265f2 100644 --- a/lib/settings-loader.js +++ b/lib/settings-loader.js @@ -135,6 +135,8 @@ function settings () { function save (config) { const sql = 'insert into user_config (type, data, valid) values ($1, $2, $3)' + console.log('DEBUG800: %s', sql) + return configValidate.validate(config) .then(() => db.none(sql, ['config', {config}, true])) .catch(() => db.none(sql, ['config', {config}, false]))