first pass at devicestatus api/storage current only used in the /pebble endpoint

This commit is contained in:
Jason Calabrese
2014-08-31 23:02:09 -07:00
parent b63e7be276
commit 601662d193
7 changed files with 106 additions and 5 deletions
+5
View File
@@ -0,0 +1,5 @@
#!/bin/sh
curl -H "Content-Type: application/json" -XPOST 'http://localhost:1337/api/v1/devicestatus/' -d '{
"uploaderBattery": 55
}'
+2
View File
@@ -27,6 +27,8 @@ function config ( ) {
env.mongo_collection = process.env.CUSTOMCONNSTR_mongo_collection || process.env.MONGO_COLLECTION || 'entries';
env.settings_collection = process.env.CUSTOMCONNSTR_mongo_settings_collection || 'settings';
env.treatments_collection = process.env.CUSTOMCONNSTR_mongo_treatments_collection || 'treatments';
env.devicestatus_collection = process.env.CUSTOMCONNSTR_mongo_devicestatus_collection || 'devicestatus';
var shasum = crypto.createHash('sha1');
var useSecret = (process.env.API_SECRET && process.env.API_SECRET.length > 0);
env.api_secret = null;
+47
View File
@@ -0,0 +1,47 @@
'use strict';
var consts = require('../../constants');
function configure (app, wares, devicestatus) {
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('/devicestatus/', function(req, res) {
devicestatus.list(function (err, profiles) {
return res.json(profiles);
});
});
function config_authed (app, api, wares, devicestatus) {
api.post('/devicestatus/', /*TODO: auth disabled for quick UI testing... wares.verifyAuthorization, */ function(req, res) {
var obj = req.body;
devicestatus.create(obj, function (err, created) {
if (err)
res.sendJSONStatus(res, consts.HTTP_INTERNAL_ERROR, 'Mongo Error', err);
else
res.json(created);
});
});
}
if (app.enabled('api') || true /*TODO: auth disabled for quick UI testing...*/) {
config_authed(app, api, wares, devicestatus);
}
return api;
}
module.exports = configure;
+2 -1
View File
@@ -1,6 +1,6 @@
'use strict';
function create (env, entries, settings, treatments) {
function create (env, entries, settings, treatments, devicestatus) {
var express = require('express'),
app = express( )
;
@@ -30,6 +30,7 @@ function create (env, entries, settings, treatments) {
app.use('/', require('./entries/')(app, wares, entries));
app.use('/', require('./settings/')(app, wares, settings));
app.use('/', require('./treatments/')(app, wares, treatments));
app.use('/', require('./devicestatus/')(app, wares, devicestatus));
// Status
app.use('/', require('./status')(app, wares));
+34
View File
@@ -0,0 +1,34 @@
'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 tail(fn) {
return api( ).find({ }).sort({created_at: -1}).limit(1).toArray(function(err, entries) {
if (entries && entries.length > 0)
fn(err, entries[0]);
else
fn(err, null);
});
}
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;
api.tail = tail;
return api;
}
module.exports = configure;
+13 -2
View File
@@ -22,6 +22,7 @@ function directionToTrend (direction) {
function pebble (req, res) {
var FORTY_MINUTES = 2400000;
var cgmData = [ ];
var uploaderBattery;
function requestMetric() {
var units = req.query.units;
@@ -60,6 +61,7 @@ function pebble (req, res) {
// obj.y = element.sgv;
// obj.x = element.date;
obj.datetime = element.date;
obj.battery = "" + uploaderBattery;
// obj.date = element.date.toString( );
cgmData.push(obj);
}
@@ -70,11 +72,20 @@ function pebble (req, res) {
res.end( );
// collection.db.close();
}
req.entries.list({count: 2}, get_latest);
req.devicestatus.tail(function(err, value) {
if (!err && value) {
uploaderBattery = value.uploaderBattery;
} else {
console.error("req.devicestatus.tail", err);
}
req.entries.list({count: 2}, get_latest);
});
}
function configure (entries) {
function configure (entries, devicestatus) {
function middle (req, res, next) {
req.entries = entries;
req.devicestatus = devicestatus;
next( );
}
return [middle, pebble];
+3 -2
View File
@@ -33,7 +33,8 @@ var pushover = require('./lib/pushover')(env);
var entries = require('./lib/entries')(env.mongo_collection, store);
var settings = require('./lib/settings')(env.settings_collection, store);
var treatments = require('./lib/treatments')(env.treatments_collection, store, pushover);
var api = require('./lib/api/')(env, entries, settings, treatments);
var devicestatus = require('./lib/devicestatus')(env.devicestatus_collection, store);
var api = require('./lib/api/')(env, entries, settings, treatments, devicestatus);
var pebble = require('./lib/pebble');
///////////////////////////////////////////////////
@@ -53,7 +54,7 @@ app.enable('trust proxy'); // Allows req.secure test on heroku https connections
app.use('/api/v1', api);
// pebble data
app.get('/pebble', pebble(entries));
app.get('/pebble', pebble(entries, devicestatus));
//app.get('/package.json', software);