-
Notifications
You must be signed in to change notification settings - Fork 402
Expand file tree
/
Copy pathoref0-mdt-trend.js
More file actions
executable file
·129 lines (111 loc) · 2.84 KB
/
oref0-mdt-trend.js
File metadata and controls
executable file
·129 lines (111 loc) · 2.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/usr/bin/env node
function findRecord(arr, tell, date) {
for (var i = 0; i < arr.length; ++i)
{
if (arr[i]._tell == tell && arr[i].date == date)
{
return i;
}
}
return -1;
}
function usage ( ) {
console.log('usage: ', process.argv.slice(0, 2), '<glucose.json>');
}
if (!module.parent) {
var glucose_input = process.argv[2];
if ([null, '--help', '-h', 'help'].indexOf(glucose_input) > 0) {
usage( );
process.exit(0)
}
if (!glucose_input) {
usage( );
process.exit(1);
}
var cwd = process.cwd();
var glucose_data = require(cwd + '/' + glucose_input);
glucose_data.sort(function (a, b) { return Date.parse(a.date) - Date.parse(b.date) });
filtered = glucose_data.filter(function(x) { return x.name == "GlucoseSensorData" });
var last_entries = [];
var last_entry_used = 0;
var window_mins = 15;
var max_entries = window_mins / 5;
var max_time = window_mins * 1000 * 60;
var last_date = new Date(0);
var last_glucose = 0;
for (var i = 0; i < filtered.length; ++i) {
var record = filtered[i];
var output_record = glucose_data[findRecord(glucose_data, record._tell, record.date)];
var current_date = Date.parse(record.date);
var delta = 0; //record.sgv - last_glucose;
var delta_time = 0;
if (record.name != "GlucoseSensorData")
{
continue;
}
if (record.sgv == 0)
{
continue;
}
var used_records = 0;
for (var j = 0; j < max_entries; j++)
{
var past_record = last_entries[j];
if (typeof past_record == "undefined" || past_record.sgv == 0)
{
continue;
}
var entry_delta_time = current_date - past_record.time;
if (entry_delta_time <= max_time)
{
delta_time = entry_delta_time;
delta += ((record.sgv - past_record.sgv) * 1000 * 60) / delta_time;
used_records++;
}
}
delta /= used_records;
last_entries[last_entry_used] = {time: current_date, sgv: record.sgv};
last_entry_used = (last_entry_used + 1 ) % max_entries;
if (current_date - last_date <= max_time)
{
if (delta > 3)
{
output_record.trend_arrow = "DOUBLE_UP";
output_record.direction = "DoubleUp";
}
else if (delta > 2)
{
output_record.trend_arrow = "SINGLE_UP";
output_record.direction = "SingleUp";
}
else if (delta > 1)
{
output_record.trend_arrow = "45_UP";
output_record.direction = "FortyFiveUp";
}
else if (delta < -3)
{
output_record.trend_arrow = "DOUBLE_DOWN";
output_record.direction = "DoubleDown";
}
else if (delta < -2)
{
output_record.trend_arrow = "SINGLE_DOWN";
output_record.direction = "SingleDown";
}
else if (delta < -1)
{
output_record.trend_arrow = "45_DOWN";
output_record.direction = "FortyFiveDown";
}
else
{
output_record.trend_arrow = "FLAT";
output_record.direction = "Flat";
}
}
last_glucose = record.sgv;
last_date = current_date;
}
console.log(JSON.stringify(glucose_data));
}