@@ -24,6 +24,7 @@ function bridged (entries) {
24
24
mostRecentRecord = glucose [ i ] . date ;
25
25
}
26
26
}
27
+ //console.log("DEXCOM: Most recent entry received; "+new Date(mostRecentRecord).toString());
27
28
}
28
29
entries . create ( glucose , function stored ( err ) {
29
30
if ( err ) {
@@ -46,12 +47,12 @@ function options (env) {
46
47
, minutes : env . extendedSettings . bridge . minutes || 1440
47
48
} ;
48
49
49
- var interval = env . extendedSettings . bridge . interval || 60000 * 2.5 ; // Default: 2.5 minutes
50
+ var interval = env . extendedSettings . bridge . interval || 60000 * 2.6 ; // Default: 2.6 minutes
50
51
51
52
if ( interval < 1000 || interval > 300000 ) {
52
53
// Invalid interval range. Revert to default
53
- console . error ( "Invalid interval set: [" + interval + "ms]. Defaulting to 2.5 minutes." )
54
- interval = 60000 * 2.5 // 2.5 minutes
54
+ console . error ( "Invalid interval set: [" + interval + "ms]. Defaulting to 2.6 minutes." )
55
+ interval = 60000 * 2.6 // 2.6 minutes
55
56
}
56
57
57
58
return {
@@ -75,15 +76,53 @@ function create (env, bus) {
75
76
76
77
bridge . startEngine = function startEngine ( entries ) {
77
78
79
+
78
80
opts . callback = bridged ( entries ) ;
79
81
82
+ let last_run = new Date ( 0 ) . getTime ( ) ;
83
+ let last_ondemand = new Date ( 0 ) . getTime ( ) ;
84
+
85
+ function should_run ( ) {
86
+ // Time we expect to have to collect again
87
+ const msRUN_AFTER = ( 300 + 20 ) * 1000 ;
88
+ const msNow = new Date ( ) . getTime ( ) ;
89
+
90
+ const next_entry_expected = mostRecentRecord + msRUN_AFTER ;
91
+
92
+ if ( next_entry_expected > msNow ) {
93
+ // we're not due to collect a new slot yet. Use interval
94
+ const ms_since_last_run = msNow - last_run ;
95
+ if ( ms_since_last_run < interval ) {
96
+ return false ;
97
+ }
98
+
99
+ last_run = msNow ;
100
+ last_ondemand = new Date ( 0 ) . getTime ( ) ;
101
+ console . log ( "DEXCOM: Running poll" ) ;
102
+ return true ;
103
+ }
104
+
105
+ const ms_since_last_run = msNow - last_ondemand ;
106
+
107
+ if ( ms_since_last_run < interval ) {
108
+ return false ;
109
+ }
110
+ last_run = msNow ;
111
+ last_ondemand = msNow ;
112
+ console . log ( "DEXCOM: Data due, running extra poll" ) ;
113
+ return true ;
114
+ }
115
+
80
116
let timer = setInterval ( function ( ) {
117
+ if ( ! should_run ( ) ) return ;
118
+
119
+
81
120
opts . fetch . minutes = parseInt ( ( new Date ( ) - mostRecentRecord ) / 60000 ) ;
82
121
opts . fetch . maxCount = parseInt ( ( opts . fetch . minutes / 5 ) + 1 ) ;
83
122
opts . firstFetchCount = opts . fetch . maxCount ;
84
123
console . log ( "Fetching Share Data: " , 'minutes' , opts . fetch . minutes , 'maxCount' , opts . fetch . maxCount ) ;
85
124
engine ( opts ) ;
86
- } , interval ) ;
125
+ } , 1000 /* interval*/ ) ;
87
126
88
127
if ( bus ) {
89
128
bus . on ( 'teardown' , function serverTeardown ( ) {
0 commit comments