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",