Skip to content

Commit c1729c0

Browse files
committed
improve glucose-get-last performance
1 parent 3430f6b commit c1729c0

File tree

1 file changed

+27
-17
lines changed

1 file changed

+27
-17
lines changed

lib/glucose-get-last.js

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,41 @@
1+
12
function getDateFromEntry(entry) {
23
return entry.date || Date.parse(entry.display_time) || Date.parse(entry.dateString);
34
}
45

56
var getLastGlucose = function (data) {
6-
data = data.filter(function(obj) {
7-
return obj.glucose || obj.sgv;
8-
}).map(function prepGlucose (obj) {
9-
//Support the NS sgv field to avoid having to convert in a custom way
10-
obj.glucose = obj.glucose || obj.sgv;
11-
if ( obj.glucose !== null ) {
12-
return obj;
13-
}
14-
});
15-
16-
var now = data[0];
17-
var now_date = getDateFromEntry(now);
7+
var now = undefined;
8+
var now_date = undefined;
189
var change;
1910
var last_deltas = [];
2011
var short_deltas = [];
2112
var long_deltas = [];
2213
var last_cal = 0;
2314

2415
//console.error(now.glucose);
25-
for (var i=1; i < data.length; i++) {
16+
for (var i=0; i < data.length; i++) {
2617
// if we come across a cal record, don't process any older SGVs
27-
if (typeof data[i] !== 'undefined' && data[i].type === "cal") {
18+
var item = data[i];
19+
item.glucose = item.glucose || item.sgv;
20+
if (!item.glucose) {
21+
continue;
22+
}
23+
if (typeof now === 'undefined') {
24+
now = item;
25+
now_date = getDateFromEntry(item);
26+
continue;
27+
}
28+
if (typeof now === 'undefined') {
29+
continue;
30+
}
31+
if (item.type === "cal") {
2832
last_cal = i;
2933
break;
3034
}
35+
3136
// only use data from the same device as the most recent BG data point
32-
if (typeof data[i] !== 'undefined' && data[i].glucose > 38 && data[i].device === now.device) {
33-
var then = data[i];
37+
if (item.glucose > 38 && item.device === now.device) {
38+
var then = item;
3439
var then_date = getDateFromEntry(then);
3540
var avgdelta = 0;
3641
var minutesago;
@@ -39,7 +44,10 @@ var getLastGlucose = function (data) {
3944
// multiply by 5 to get the same units as delta, i.e. mg/dL/5m
4045
change = now.glucose - then.glucose;
4146
avgdelta = change/minutesago * 5;
42-
} else { console.error("Error: date field not found: cannot calculate avgdelta"); }
47+
} else {
48+
console.error("Error: date field not found: cannot calculate avgdelta");
49+
continue;
50+
}
4351
//if (i < 5) {
4452
//console.error(then.glucose, minutesago, avgdelta);
4553
//}
@@ -60,6 +68,8 @@ var getLastGlucose = function (data) {
6068
// long_deltas are calculated from everything ~20-40 minutes ago
6169
} else if (17.5 < minutesago && minutesago < 42.5) {
6270
long_deltas.push(avgdelta);
71+
} else if (minutesago > 42.5) {
72+
break;
6373
}
6474
}
6575
}

0 commit comments

Comments
 (0)