diff --git a/lib/notifier.js b/lib/notifier.js index c83b4ed6..83e9d16c 100644 --- a/lib/notifier.js +++ b/lib/notifier.js @@ -162,7 +162,7 @@ function emailAlert (alert) { const stuckAge = prettyMs(alert.age, {compact: true, verbose: true}) return 'Machine is stuck on ' + alert.state + 'screen for ' + stuckAge case 'lowBalance': - const balance = formatCurrency(alert.fiatBalance, alert.fiatCode) + const balance = formatCurrency(alert.fiatBalance.balance, alert.fiatCode) return 'Low balance of ' + balance + ' in ' + alert.cryptoCode + ' wallet' } } @@ -190,10 +190,13 @@ function printEmailAlerts (alertRec) { function alertSubject (alertRec) { let alerts = alertRec.general + R.keys(alertRec.devices).forEach(function (device) { alerts = R.concat(alerts, alertRec.devices[device]) }) + if (alerts.length === 0) return null + const alertTypes = R.uniq(R.pluck('code', alerts)).sort() return '[Lamassu] Errors reported: ' + alertTypes.join(', ') } diff --git a/lib/plugins.js b/lib/plugins.js index d96b9b63..1f458eab 100644 --- a/lib/plugins.js +++ b/lib/plugins.js @@ -1,5 +1,5 @@ const uuid = require('uuid') -const R = require('ramda') +const _ = require('lodash/fp') const BigNumber = require('bignumber.js') const argv = require('minimist')(process.argv.slice(2)) const crypto = require('crypto') @@ -206,7 +206,7 @@ function plugins (settings) { return wallet.newAddress(settings, cryptoCode, info) .then(address => { - const newTx = R.assoc('toAddress', address, tx) + const newTx = _.set('toAddress', address, tx) return dbm.addInitialIncoming(deviceId, newTx, address) .then(() => address) @@ -323,7 +323,6 @@ function plugins (settings) { const filtered = marketTradesQueues .filter(tradeEntry => { - console.log('DEBUG33: %j, %s, %s, %s', tradeEntry, t1, tradeEntry.timestamp, TRADE_TTL) return t1 - tradeEntry.timestamp < TRADE_TTL }) @@ -366,7 +365,7 @@ function plugins (settings) { return cryptoCodes.map(cryptoCode => ({fiatCode, cryptoCode})) }) - const tradesPromises = R.uniq(R.flatten(lists)) + const tradesPromises = _.uniq(_.flatten(lists)) .map(r => executeTradesForMarket(settings, r.fiatCode, r.cryptoCode)) return Promise.all(tradesPromises) @@ -426,10 +425,11 @@ function plugins (settings) { }) } - function checkBalance (settings, rec) { + function checkBalance (rec) { const config = configManager.unscoped(settings.config) const lowBalanceThreshold = config.lowBalanceThreshold - return lowBalanceThreshold && rec.fiatBalance < lowBalanceThreshold + + return rec.fiatBalance.balance <= lowBalanceThreshold ? {code: 'lowBalance', cryptoCode: rec.cryptoCode, fiatBalance: rec.fiatBalance, fiatCode: rec.fiatCode} : null } @@ -442,12 +442,14 @@ function plugins (settings) { return Promise.all(deviceBalancePromises) .then(arr => { - const toMarket = r => r.fiatBalance + r.cryptoCode - const min = R.minBy(r => r.fiatBalance) - return R.values(R.reduceBy(min, Infinity, toMarket, R.flatten(arr))) + const toMarket = r => [r.fiatCode, r.cryptoCode].join('') + const min = _.minBy(r => r.fiatBalance) + const byMarket = _.groupBy(toMarket, _.flatten(arr)) + const minByMarket = _.flatMap(min, byMarket) + + return _.reject(_.isNil, _.map(checkBalance, minByMarket)) }) }) - .then(balances => R.reject(R.isNil, balances.map(balance => checkBalance))) } function randomCode () {