”2016-08-30”

This commit is contained in:
Martin Donnelly 2016-08-30 16:45:03 +01:00
parent f1a0c84e6e
commit 5daa84ba77
6 changed files with 144 additions and 29 deletions

View File

@ -32,6 +32,8 @@ var mdotApiV2 = require('./lib/mdot/apiv2.js');
var trackApi = require('./lib/mdot/track.js'); var trackApi = require('./lib/mdot/track.js');
var meetingApi = require('./lib/mdot/meeting.js'); var meetingApi = require('./lib/mdot/meeting.js');
var messageApi = require('./lib/mdot/message.js');
process.env.NODE_ENV = process.env.NODE_ENV || 'development'; process.env.NODE_ENV = process.env.NODE_ENV || 'development';
if (process.env.NODE_ENV === 'production') { if (process.env.NODE_ENV === 'production') {
@ -86,6 +88,9 @@ function originIsAllowed(origin) {
// Put logic here to detect whether the specified origin is allowed. // Put logic here to detect whether the specified origin is allowed.
return true; return true;
} }
app.get('/graph', authentication(({ app.get('/graph', authentication(({
hash: 'sha1', // Type of hash hash: 'sha1', // Type of hash
file: 'htpasswd', // Path of file file: 'htpasswd', // Path of file
@ -98,22 +103,26 @@ app.get('/meeting', function(req, res) {
res.render('meeting',{delimiter: '^'}); res.render('meeting',{delimiter: '^'});
}); });
// Glue routes // Glue routes
mdotApi(app); mdotApi(app);
mdotApiV2(app); mdotApiV2(app);
trackApi(app); trackApi(app);
meetingApi(app); meetingApi(app);
messageApi(app);
var mqttClient = require('./lib/mqtt/mqttClient');
//var mqttClient = require('./lib/mqtt/mqttClient');
var mqtt; var mqtt;
if (isProduction) { if (isProduction) {
mqtt = new mqttClient.mqttClient(busEmitter); // mqtt = new mqttClient.mqttClient(busEmitter);
} }
var port = (process.env.VCAP_APP_PORT || 3010); var port = (process.env.VCAP_APP_PORT || 3011);
var host = (process.env.VCAP_APP_HOST || 'localhost'); var host = (process.env.VCAP_APP_HOST || 'localhost');
app.get('*', function(req, res) { app.get('*', function(req, res) {

View File

@ -14,6 +14,19 @@ var mdot = require('./lib/mdot/mdot.js');
( (
function() { function() {
var doBulkInsert = (qArray) => {
'use strict';
logger.info('Doing bulk insert...');
dbSave.doBulkInsert(qArray)
.then(function(d) {
logger.info('Finished bulk insert');
})
.catch(function(e) {
logger.error(e);
});
};
var doInsertEntry = (obj) => { var doInsertEntry = (obj) => {
// Logger.info('sendSocket: ' + JSON.stringify(obj)); // Logger.info('sendSocket: ' + JSON.stringify(obj));
@ -44,12 +57,18 @@ var mdot = require('./lib/mdot/mdot.js');
}; };
var device = 13; var queries = [];
var device = 8;
var ids = ['CENSIS-LoRa-1','CENSIS-LoRa-2','CENSIS-LoRa-3','CENSIS-LoRa-4','HIE-mobile-1','HIE-demo','HIE-mobile-2','HIE-smart-campus-1','HIE-smart-campus-2','HIE-smart-campus-3','HIE-smart-campus-4','HIE-smart-campus-5','HIE-smart-campus-6','HIE-smart-campus-7','HIE-mDot-1']; var ids = ['CENSIS-LoRa-1','CENSIS-LoRa-2','CENSIS-LoRa-3','CENSIS-LoRa-4','HIE-mobile-1','HIE-demo','HIE-mobile-2','HIE-smart-campus-1','HIE-smart-campus-2','HIE-smart-campus-3','HIE-smart-campus-4','HIE-smart-campus-5','HIE-smart-campus-6','HIE-smart-campus-7','HIE-mDot-1'];
var data = {id: ids[device]}; var data = {id: ids[device]};
var startTs = Sugar.Date.create('2016-07-19 14:46:48'); //var startTs = Sugar.Date.create('2015-07-19 14:46:48');
var endTs = Sugar.Date.create('2016-08-29 10:03:39'); var startTs = Sugar.Date.create('2015-8-29 08:46:48');
var endTs = Sugar.Date.create('2016-08-29 09:35:36');
// first record recorded "2016-08-29 09:44:59+00"
// logger.debug(startTs, endTs); // logger.debug(startTs, endTs);
// logger.debug(startTs.getTime(), endTs.getTime()); // logger.debug(startTs.getTime(), endTs.getTime());
@ -63,18 +82,14 @@ var mdot = require('./lib/mdot/mdot.js');
//Logger.debug(d); //Logger.debug(d);
logger.info('Number of items:', d.events.length); logger.info('Number of items:', d.events.length);
for (var item in d.events) { for (var item in d.events) {
var newItem = d.events[item].evt; var newItem = d.events[item];
newItem.topic=['','','','',ids[device]].join('/');
// logger.debug(newItem);
// var gwTime = new Date(newItem.gateway_info['0'].gw_time);
/* if ((gwTime > startTs) && (gwTime < endTs)) {
// doInsertEntry(newItem);
} else {
logger.warn('Out of range...');
}*/
queries.push(dbSave.genRawQuery(newItem));
} }
doBulkInsert(queries);
logger.info('Number of queries:', queries.length);
}) })
.catch(function(err) { .catch(function(err) {
'use strict'; 'use strict';

View File

@ -38,7 +38,7 @@ function getData(data, prev) {
json: true json: true
}; };
logger.debug(options); // logger.debug(options);
// This is put together to get around the Paging that bluemix uses. // This is put together to get around the Paging that bluemix uses.
// They limit the number of results to 100 per query // They limit the number of results to 100 per query

View File

@ -0,0 +1,71 @@
'use strict';
var logger = require('log4js').getLogger();
var mdot = require('./mdot.js');
var db = require('../server/db-connector').dbConnection;
var dbSave = require('../server/db-save')(db);
module.exports = function(app) {
var express = require('express');
var messageRouter = express.Router();
messageRouter.post('/', function(req, res) {
var obj = req.body;
if (req.body.type !== 'mDot') {
logger.error('Not of the required type!');
res.status(500).json({});
return -1;
} else {
logger.debug(req.body.type, req.body.device);
dbSave.addProcessedEvent(obj)
.then(function(d) {
'use strict';
// Logger.info('Finished - Processed');
res.status(200).json({});
})
.catch(function(e) {
'use strict';
logger.error(e);
res.status(500).json({});
});
}
/* If (!req.params.id) {
logger.error('MDot','Missing required parameter');
res.status(400).send({
status: 'error',
error: 'missing required parameter'
});
return;
}
if (req.query.hasOwnProperty('start') && req.query.hasOwnProperty('end')) {
data.start = req.query.start;
data.end = req.query.end;
}
if (req.params.hasOwnProperty('id')) {
data.id = req.params.id;
dbMdot.doGet(data)
.then((d) => {
res.json({events:d});
})
.catch((e) => {
logger.error(e);
res.status(500).json({});
});
}*/
});
app.use('/apiv2/message/', messageRouter);
};

View File

@ -9,15 +9,13 @@
var pgp = require('pg-promise')(); var pgp = require('pg-promise')();
/* /*var cn = {
var cn = {
host: 'localhost', host: 'localhost',
port: 5432, port: 5432,
database: 'mdot', database: 'mdot',
user: 'postgres', user: 'postgres',
password: '' password: ''
}; };*/
*/
// ElephantSql settings // ElephantSql settings

View File

@ -6,6 +6,25 @@ module.exports = function(db) {
var module = {}; var module = {};
module.deviceIds = ['CENSIS-LoRa-1','CENSIS-LoRa-2','CENSIS-LoRa-3','CENSIS-LoRa-4','HIE-mobile-1','HIE-demo','HIE-mobile-2','HIE-smart-campus-1','HIE-smart-campus-2','HIE-smart-campus-3','HIE-smart-campus-4','HIE-smart-campus-5','HIE-smart-campus-6','HIE-smart-campus-7','HIE-mDot-1']; module.deviceIds = ['CENSIS-LoRa-1','CENSIS-LoRa-2','CENSIS-LoRa-3','CENSIS-LoRa-4','HIE-mobile-1','HIE-demo','HIE-mobile-2','HIE-smart-campus-1','HIE-smart-campus-2','HIE-smart-campus-3','HIE-smart-campus-4','HIE-smart-campus-5','HIE-smart-campus-6','HIE-smart-campus-7','HIE-mDot-1'];
module.doBulkInsert = function(bulkData) {
return new Promise(function(resolve, reject) {
db.tx(function(t) {
// t = this;
// creating a sequence of transaction queries:
// returning a promise that determines a successful transaction:
return this.batch(bulkData); // all of the queries are to be resolved;
})
.then(function(data) {
return resolve(data);
})
.catch(function(error) {
return reject(error);
});
});
};
module.sqlInsertRawEvent = function(data) { module.sqlInsertRawEvent = function(data) {
let _data = data; let _data = data;
console.log('sqlInsertRawEvent'); console.log('sqlInsertRawEvent');
@ -24,8 +43,6 @@ module.exports = function(db) {
module.sqlInsertDecoded = function(data) { module.sqlInsertDecoded = function(data) {
let _data = data; let _data = data;
console.log('sqlInsertDecoded', _data.deviceid, _data.timestamp);
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
db.func('insert_decoded', db.func('insert_decoded',
[_data.deviceid, _data.timestamp, _data.lux, _data.co2, _data.temp, _data.humidity, _data.sound]) [_data.deviceid, _data.timestamp, _data.lux, _data.co2, _data.temp, _data.humidity, _data.sound])
@ -40,6 +57,11 @@ module.exports = function(db) {
}; };
module.genRawQuery = function(data) {
const timestamp = new Date(data.timestamp['$date']);
return db.func('insert_raw', [timestamp, data.device_type, data.device_id, data.evt_type, data.evt]);
};
module.addNewEvent = function(data) { module.addNewEvent = function(data) {
console.log('addNewEvent'); console.log('addNewEvent');
var self = this; var self = this;
@ -62,7 +84,7 @@ module.exports = function(db) {
}; };
module.addProcessedEvent = function(data) { module.addProcessedEvent = function(data) {
console.log('addProcessedEvent'); // console.log('addProcessedEvent');
var self = this; var self = this;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -70,7 +92,7 @@ module.exports = function(db) {
self.sqlInsertDecoded(_data) self.sqlInsertDecoded(_data)
.then((d)=> { .then((d)=> {
console.log('Postgres returns', d); // console.log('Postgres returns', d);
return resolve({reply: 'Processed event inserted'}); return resolve({reply: 'Processed event inserted'});
}) })
.catch((err)=> { .catch((err)=> {
@ -95,7 +117,7 @@ module.exports = function(db) {
_obj.humid = (parseInt(_data[12] + _data[13] + _data[14] + _data[15] + _data[16], 10) / 10); _obj.humid = (parseInt(_data[12] + _data[13] + _data[14] + _data[15] + _data[16], 10) / 10);
_obj.noise = parseInt('0x' + ('0' + bytes[17]).substr(-2) + ('0' + bytes[18]).substr(-2)); _obj.noise = parseInt('0x' + ('0' + bytes[17]).substr(-2) + ('0' + bytes[18]).substr(-2));
_obj.binData = bytes; _obj.binData = bytes;
console.log(_obj); // console.log(_obj);
return _obj; return _obj;
}; };
@ -104,7 +126,7 @@ module.exports = function(db) {
var workObj = {}; var workObj = {};
var device_name = data.topic.split('/')[4]; var device_name = data.topic.split('/')[4];
console.log('Device_name', device_name); // console.log('Device_name', device_name);
workObj.deviceid = self.deviceIds.indexOf(device_name); workObj.deviceid = self.deviceIds.indexOf(device_name);
if (data.hasOwnProperty('data')) { if (data.hasOwnProperty('data')) {