33var es = require ( 'event-stream' ) ;
44var sgvdata = require ( 'sgvdata' ) ;
55
6+ var TEN_MINS = 10 * 60 * 1000 ;
7+
68/**********\
79 * Entries
810 * Encapsulate persistent storage of sgv entries.
911\**********/
1012
11- function entries ( name , storage ) {
13+ function storage ( name , storage , pushover ) {
1214
1315 // TODO: Code is a little redundant.
1416
@@ -61,7 +63,13 @@ function entries (name, storage) {
6163
6264 // return writable stream to lint each sgv record passing through it
6365 function map ( ) {
64- return sgvdata . lint ( ) ;
66+ function iter ( item , next ) {
67+ if ( item && item . type ) {
68+ return next ( null , item ) ;
69+ }
70+ return next ( null , sgvdata . sync . json . echo ( item ) ) ;
71+ }
72+ return es . map ( iter ) ;
6573 }
6674
6775 // writable stream that persists all records
@@ -73,7 +81,6 @@ function entries (name, storage) {
7381 if ( err ) return fn ( err , result ) ;
7482 // batch insert a list of records
7583 create ( result , fn ) ;
76- return ;
7784 }
7885 // lint and store the entire list
7986 return es . pipeline ( map ( ) , es . writeArray ( done ) ) ;
@@ -100,11 +107,39 @@ function entries (name, storage) {
100107 firstErr = firstErr || err ;
101108 totalCreated += created ;
102109 } ) ;
110+ sendPushover ( doc ) ;
103111 } ) ;
104112 fn ( firstErr , totalCreated , docs ) ;
105113 } ) ;
106114 }
107115
116+ //currently the Android upload will send the last MBG over and over, make sure we get a single notification
117+ var lastMBG = 0 ;
118+
119+ function sendPushover ( doc ) {
120+ if ( doc . type && doc . mbg && doc . type == 'mbg' && doc . date && doc . date != lastMBG && pushover ) {
121+ var offset = new Date ( ) . getTime ( ) - doc . date ;
122+ if ( offset > TEN_MINS ) {
123+ console . info ( 'No MBG Pushover, offset: ' + offset + ' too big, doc.date: ' + doc . date + ', now: ' + new Date ( ) . getTime ( ) ) ;
124+ } else {
125+ var msg = {
126+ expire : 14400 , // 4 hours
127+ message : '\nMeter BG: ' + doc . mbg ,
128+ title : 'Calibration' ,
129+ sound : 'magic' ,
130+ timestamp : new Date ( doc . date ) ,
131+ priority : 0 ,
132+ retry : 30
133+ } ;
134+
135+ pushover . send ( msg , function ( err , result ) {
136+ console . log ( result ) ;
137+ } ) ;
138+ }
139+ lastMBG = doc . date ;
140+ }
141+ }
142+
108143 function getEntry ( fn , id ) {
109144 console . info ( "trying to find entry for id: " + id ) ;
110145 with_collection ( function ( err , collection ) {
@@ -152,6 +187,19 @@ function entries (name, storage) {
152187 return api ;
153188}
154189
190+ function ensureIndexes ( name , storage ) {
191+ storage . with_collection ( name ) ( function ( err , collection ) {
192+ if ( err ) {
193+ console . error ( "ensureIndexes, unable to get collection for: " + name + " - " + err ) ;
194+ } else {
195+ storage . ensureIndexes ( collection , [ 'date' , 'type' , 'sgv' ] ) ;
196+ }
197+ } ) ;
198+ }
199+
155200// expose module
156- module . exports = entries ;
201+ module . exports = {
202+ storage : storage ,
203+ ensureIndexes : ensureIndexes
204+ } ;
157205
0 commit comments