This commit is contained in:
Josh Harvey 2016-11-27 18:12:49 +02:00
parent 3a99b7a6bc
commit 00d986376e
8 changed files with 149 additions and 155 deletions

View file

@ -11,7 +11,7 @@ const logger = require('./logger')
const notifier = require('./notifier')
const T = require('./time')
const configManager = require('./config-manager')
const settingsLoader = require('./settings-loader')
const settingsLoader = require('./settingsLoader')
const ticker = require('./ticker')
const wallet = require('./wallet')
const exchange = require('./exchange')
@ -47,7 +47,8 @@ let lastAlertTime = null
exports.logEvent = db.recordDeviceEvent
function buildRates (settings, deviceId, tickers) {
function buildRates (deviceId, tickers) {
const settings = settingsLoader.settings
const config = configManager.machineScoped(deviceId, settings.config)
const cryptoCodes = config.currencies.cryptoCurrencies
@ -69,7 +70,8 @@ function buildRates (settings, deviceId, tickers) {
return rates
}
function buildBalances (settings, deviceId, balanceRecs) {
function buildBalances (deviceId, balanceRecs) {
const settings = settingsLoader.settings
const config = configManager.machineScoped(deviceId, settings.config)
const cryptoCodes = config.currencies.cryptoCurrencies
@ -102,7 +104,8 @@ function buildCartridges (cartridges, virtualCartridges, rec) {
}
}
exports.pollQueries = function pollQueries (settings, deviceTime, deviceId, deviceRec) {
exports.pollQueries = function pollQueries (deviceTime, deviceId, deviceRec) {
const settings = settingsLoader.settings
const config = configManager.machineScoped(deviceId, settings.config)
const fiatCode = config.currencies.fiatCurrency
const cryptoCodes = config.currencies.cryptoCurrencies
@ -110,8 +113,8 @@ exports.pollQueries = function pollQueries (settings, deviceTime, deviceId, devi
config.currencies.bottomCashOutDenomination ]
const virtualCartridges = [config.currencies.virtualCashOutDenomination]
const tickerPromises = cryptoCodes.map(c => ticker.getRates(settings, fiatCode, c))
const balancePromises = cryptoCodes.map(c => wallet.balance(settings, c))
const tickerPromises = cryptoCodes.map(c => ticker.getRates(fiatCode, c))
const balancePromises = cryptoCodes.map(wallet.balance)
const pingPromise = recordPing(deviceId, deviceTime, deviceRec)
const promises = [db.cartridgeCounts(deviceId), pingPromise].concat(tickerPromises, balancePromises)
@ -124,8 +127,8 @@ exports.pollQueries = function pollQueries (settings, deviceTime, deviceId, devi
return {
cartridges: buildCartridges(cartridges, virtualCartridges, cartridgeCounts),
rates: buildRates(settings, deviceId, tickers),
balances: buildBalances(settings, deviceId, balances)
rates: buildRates(deviceId, tickers),
balances: buildBalances(deviceId, balances)
}
})
}
@ -224,7 +227,8 @@ exports.cashOut = function cashOut (deviceId, tx) {
})
}
exports.dispenseAck = function (settings, deviceId, tx) {
exports.dispenseAck = function (deviceId, tx) {
const settings = settingsLoader.settings
const config = configManager.machineScoped(deviceId, settings.config)
const cartridges = [ config.currencies.topCashOutDenomination,
config.currencies.bottomCashOutDenomination ]
@ -232,7 +236,8 @@ exports.dispenseAck = function (settings, deviceId, tx) {
return db.addDispense(deviceId, tx, cartridges)
}
function fiatBalance (settings, fiatCode, cryptoCode, deviceId) {
function fiatBalance (fiatCode, cryptoCode, deviceId) {
const settings = settingsLoader.settings
const config = configManager.scoped(cryptoCode, deviceId, settings.config)
return Promise.all([ticker.ticker(cryptoCode), wallet.balance(cryptoCode)])
@ -257,8 +262,8 @@ function fiatBalance (settings, fiatCode, cryptoCode, deviceId) {
})
}
function processTxStatus (settings, tx) {
return wallet.getStatus(settings, tx.toAddress, tx.cryptoAtoms, tx.cryptoCode)
function processTxStatus (tx) {
return wallet.getStatus(tx.toAddress, tx.cryptoAtoms, tx.cryptoCode)
.then(res => db.updateTxStatus(tx, res.status))
}
@ -280,29 +285,23 @@ function notifyConfirmation (tx) {
function monitorLiveIncoming () {
const statuses = ['notSeen', 'published', 'insufficientFunds']
return settingsLoader.settings()
.then(settings => {
return db.fetchOpenTxs(statuses, STALE_LIVE_INCOMING_TX_AGE)
.then(txs => Promise.all(txs.map(r => processTxStatus(settings, r))))
})
return db.fetchOpenTxs(statuses, STALE_LIVE_INCOMING_TX_AGE)
.then(txs => Promise.all(txs.map(processTxStatus)))
.catch(logger.error)
}
function monitorIncoming () {
const statuses = ['notSeen', 'published', 'authorized', 'instant', 'rejected', 'insufficientFunds']
return settingsLoader.settings()
.then(settings => {
db.fetchOpenTxs(statuses, STALE_INCOMING_TX_AGE)
.then(txs => Promise.all(txs.map(r => processTxStatus(settings, r))))
})
return db.fetchOpenTxs(statuses, STALE_INCOMING_TX_AGE)
.then(txs => Promise.all(txs.map(processTxStatus)))
.catch(logger.error)
}
function monitorUnnotified () {
db.fetchUnnotifiedTxs(MAX_NOTIFY_AGE, MIN_NOTIFY_AGE)
.then(txs => Promise.all(txs.map(notifyConfirmation)))
.catch(err => logger.error(err))
.catch(logger.error)
}
/*
@ -368,24 +367,22 @@ function consolidateTrades (cryptoCode, fiatCode) {
}
function executeTrades () {
return settingsLoader()
.then(settings => {
const config = settings.config
return db.devices()
.then(devices => {
const deviceIds = devices.map(device => device.device_id)
const lists = deviceIds.map(deviceId => {
const currencies = configManager.machineScoped(deviceId, config).currencies
const fiatCode = currencies.fiatCurrency
const cryptoCodes = currencies.cryptoCurrencies
return cryptoCodes.map(cryptoCode => ({fiatCode, cryptoCode}))
})
const tradesPromises = R.uniq(R.flatten(lists))
.map(r => executeTradesForMarket(settings, r.fiatCode, r.cryptoCode))
return Promise.all(tradesPromises)
const settings = settingsLoader.settings
const config = settings.config
return db.devices()
.then(devices => {
const deviceIds = devices.map(device => device.device_id)
const lists = deviceIds.map(deviceId => {
const currencies = configManager.machineScoped(deviceId, config).currencies
const fiatCode = currencies.fiatCurrency
const cryptoCodes = currencies.cryptoCurrencies
return cryptoCodes.map(cryptoCode => ({fiatCode, cryptoCode}))
})
const tradesPromises = R.uniq(R.flatten(lists))
.map(r => executeTradesForMarket(settings, r.fiatCode, r.cryptoCode))
return Promise.all(tradesPromises)
})
.catch(logger.error)
}
@ -470,11 +467,12 @@ function checkNotification () {
})
}
function checkDeviceBalances (settings, deviceId) {
function checkDeviceBalances (deviceId) {
const settings = settingsLoader.settings
const config = configManager.machineScoped(deviceId, settings.config)
const cryptoCodes = config.currencies.cryptoCurrencies
const fiatCode = config.currencies.fiatCurrency
const fiatBalancePromises = cryptoCodes.map(c => fiatBalance(settings, fiatCode, c, deviceId))
const fiatBalancePromises = cryptoCodes.map(c => fiatBalance(fiatCode, c, deviceId))
return Promise.all(fiatBalancePromises)
.then(arr => {
@ -487,11 +485,11 @@ function checkDeviceBalances (settings, deviceId) {
})
}
function checkBalances (settings) {
function checkBalances () {
return db.devices()
.then(devices => {
const deviceIds = devices.map(r => r.device_id)
const deviceBalancePromises = deviceIds.map(deviceId => checkDeviceBalances(settings, deviceId))
const deviceBalancePromises = deviceIds.map(deviceId => checkDeviceBalances(deviceId))
return Promise.all(deviceBalancePromises)
.then(arr => {
@ -503,7 +501,7 @@ function checkBalances (settings) {
}
exports.startCheckingNotification = function startCheckingNotification (config) {
notifier.init(db, checkBalances, config.notifications)
notifier.init(checkBalances)
checkNotification()
setInterval(checkNotification, CHECK_NOTIFICATION_INTERVAL)
}