diff options
author | Trygve Laugstøl <trygvis@inamo.no> | 2015-10-18 10:36:01 +0200 |
---|---|---|
committer | Trygve Laugstøl <trygvis@inamo.no> | 2015-10-18 10:36:01 +0200 |
commit | cc0dcb25054e9dff3fdc4b58eaf861d35d0b06de (patch) | |
tree | cebd1fe9b2e884ad7c11297f54204752e4d5f8ee /apps/device.js | |
download | diller-server-cc0dcb25054e9dff3fdc4b58eaf861d35d0b06de.tar.gz diller-server-cc0dcb25054e9dff3fdc4b58eaf861d35d0b06de.tar.bz2 diller-server-cc0dcb25054e9dff3fdc4b58eaf861d35d0b06de.tar.xz diller-server-cc0dcb25054e9dff3fdc4b58eaf861d35d0b06de.zip |
wip
Diffstat (limited to 'apps/device.js')
-rw-r--r-- | apps/device.js | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/apps/device.js b/apps/device.js new file mode 100644 index 0000000..1b8e169 --- /dev/null +++ b/apps/device.js @@ -0,0 +1,55 @@ +var pg, log; + +function init(config) { + pg = config.pg; + log = config.log; +} +exports.init = init; + +var deviceR = /^\/diller\/([0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5})\//; + +function onMessage(topic, message, payload) { + var matches = deviceR.exec(topic) + + if (!matches) { + log.warn('no match: ', topic); + return; + } + + var mac = matches[1]; + + pg.connect(function (err, client, done) { + if (err) { + done(); + log.error('Could not connect to postgres', err); + return; + } + + client.query('select count(*) as count from device where key=$1', [mac], function (err, result) { + if (err) { + done(); + log.error('error running query', err); + return; + } + + if (result.rows[0].count > 0) { + done(); + return; + } + + log.info('New device:', mac); + + client.query('insert into device(id, key, created_timestamp) values(default, $1, current_timestamp) returning id', [mac], function (err, result) { + if (err) { + done(); + log.error('error inserting new device', err); + } + + log.info('New device created', result.rows[0].id); + done(); + }); + }); + }); +} + +exports.onMessage = onMessage; |