webgme-rosmod
Version:
This repository contains ROSMOD developed for WebGME. ROSMOD is a web-based, collaborative, modeling and execution environment for distributed embedded applications built using ROS http://rosmod.rcps.isis.vanderbilt.edu
101 lines (100 loc) • 2.96 kB
JavaScript
define([], function() {
'use strict';
return {
getTimeBeginEnd: function(log_data) {
var logKeys = Object.keys(log_data);
var range = {
begin: -1,
end: -1
};
logKeys.map(function(key) {
var log = log_data[key];
if (range.begin == -1 || range.begin > log.begin) {
range.begin = log.begin;
}
if (range.end == -1 || range.end < log.end) {
range.end = log.end;
}
});
return range;
},
alignLogs: function(log_data, begin, end) {
var logKeys = Object.keys(log_data);
logKeys.map(function(key) {
var log = log_data[key];
var beginY = log.data[0][1];
var endY = log.data[log.data.length-1][1];
log.data = [[begin, beginY]].concat(log.data);
log.data.push([end, endY]);
});
return log_data;
},
removeAlignment: function(log_data) {
var logKeys = Object.keys(log_data);
logKeys.map(function(key) {
var log = log_data[key];
log.data.splice(0, 1); // remove the first element
log.data.splice(-1, 1); // remove the last element
});
return log_data;
},
getDataFromAttribute: function(attribute) {
var log_data = {};
// get numerical data of the form:
// ROSMOD::<DATA NAME>::<TIMESTAMP>::<DATA VALUE>
// or get text logs of the form
// ROSMOD::<DATA NAME>::<TIMESTAMP>::<SINGLE LINE TEXT LOG>
//var re = /ROSMOD::(.+)::(\d+)::(-?\d+(?:\.\d+)?)/gi;
var re = /ROSMOD::(.+)::(\d+)::(.+)/gi;
var result = re.exec(attribute);
var annY = 1;
var annYIncrement = 0;
while(result != null) {
var alias = result[1];
if (!log_data[alias]) {
log_data[alias] = {
name : alias,
data : [],
begin: -1,
end: -1,
annotations: [],
_lastAnnX: 0
};
}
var time = parseFloat(result[2]);
time = time / 1000000.0;
// KEEP TRACK OF THE BEGIN AND END OF THIS LOG
if (log_data[alias].begin == -1) {
log_data[alias].begin = time;
}
if (log_data[alias].end == -1) {
log_data[alias].end = time;
}
else if (log_data[alias].end < time) {
log_data[alias].end = time;
}
// WHAT KIND OF LOG IS THIS?
var data = parseFloat(result[3]);
if (isNaN(data)) {
// the data/text didn't start with a number, so must be annotation
//if (Math.floor(time) == Math.floor(log_data[alias]._lastAnnX))
//time += 1; // make a minor difference to annotations can be clicked
log_data[alias].annotations.push({
x: time,
y: annY,
text: result[3]
});
//log_data[alias]._lastAnnX = time;
annY += annYIncrement;
log_data[alias].data.push([time, annY, 15]);
}
else {
// a number was successfully parsed from the log, plot it
log_data[alias].data.push([time, data, 1]);
}
result = re.exec(attribute);
}
return log_data;
}
};
});