kevoree-atc-streamvisualiser
Version:
Basic visualisation of streams
140 lines (96 loc) • 2.99 kB
JavaScript
var AbstractComponent = require('kevoree-entities/lib/AbstractComponent');
var messages = [];
var scaleMessages = [];
var path = require('path');
var _ = require('underscore');
var express = require('express');
//var functions = require('./functions.js');
/**
* Kevoree component
* @type {StreamVisualiser}
*/
var StreamVisualiser = AbstractComponent.extend({
toString: 'StreamVisualiser',
tdef_version: 4,
/* This is an example of dictionary attribute that you can set for your entity */
dic_port: {
optional: false,
defaultValue: 8084
},
construct: function () {
this.server = null;
},
/**
* this method will be called by the Kevoree platform when your component has to start
* @param {Function} done
*/
start: function (done) {
var self = this;
var app = express();
app.use('/', express.static(path.join(__dirname, '..', 'public')));
app.get('/poll', function (req, res) {
var timestamp = parseInt(req.query.timestamp, 10);
// console.log(timestamp + '>' + JSON.stringify(messages) + ', poll'); // eslint-disable-line
if (isNaN(timestamp)) {
res.send(JSON.stringify(messages));
} else {
var newMessages = _.filter(messages, function (elem) {
return elem.timestamp > timestamp;
});
res.send(JSON.stringify(newMessages));
}
});
app.get('/scalePoll', function(req,res){
var timestamp = parseInt(req.query.timestamp, 10);
// console.log(timestamp + '>' + JSON.stringify(scaleMessages) + ', scalepoll'); // eslint-disable-line
if (isNaN(timestamp)) {
res.send(JSON.stringify(scaleMessages));
} else {
var newScaleMessages = _.filter(scaleMessages, function (elem) {
return elem.timestamp > timestamp;
});
res.send(JSON.stringify(newScaleMessages));
}
});
// read port value from Kevoree
var port = this.dictionary.getNumber('port', StreamVisualiser.prototype.dic_port.defaultValue);
this.server = app.listen(port, function () {
self.log.info(self.toString(), '['+self.getName()+'] server listening at 0.0.0.0:' + port);
});
done();
},
/**
* this method will be called by the Kevoree platform when your component has to stop
* @param {Function} done
*/
stop: function (done) {
if (this.server) {
this.server.close(done);
} else {
done();
}
},
/**
*
*
*/
in_input: function (msg) {
var item = JSON.parse(msg);
if(item.item !=undefined){
console.log('> item msg received:' + item.item.id); // eslint-disable-line
// console.log('> item:' + item); // eslint-disable-line
messages.push({
"data": item,
"timestamp": (new Date().getTime())
});
}//end if
else{
console.log('> scale msg received:' + item.msg); // eslint-disable-line
scaleMessages.push({
"scaleData": item,
"timestamp": (new Date().getTime())
});
}//end else
}//end input()
});
module.exports = StreamVisualiser;