Improved device timeline

Ylian Saint-Hilaire committed Jun 18, 2019 at 09:28 UTC 3b6a805c7c07d84949e6f90c30ab850ee2cd5814
2 files changed +12 -26
meshuser.js
+11 -25
@@ -424,34 +424,20 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
424 if ((err == null) && (docs != null) && (docs.length > 0)) {
425 var timeline = [], time = null, previousPower;
426 for (i in docs) {
427 - var doc = docs[i];
428 -
429 - // Skip all starting power 0 events.
430 - if ((time == null) && (doc.power == 0) && ((doc.oldPower == null) || (doc.oldPower == 0))) { continue; }
431 -
427 + var doc = docs[i], j = parseInt(i);
428 doc.time = Date.parse(doc.time);
433 - if (time == null) {
434 - // First element
429 + if (time == null) { // First element
430 + // Skip all starting power 0 events.
431 + if ((doc.power == 0) && ((doc.oldPower == null) || (doc.oldPower == 0))) continue;
432 + time = doc.time;
433 + if (doc.oldPower) { timeline.push(doc.oldPower, time / 1000, doc.power); } else { timeline.push(0, time / 1000, doc.power); }
434 + } else if (previousPower != doc.power) { // Delta element
435 + // If this event is of a short duration (2 minutes or less), skip it.
436 + if ((docs.length > (j + 1)) && ((Date.parse(docs[j + 1].time) - doc.time) < 120000)) continue;
437 + timeline.push((doc.time - time) / 1000, doc.power);
438 time = doc.time;
436 - if (doc.oldPower) { timeline.push(doc.oldPower); } else { timeline.push(0); }
437 - timeline.push(time / 1000);
438 - timeline.push(doc.power);
439 - previousPower = doc.power;
440 - } else {
441 - // Delta element
442 - if ((previousPower != doc.power) && ((doc.time - time) > 60000)) { // To boost speed, small blocks get approximated.
443 - // Create a new timeline
444 - timeline.push((doc.time - time) / 1000);
445 - timeline.push(doc.power);
446 - time = doc.time;
447 - previousPower = doc.power;
448 - } else {
449 - // Merge with previous timeline
450 - timeline[timeline.length - 2] += ((doc.time - time) / 1000);
451 - timeline[timeline.length - 1] = doc.power;
452 - previousPower = doc.power;
453 - }
439 }
440 + previousPower = doc.power;
441 }
442 try { ws.send(JSON.stringify({ action: 'powertimeline', nodeid: command.nodeid, timeline: timeline, tag: command.tag })); } catch (ex) { }
443 } else {
package.json
+1 -1
@@ -1,6 +1,6 @@
1 {
2 "name": "meshcentral",
3 - "version": "0.3.6-p",
3 + "version": "0.3.6-r",
4 "keywords": [
5 "Remote Management",
6 "Intel AMT",