Port profile api from wip/iob-cob #439

Merged
merged 3 commits into from Mar 8, 2015
View
1 env.js
@@ -41,6 +41,7 @@ function config ( ) {
env.mongo_collection = readENV('MONGO_COLLECTION', 'entries');
env.settings_collection = readENV('MONGO_SETTINGS_COLLECTION', 'settings');
env.treatments_collection = readENV('MONGO_TREATMENTS_COLLECTION', 'treatments');
+ env.profile_collection = readENV('MONGO_PROFILE_COLLECTION', 'profile');
env.devicestatus_collection = readENV('MONGO_DEVICESTATUS_COLLECTION', 'devicestatus');
env.enable = readENV('ENABLE');
View
@@ -1,6 +1,6 @@
'use strict';
-function create (env, entries, settings, treatments, devicestatus) {
+function create (env, entries, settings, treatments, profile, devicestatus) {
var express = require('express'),
app = express( )
;
@@ -47,6 +47,7 @@ function create (env, entries, settings, treatments, devicestatus) {
app.use('/', require('./entries/')(app, wares, entries));
app.use('/', require('./settings/')(app, wares, settings));
app.use('/', require('./treatments/')(app, wares, treatments));
+ app.use('/', require('./profile/')(app, wares, profile));
app.use('/', require('./devicestatus/')(app, wares, devicestatus));
// Status
View
@@ -0,0 +1,29 @@
+'use strict';
+
+var consts = require('../../constants');
+
+function configure (app, wares, profile) {
+ var express = require('express'),
+ api = express.Router( );
+
+ // invoke common middleware
+ api.use(wares.sendJSONStatus);
+ // text body types get handled as raw buffer stream
+ api.use(wares.bodyParser.raw( ));
+ // json body types get handled as parsed json
+ api.use(wares.bodyParser.json( ));
+ // also support url-encoded content-type
+ api.use(wares.bodyParser.urlencoded({ extended: true }));
+
+ // List settings available
+ api.get('/profile/', function(req, res) {
+ profile.list(function (err, attribute) {
+ return res.json(attribute);
+ });
+ });
+
+ return api;
+}
+
+module.exports = configure;
+
View
@@ -0,0 +1,24 @@
+'use strict';
+
+function configure (collection, storage) {
+
+ function create (obj, fn) {
+ obj.created_at = (new Date( )).toISOString( );
+ api( ).insert(obj, function (err, doc) {
+ fn(null, doc);
+ });
+ }
+
+ function list (fn) {
+ return api( ).find({ }).sort({created_at: -1}).toArray(fn);
+ }
+
+ function api ( ) {
+ return storage.pool.db.collection(collection);
+ }
+
+ api.list = list;
+ api.create = create;
+ return api;
+}
+module.exports = configure;
View
@@ -1,5 +1,5 @@
-function websocket (env, server, entries, treatments) {
+function websocket (env, server, entries, treatments, profiles) {
"use strict";
// CONSTANTS
var ONE_HOUR = 3600000,
@@ -29,6 +29,7 @@ var dir2Char = {
treatmentData = [],
mbgData = [],
calData = [],
+ profileData = [],
patientData = [];
function start ( ) {
@@ -146,6 +147,7 @@ function update() {
cgmData = [];
treatmentData = [];
mbgData = [];
+ profileData = [];
var earliest_data = now - TWO_DAYS;
var q = { find: {"date": {"$gte": earliest_data}} };
entries.list(q, function (err, results) {
@@ -188,8 +190,19 @@ function update() {
treatment.x = timestamp.getTime();
return treatment;
});
- // all done, do loadData
- loadData( );
+
+ profiles.list(function (err, results) {
+ // There should be only one document in the profile collection with a DIA. If there are multiple, use the last one.
+ results.forEach(function(element, index, array) {
+ if (element) {
+ if (element.dia) {
@dduugg

dduugg Mar 1, 2015

Contributor

Lines 197-198 could be simplified to if (element && element.dia) {, correct?

Also, consider a standard for loop that goes backward from the end of results, and breaks when it finds element.dia.

+ profileData[0] = element;
+ }
+ }
+ });
+ // all done, do loadData
+ loadData( );
+ });
});
});
@@ -237,6 +250,10 @@ function loadData() {
});
}
+ if (profileData) {
@dduugg

dduugg Mar 1, 2015

Contributor

Is this ever false? (an empty array is truthy).

+ var profile = profileData;
+ }
+
if (actualCurrent && actualCurrent < 39) errorCode = actualCurrent;
var actualLength = actual.length - 1;
@@ -271,7 +288,7 @@ function loadData() {
// consolidate and send the data to the client
var shouldEmit = is_different(actual, predicted, mbg, treatment, cal);
- patientData = [actual, predicted, mbg, treatment, cal];
+ patientData = [actual, predicted, mbg, treatment, profile, cal];
console.log('patientData', patientData.length);
if (shouldEmit) {
emitData( );
View
@@ -50,8 +50,9 @@ var express = require('express');
var entriesStorage = entries.storage(env.mongo_collection, store, pushover);
var settings = require('./lib/settings')(env.settings_collection, store);
var treatmentsStorage = treatments.storage(env.treatments_collection, store, pushover);
+var profile = require('./lib/profile')(env.profile_collection, store);
var devicestatusStorage = devicestatus.storage(env.devicestatus_collection, store);
-var api = require('./lib/api/')(env, entriesStorage, settings, treatmentsStorage, devicestatusStorage);
+var api = require('./lib/api/')(env, entriesStorage, settings, treatmentsStorage, profile, devicestatusStorage);
var pebble = require('./lib/pebble');
///////////////////////////////////////////////////
@@ -105,7 +106,7 @@ store(function ready ( ) {
// setup socket io for data and message transmission
///////////////////////////////////////////////////
var websocket = require('./lib/websocket');
- var io = websocket(env, server, entriesStorage, treatmentsStorage);
+ var io = websocket(env, server, entriesStorage, treatmentsStorage, profile);
});
///////////////////////////////////////////////////
View
@@ -28,6 +28,7 @@ var app = {}, browserSettings = {}, browserStorage = $.localStorage;
, latestUpdateTime
, prevSGV
, treatments
+ , profile
, cal
, padding = { top: 20, right: 10, bottom: 30, left: 10 }
, opacity = {current: 1, DAY: 1, NIGHT: 0.5}
@@ -124,7 +125,7 @@ var app = {}, browserSettings = {}, browserStorage = $.localStorage;
} else if (noise < 2 && browserSettings.showRawbg != 'always') {
return 0;
} else if (filtered == 0 || sgv < 40) {
- console.info("Skipping ratio adjustment for SGV " + sgv);
+ console.info('Skipping ratio adjustment for SGV ' + sgv);
return scale * (unfiltered - intercept) / slope;
} else {
var ratio = scale * (filtered - intercept) / slope / sgv;
@@ -1335,8 +1336,8 @@ var app = {}, browserSettings = {}, browserStorage = $.localStorage;
d.created_at = new Date(d.created_at);
});
- cal = d[4][d[4].length-1];
-
+ profile = d[4][0];
+ cal = d[5][d[5].length-1];
var temp1 = [ ];
if (cal && showRawBGs()) {