diff --git a/lib/app.js b/lib/app.js index 709f78d2..d4d5f00c 100644 --- a/lib/app.js +++ b/lib/app.js @@ -54,9 +54,9 @@ module.exports = function(options) { } plugins.configure(config); next(); - }); + }); }; - + var authMiddleware; if (options.https) { diff --git a/lib/plugins.js b/lib/plugins.js index d8494f80..dbbdbb85 100644 --- a/lib/plugins.js +++ b/lib/plugins.js @@ -1,9 +1,9 @@ 'use strict'; +var uuid = require('node-uuid') var _ = require('lodash'); var async = require('async'); var logger = require('./logger'); - var argv = require('minimist')(process.argv.slice(2)); var SATOSHI_FACTOR = 1e8; @@ -323,7 +323,18 @@ exports.stateChange = function stateChange(session, rec, cb) { fingerprint: session.fingerprint, eventType: 'stateChange', note: JSON.stringify({state: rec.state, sessionId: session.id}), - deviceTime: rec.deviceTime + deviceTime: session.deviceTime + } + db.machineEvent(rec, cb) +}; + +exports.recordPing = function recordPing(session, rec, cb) { + var rec = { + id: uuid.v4(), + fingerprint: session.fingerprint, + eventType: 'ping', + note: JSON.stringify({state: rec.state, sessionId: session.id}), + deviceTime: session.deviceTime } db.machineEvent(rec, cb) }; diff --git a/lib/postgresql_interface.js b/lib/postgresql_interface.js index f1311271..f0e1116b 100644 --- a/lib/postgresql_interface.js +++ b/lib/postgresql_interface.js @@ -100,17 +100,6 @@ exports.recordBill = function recordBill(session, rec, cb) { }); }; -exports.recordDeviceEvent = function recordDeviceEvent(session, event) { - connect(function(cerr, client, done) { - if (cerr) return; - var sql = 'INSERT INTO device_events (device_fingerprint, event_type, ' + - 'note, device_time) VALUES ($1, $2, $3, $4)'; - var values = [session.fingerprint, event.eventType, event.note, - event.deviceTime]; - client.query(sql, values, done); - }); -}; - function query(client, queryStr, values, cb) { if (!cb) { cb = values; @@ -514,11 +503,20 @@ exports.cartridgeCounts = function cartridgeCounts(session, cb) { }; exports.machineEvent = function machineEvent(rec, cb) { + var TTL = 2 * 60 * 60 * 1000 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] + var fields = ['id', 'device_fingerprint', 'event_type', 'note', 'device_time', 'created'] + var sql = getInsertQuery('machine_events', fields, false) + var values = [rec.id, rec.fingerprint, rec.eventType, rec.note, rec.deviceTime, new Date().toISOString()] + + var deleteSql = 'DELETE FROM machine_events WHERE created < $1'; + var deleteValues = [new Date(Date.now() - TTL).toISOString()]; + + query(client, deleteSql, deleteValues, function(err) { + if (err) console.error(err) + }) + query(client, sql, values, function(err, results) { done(); return cb(err, results); diff --git a/lib/routes.js b/lib/routes.js index a032a3c7..8ecd8c60 100644 --- a/lib/routes.js +++ b/lib/routes.js @@ -78,6 +78,10 @@ function poll(req, res) { res.json(response); }); + + plugins.recordPing(session(req), req.query, function(err) { + if (err) console.error(err); + }); } function trade(req, res) { @@ -89,6 +93,7 @@ function trade(req, res) { function stateChange(req, res) { plugins.stateChange(session(req), req.body, function(err) { + if (err) console.error(err) res.json(200) }) } @@ -211,7 +216,11 @@ function init(localConfig) { } function session(req) { - return {fingerprint: getFingerprint(req), id: req.get('session-id')}; + return { + fingerprint: getFingerprint(req), + id: req.get('session-id'), + deviceTime: Date.parse(req.get('date')) + }; } function getFingerprint(req) {