From 209272eb26a6519e8741eda3b6f590d845430797 Mon Sep 17 00:00:00 2001 From: Josh Harvey Date: Fri, 28 Nov 2014 10:53:38 -0500 Subject: [PATCH] get cartridge counts from db --- cartridges.json | 5 +---- lib/plugins.js | 39 +++++++++++++++++++++++++++++++++++++ lib/postgresql_interface.js | 21 +++++++++++++++++++- lib/routes.js | 14 +++---------- 4 files changed, 63 insertions(+), 16 deletions(-) diff --git a/cartridges.json b/cartridges.json index 9dde2695..52aa167b 100644 --- a/cartridges.json +++ b/cartridges.json @@ -1,7 +1,4 @@ { - "cartridges": [ - {"denomination": 1, "count": 100}, - {"denomination": 20, "count": 100} - ], + "cartridges": [1, 20], "virtualCartridges": [5] } diff --git a/lib/plugins.js b/lib/plugins.js index 3794d752..86d69616 100644 --- a/lib/plugins.js +++ b/lib/plugins.js @@ -1,5 +1,7 @@ 'use strict'; +var fs = require('fs'); + var _ = require('lodash'); var async = require('async'); var logger = require('./logger'); @@ -35,6 +37,13 @@ var reapTxInterval = null; var tradesQueue = []; +var cartridges = null; +try { + cartridges = JSON.parse(fs.readFileSync('./cartridges.json')); +} catch (ex) { + logger.warn('No cartridges.json file found: ' + ex.message); +} + // that's basically a constructor exports.init = function init(databaseHandle) { if (!databaseHandle) { @@ -187,6 +196,36 @@ exports.logEvent = function event(session, rawEvent) { db.recordDeviceEvent(session, rawEvent); }; +function buildCartridges(counts) { + if (!cartridges) return null; + return { + cartridges: [ + { + denomination: cartridges.cartridges[0], + count: counts[0] + }, + { + denomination: cartridges.cartridges[1], + count: counts[1] + }, + ], + virtualCartridges: cartridges.virtualCartridges + }; +} + +exports.pollQueries = function pollQueries(session, cb) { + async.parallel([ + async.apply(db.dispenseStatus, session), + async.apply(db.cartridgeCounts, session) + ], function(err, results) { + if (err) return cb(err); + return cb(null, { + dispenseStatus: results[0], + cartridges: buildCartridges(results[1]) + }); + }); +}; + function _sendBitcoins(toAddress, satoshis, cb) { var transactionFee = cachedConfig.exchanges.settings.transactionFee; walletPlugin.sendBitcoins(toAddress, satoshis, transactionFee, cb); diff --git a/lib/postgresql_interface.js b/lib/postgresql_interface.js index 592e6fae..4dc9bb36 100644 --- a/lib/postgresql_interface.js +++ b/lib/postgresql_interface.js @@ -10,9 +10,11 @@ var _ = require('lodash'); var logger = require('./logger'); +/* function inspect(rec) { console.log(util.inspect(rec, {depth: null, colors: true})); } +*/ function isUniqueViolation(err) { return err.code === '23505'; @@ -503,7 +505,7 @@ function insertDispense(client, session, tx, transactionId, counts, cb) { exports.addDispense = function addDispense(session, tx) { connect(function(cerr, client, done) { - if (cerr) return logger.error(cerr); + if (cerr) return; async.waterfall([ async.apply(insertIncoming, client, session, tx, 0, tx.fiat, @@ -517,6 +519,23 @@ exports.addDispense = function addDispense(session, tx) { }); }; +exports.cartridgeCounts = function cartridgeCounts(session, cb) { + connect(function(cerr, client, done) { + if (cerr) return cb(cerr); + var sql = 'SELECT count1, count2 FROM dispenses ' + + 'WHERE device_fingerprint=$1 ' + + 'ORDER BY id DESC LIMIT 1'; + query(client, sql, [session.fingerprint], function(err, results) { + done(); + if (err) return cb(err); + var counts = results.rows.length === 1 ? + [results.rows[0].count1, results.rows[0].count2] : + [0, 0]; + cb(null, counts); + }); + }); +}; + /* exports.init('postgres://lamassu:lamassu@localhost/lamassu'); connect(function(err, client, done) { diff --git a/lib/routes.js b/lib/routes.js index c07170a4..65a7f7a0 100644 --- a/lib/routes.js +++ b/lib/routes.js @@ -1,6 +1,5 @@ 'use strict'; -var fs = require('fs'); var logger = require('./logger'); var mock = false; @@ -18,13 +17,6 @@ module.exports = { var STALE_TICKER = 180000; var STALE_BALANCE = 180000; -var cartridges = null; -try { - cartridges = JSON.parse(fs.readFileSync('./cartridges.json')); -} catch (ex) { - logger.warn('No cartridges.json file found: ' + ex.message); -} - function poll(req, res) { var rateRec = plugins.getDeviceRate(); var balanceRec = plugins.getBalance(); @@ -59,9 +51,9 @@ function poll(req, res) { var fiatCommission = config.exchanges.settings.fiatCommission || config.exchanges.settings.commission; - console.log('DEBUG0'); - plugins.dispenseStatus(session(req), function(err, dispenseStatus) { + plugins.pollQueries(session(req), function(err, results) { if (err) return logger.error(err); + var cartridges = results.cartridges; var response = { err: null, rate: rate * config.exchanges.settings.commission, @@ -69,7 +61,7 @@ function poll(req, res) { fiat: fiatBalance, locale: config.brain.locale, txLimit: parseInt(complianceSettings.maximum.limit, 10), - dispenseStatus: dispenseStatus, + dispenseStatus: results.dispenseStatus, idVerificationEnabled: complianceSettings.idVerificationEnabled, cartridges: cartridges, twoWayMode: cartridges ? true : false