This commit is contained in:
Josh Harvey 2016-03-29 17:58:27 +01:00
parent 7be7c3f8e6
commit 591ffcf162
4 changed files with 129 additions and 54 deletions

173
bin/ssu
View file

@ -4,80 +4,149 @@
var wreck = require('wreck') var wreck = require('wreck')
var argv = process.argv.slice(2) var argv = process.argv.slice(2)
var Promise = require('es6-promise')
var pgp = require('pg-promise')({
promiseLib: Promise
})
var fs = require('fs')
var cmd = argv[0] var cmd = argv[0]
var fingerprint = argv[1]
if (!cmd || !fingerprint) { if (!cmd) bail()
function bail () {
console.log('Command line utility for lamassu-server') console.log('Command line utility for lamassu-server')
console.log('\nUsage: ssu reboot <machine-fingerprint>') console.log('\nssu reboot <machine-fingerprint>')
console.log('This will remotely reboot your lamassu-machine.') console.log('This will remotely reboot your lamassu-machine.')
console.log('\nssu crypto <code> <ticker-plugin> <wallet-plugin>')
console.log('This will configure a new cryptocurrency.')
process.exit(1) process.exit(1)
} }
var opts = {json: true} switch (cmd) {
wreck.get('http://localhost:7070/pid?fingerprint=' + fingerprint, opts, function (err, res, payload) { case 'reboot':
if (err) { reboot()
console.log('Please make sure that lamassu-server is running on this box.') break
process.exit(2) case 'crypto':
crypto()
break
default:
}
function reboot () {
var fingerprint = argv[1]
if (!fingerprint) {
console.log('Fingerprint required')
process.exit(1)
} }
if (!payload || !payload.pid) { var opts = {json: true}
console.log('The requested lamassu-machine appears to be running an old version.') wreck.get('http://localhost:7070/pid?fingerprint=' + fingerprint, opts, function (err, res, payload) {
process.exit(3) if (err) {
}
var pid = payload.pid
if (Date.now() - payload.ts > 10000) {
console.log('lamassu-machine is not connected to server.')
process.exit(6)
}
var opts2 = {
headers: {'Content-Type': 'application/json'},
payload: JSON.stringify({pid: pid, fingerprint: fingerprint})
}
wreck.post('http://localhost:7070/reboot', opts2, function (err2, res) {
if (err2) {
console.log('Please make sure that lamassu-server is running on this box.') console.log('Please make sure that lamassu-server is running on this box.')
process.exit(2) process.exit(2)
} }
if (res.statusCode !== 200) { if (!payload || !payload.pid) {
console.log('Communication error') console.log('The requested lamassu-machine appears to be running an old version.')
return process.exit(3)
} }
console.log('Rebooting...') var pid = payload.pid
var ts = null if (Date.now() - payload.ts > 10000) {
console.log('lamassu-machine is not connected to server.')
process.exit(6)
}
setTimeout(function () { var opts2 = {
if (Date.now() - ts < 10000) { headers: {'Content-Type': 'application/json'},
console.log('lamassu-machine did not reboot but is still contacting server.') payload: JSON.stringify({pid: pid, fingerprint: fingerprint})
process.exit(4) }
wreck.post('http://localhost:7070/reboot', opts2, function (err2, res) {
if (err2) {
console.log('Please make sure that lamassu-server is running on this box.')
process.exit(2)
} }
console.log('lamassu-machine rebooted but is not coming back up.') if (res.statusCode !== 200) {
process.exit(5) console.log('Communication error')
}, 30000) return
}
setInterval(function () { console.log('Rebooting...')
wreck.get('http://localhost:7070/pid?fingerprint=' + fingerprint, opts, function (err3, res, payload) {
if (err3) { var ts = null
console.log('lamassu-server appears to be down.')
process.exit(2) setTimeout(function () {
if (Date.now() - ts < 10000) {
console.log('lamassu-machine did not reboot but is still contacting server.')
process.exit(4)
} }
ts = payload.ts console.log('lamassu-machine rebooted but is not coming back up.')
process.exit(5)
}, 30000)
if (payload.pid !== pid) { setInterval(function () {
console.log('lamassu-machine is back up!') wreck.get('http://localhost:7070/pid?fingerprint=' + fingerprint, opts, function (err3, res, payload) {
process.exit(0) if (err3) {
} console.log('lamassu-server appears to be down.')
}) process.exit(2)
}, 5000) }
ts = payload.ts
if (payload.pid !== pid) {
console.log('lamassu-machine is back up!')
process.exit(0)
}
})
}, 5000)
})
}) })
}) }
function crypto () {
var code = argv[1]
var tickerPlugin = argv[2]
var walletPlugin = argv[3]
if (!code || !tickerPlugin || !walletPlugin) {
console.log('\nssu crypto <code> <ticker-plugin> <wallet-plugin>')
console.log('This will configure a new cryptocurrency.')
process.exit(1)
}
code = code.toUpperCase()
var psqlUrl
try {
psqlUrl = process.env.DATABASE_URL || JSON.parse(fs.readFileSync('/etc/lamassu.json')).postgresql
} catch (ex) {
psqlUrl = 'psql://lamassu:lamassu@localhost/lamassu'
}
var db = pgp(psqlUrl)
return db.one('select data from user_config where type=$1', 'exchanges')
.then(function (data) {
var config = data.data
config.exchanges.plugins.current[code] = {
ticker: tickerPlugin,
transfer: walletPlugin
}
return db.none('update user_config set data=$1 where type=$2', [config, 'exchanges'])
})
.then(function () {
console.log('success')
pgp.end()
})
.catch(function (err) {
console.log(err.stack)
pgp.end()
})
}

View file

@ -2,7 +2,10 @@
var _ = require('lodash') var _ = require('lodash')
var async = require('async') var async = require('async')
var BigNumber = require('bignumber.js') var BigNumber = require('bignumber.js')
BigNumber.config({DECIMAL_PLACES: 40})
var logger = require('./logger') var logger = require('./logger')
var argv = require('minimist')(process.argv.slice(2)) var argv = require('minimist')(process.argv.slice(2))

View file

@ -1,8 +1,9 @@
require('es6-promise').polyfill() require('es6-promise').polyfill()
var axios = require('axios') var axios = require('axios')
var _ = require('lodash') var _ = require('lodash')
var BigNumber = require('bignumber.js') var BigNumber = require('bignumber.js')
BigNumber.config({DECIMAL_PLACES: 30}) BigNumber.config({DECIMAL_PLACES: 40})
exports.NAME = 'Kraken' exports.NAME = 'Kraken'
exports.SUPPORTED_MODULES = ['ticker'] exports.SUPPORTED_MODULES = ['ticker']

View file

@ -35,7 +35,9 @@
"lodash": "^2.4.1", "lodash": "^2.4.1",
"minimist": "0.0.8", "minimist": "0.0.8",
"node-uuid": "^1.4.2", "node-uuid": "^1.4.2",
"pg": "~2.11.1", "pg": "^4.5.1",
"pg-promise": "^3.4.3",
"web3": "^0.15.3",
"wreck": "5.1.0" "wreck": "5.1.0"
}, },
"repository": { "repository": {