diff --git a/lib/plugins.js b/lib/plugins.js index 0867c43c..d8494f80 100644 --- a/lib/plugins.js +++ b/lib/plugins.js @@ -121,7 +121,7 @@ function loadOrConfigPlugin(pluginHandle, pluginType, currency, pluginHandle = loadPlugin(currentName, pluginConfig); currentlyUsedPlugins[pluginType] = currentName logger.debug('plugin(%s) loaded: %s', pluginType, pluginHandle.NAME || - currentName); + currentName); } } @@ -317,6 +317,17 @@ exports.trade = function trade(session, rawTrade, cb) { ], cb); }; +exports.stateChange = function stateChange(session, rec, cb) { + var rec = { + id: rec.uuid, + fingerprint: session.fingerprint, + eventType: 'stateChange', + note: JSON.stringify({state: rec.state, sessionId: session.id}), + deviceTime: rec.deviceTime + } + db.machineEvent(rec, cb) +}; + exports.sendBitcoins = function sendBitcoins(session, rawTx, cb) { executeTx(session, rawTx, 'machine', cb); }; diff --git a/lib/postgresql_interface.js b/lib/postgresql_interface.js index ca58093d..f1311271 100644 --- a/lib/postgresql_interface.js +++ b/lib/postgresql_interface.js @@ -1,4 +1,3 @@ -/* @flow weak */ 'use strict'; // TODO: Consider using serializable transactions for true ACID @@ -514,6 +513,19 @@ exports.cartridgeCounts = function cartridgeCounts(session, cb) { }); }; +exports.machineEvent = function machineEvent(rec, cb) { + connect(function(cerr, client, done) { + if (cerr) return cb(cerr); + var sql = 'insert into machine_events (id, device_fingerprint, event_type, note, device_time) ' + + 'VALUES (?, ?, ?, ?, ?)'; + var values = [rec.id, rec.fingerprint, rec.eventType, rec.note, rec.deviceTime] + query(client, sql, values, function(err, results) { + done(); + return cb(err, results); + }); + }); +}; + /* exports.init('postgres://lamassu:lamassu@localhost/lamassu'); connect(function(err, client, done) { diff --git a/lib/routes.js b/lib/routes.js index 1647cbd2..a032a3c7 100644 --- a/lib/routes.js +++ b/lib/routes.js @@ -87,6 +87,12 @@ function trade(req, res) { }); } +function stateChange(req, res) { + plugins.stateChange(session(req), req.body, function(err) { + res.json(200) + }) +} + function send(req, res) { plugins.sendBitcoins(session(req), req.body, function(err, status) { // TODO: use status.statusCode here after confirming machine compatibility @@ -189,6 +195,7 @@ function init(localConfig) { app.get('/poll', authMiddleware, reloadConfigMiddleware, poll); app.post('/trade', authMiddleware, trade); + app.post('/state', authMiddleware, stateChange); app.post('/send', authMiddleware, send); app.post('/cash_out', authMiddleware, cashOut);