completed tag series function and added SQLite compatibility
This commit is contained in:
72
www/app.js
72
www/app.js
@@ -6,35 +6,42 @@ var express = require('express'),
|
||||
bodyParser = require('body-parser'),
|
||||
errorHandler = require('errorhandler');
|
||||
var app = express();
|
||||
var fns;
|
||||
app.locals.DB_TYPE = "SQLite"; // or "MySQL"
|
||||
|
||||
/**
|
||||
* Configuration
|
||||
*/
|
||||
var mysql = require('mysql');
|
||||
var db_config = {
|
||||
host: 'localhost',
|
||||
user: 'website',
|
||||
password: 'henrypump'
|
||||
};
|
||||
var handleDisconnect = function () {
|
||||
console.log("Handling db disconnect gracefully");
|
||||
app.locals.db = mysql.createConnection(db_config);
|
||||
app.locals.db.connect(function (err) {
|
||||
if (err) {
|
||||
console.log('error when connecting to db:', err);
|
||||
setTimeout(handleDisconnect, 2000);
|
||||
}
|
||||
});
|
||||
app.locals.db.on('error', function (err) {
|
||||
console.log('db error', err);
|
||||
if (err.code === 'PROTOCOL_CONNECTION_LOST') {
|
||||
handleDisconnect();
|
||||
} else {
|
||||
throw err;
|
||||
}
|
||||
});
|
||||
};
|
||||
handleDisconnect();
|
||||
if (app.locals.DB_TYPE == "MySQL"){
|
||||
fns = require('./functions_MySQL.js');
|
||||
var mysql = require('mysql');
|
||||
var db_config = {
|
||||
host: 'localhost',
|
||||
user: 'website',
|
||||
password: 'henrypump'
|
||||
};
|
||||
var handleDisconnect = function () {
|
||||
console.log("Handling db disconnect gracefully");
|
||||
app.locals.db = mysql.createConnection(db_config);
|
||||
app.locals.db.connect(function (err) {
|
||||
if (err) {
|
||||
console.log('error when connecting to db:', err);
|
||||
setTimeout(handleDisconnect, 2000);
|
||||
}
|
||||
});
|
||||
app.locals.db.on('error', function (err) {
|
||||
console.log('db error', err);
|
||||
if (err.code === 'PROTOCOL_CONNECTION_LOST') {
|
||||
handleDisconnect();
|
||||
} else {
|
||||
throw err;
|
||||
}
|
||||
});
|
||||
};
|
||||
handleDisconnect();
|
||||
} else {
|
||||
fns = require('./functions_SQLite.js');
|
||||
}
|
||||
|
||||
app.set('port', process.env.PORT || 80);
|
||||
app.set('views', path.join(__dirname, 'views'));
|
||||
@@ -52,17 +59,18 @@ app.use(express.static(path.join(__dirname, 'public')));
|
||||
/**
|
||||
* Routes
|
||||
*/
|
||||
var fns = require('./functions.js');
|
||||
var angular = function(req, res) {
|
||||
res.render('angularIndex');
|
||||
};
|
||||
|
||||
app.get('/json/add/:tagName/:units', fns.addTag); // Adds a tag to the scan list
|
||||
app.get('/json/remove/:tag', fns.removeTag); // Removes a tag from the scan list
|
||||
app.get('/json/val/:tag', fns.latestTagValue); // Gets the latest value of a single tag
|
||||
app.get('/json/series/:tag/:hours', fns.seriesTagValues); // Gets all the values of a tag for the last X hours
|
||||
app.get('/json/tags', fns.allTags); // Lists all tags in the scan list
|
||||
app.get('/json/all', fns.allValues); // Gets the latest values of all tags in the scan list
|
||||
app.get('/json/get/id/:tagName', fns.tagID); // Gets the id for a tag name
|
||||
app.get('/json/get/tagName/:tagID', fns.tagName); // Gets the tagName for an ID
|
||||
app.get('/json/add/:tagName/:units', fns.addTag); // Adds a tag to the scan list
|
||||
app.get('/json/remove/:tag', fns.removeTag); // Removes a tag from the scan list
|
||||
app.get('/json/val/:tag', fns.latestTagValue); // Gets the latest value of a single tag
|
||||
app.get('/json/series/:tag/:hours', fns.seriesTagValues); // Gets all the values of a tag for the last X hours
|
||||
app.get('/json/tags', fns.allTags); // Lists all tags in the scan list
|
||||
app.get('/json/all', fns.allValues); // Gets the latest values of all tags in the scan list
|
||||
|
||||
app.get('*', angular);
|
||||
|
||||
|
||||
14
www/dbcreate_SQLite.sql
Normal file
14
www/dbcreate_SQLite.sql
Normal file
@@ -0,0 +1,14 @@
|
||||
CREATE TABLE IF NOT EXISTS tags (
|
||||
id INTEGER PRIMARY KEY,
|
||||
tagName TEXT,
|
||||
dateAdded TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
units TEXT,
|
||||
deleted INTEGER DEFAULT 0
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS values (
|
||||
id INTEGER PRIMARY KEY,
|
||||
tagID INTEGER,
|
||||
val REAL,
|
||||
dateAdded TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
)
|
||||
@@ -22,7 +22,7 @@ exports.addTag = function(req, res){
|
||||
res.json({status:"error", message:err});
|
||||
console.log(err);
|
||||
} else {
|
||||
res.json({status:"success"});
|
||||
res.json({status:"OK"});
|
||||
}
|
||||
});
|
||||
};
|
||||
@@ -34,7 +34,7 @@ exports.removeTag = function(req, res){
|
||||
res.json({status:"error", message:err});
|
||||
console.log(err);
|
||||
} else {
|
||||
res.json({status:"success"});
|
||||
res.json({status:"OK"});
|
||||
}
|
||||
});
|
||||
};
|
||||
@@ -46,13 +46,21 @@ exports.latestTagValue = function(req, res){
|
||||
res.json({status:"error", message:err});
|
||||
console.log(err);
|
||||
} else {
|
||||
res.json({status:"success", tag_val:rows[0]});
|
||||
res.json({status:"OK", tag_val:rows[0]});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
exports.seriesTagValues = function(req, res){
|
||||
res.json("not implemented");
|
||||
var query = "SELECT * FROM TagData.values WHERE tagID = "+ req.params.tag +" AND dateAdded > DATE_SUB(NOW(),INTERVAL "+ req.params.hours +" HOUR)";
|
||||
req.app.locals.db.query(query, function(err, rows, fields) {
|
||||
if (err){
|
||||
console.log(err);
|
||||
res.json({status:"error", message:err, query:query});
|
||||
} else {
|
||||
res.json({status:"OK", tag: req.params.tag, values:rows});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
exports.allTags = function(req, res){
|
||||
@@ -62,11 +70,11 @@ exports.allTags = function(req, res){
|
||||
res.json({status:"error", message:err});
|
||||
console.log(err);
|
||||
} else {
|
||||
res.json({status:"success", tags:rows});
|
||||
res.json({status:"OK", tags:rows});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
exports.allValues = function(req, res){
|
||||
res.json("not implemented");
|
||||
res.json(status:"error", message:"not implemented"});
|
||||
};
|
||||
174
www/functions_SQLite.js
Normal file
174
www/functions_SQLite.js
Normal file
@@ -0,0 +1,174 @@
|
||||
var dbFile = "/mnt/usb/data.db"
|
||||
// app.get('/json/add/:tag', fns.addTag); // Adds a tag to the scan list
|
||||
// app.get('/json/remove/:tag', fns.removeTag); // Removes a tag from the scan list
|
||||
// app.get('/json/val/:tag', fns.latestTagValue); // Gets the latest value of a single tag
|
||||
// app.get('/json/series/:tag/:hours', fns.seriesTagValues); // Gets all the values of a tag for the last X hours
|
||||
// app.get('/json/tags', fns.allTags); // Lists all tags in the scan list
|
||||
// app.get('/json/all', fns.allValues); // Gets the latest values of all tags in the scan list
|
||||
|
||||
|
||||
var getTagID = function(tagName, cb){
|
||||
//Returns function(err, id)
|
||||
var sqlite3 = require('sqlite3').verbose();
|
||||
var db = new sqlite3.Database(dbFile);
|
||||
|
||||
db.serialize(function(){
|
||||
var query = "SELECT id FROM TagData.tags WHERE tagName = ?";
|
||||
var prepQuery = db.prepare(query);
|
||||
prepQuery.all(tagName, function(err, rows){
|
||||
prepQuery.finalize();
|
||||
db.close();
|
||||
if (err){
|
||||
cb(err, null);
|
||||
} else {
|
||||
cb(null, rows[0].id);
|
||||
}
|
||||
})
|
||||
});
|
||||
};
|
||||
|
||||
var getTagName = function(tagID, cb){
|
||||
//Returns function(err, tagName)
|
||||
var sqlite3 = require('sqlite3').verbose();
|
||||
var db = new sqlite3.Database(dbFile);
|
||||
|
||||
db.serialize(function(){
|
||||
var query = "SELECT tagName FROM TagData.tags WHERE id = ?";
|
||||
var prepQuery = db.prepare(query);
|
||||
prepQuery.all(tagID, function(err, rows){
|
||||
prepQuery.finalize();
|
||||
db.close();
|
||||
if (err){
|
||||
cb(err, null);
|
||||
} else {
|
||||
cb(null, rows[0].tagName);
|
||||
}
|
||||
})
|
||||
});
|
||||
};
|
||||
|
||||
exports.tagID = function(req, res){
|
||||
getTagID(req.params.tagName, function(err, id){
|
||||
if (err){
|
||||
console.log(err);
|
||||
res.json({status:"error", message:err});
|
||||
} else {
|
||||
res.json({status: "OK", tagName: req.params.tagName, id: id});
|
||||
}
|
||||
})
|
||||
};
|
||||
|
||||
exports.getTagName = function(req, res){
|
||||
getTagName(req.params.tagID, function(err, tagName){
|
||||
if (err){
|
||||
console.log(err);
|
||||
res.json({status:"error", message:err});
|
||||
} else {
|
||||
res.json({status: "OK", tagID: req.params.tagID, tagName: tagName});
|
||||
}
|
||||
})
|
||||
};
|
||||
|
||||
exports.addTag = function(req, res){
|
||||
var sqlite3 = require('sqlite3').verbose();
|
||||
var db = new sqlite3.Database(dbFile);
|
||||
|
||||
db.serialize(function(){
|
||||
var query = "INSERT INTO TagData.tags (tagName, units) VALUES (?, ?)";
|
||||
var preqQuery = db.prepare(query);
|
||||
prepQuery.run(req.params.tagName, req.params.units, function(err){
|
||||
prepQuery.finalize();
|
||||
db.close();
|
||||
if (err) {
|
||||
res.json({status:"error", message:err});
|
||||
console.log(err);
|
||||
} else {
|
||||
res.json({status:"OK"});
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
exports.removeTag = function(req, res){
|
||||
var sqlite3 = require('sqlite3').verbose();
|
||||
var db = new sqlite3.Database(dbFile);
|
||||
|
||||
db.serialize(function(){
|
||||
var query = "UPDATE TagData.tags SET deleted = 1 WHERE id = ?";
|
||||
var preqQuery = db.prepare(query);
|
||||
prepQuery.run(req.params.tag, function(err) {
|
||||
prepQuery.finalize();
|
||||
db.close();
|
||||
if (err) {
|
||||
res.json({status:"error", message:err});
|
||||
console.log(err);
|
||||
} else {
|
||||
res.json({status:"OK"});
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
exports.latestTagValue = function(req, res){
|
||||
var sqlite3 = require('sqlite3').verbose();
|
||||
var db = new sqlite3.Database(dbFile);
|
||||
|
||||
db.serialize(function(){
|
||||
var query = "SELECT * FROM TagData.values WHERE id = (SELECT MAX(id) FROM TagData.values WHERE tagID = (SELECT id FROM TagData.tags WHERE tagName = ?))";
|
||||
var prepQuery = db.prepare(query);
|
||||
prepQuery.run(req.params.tag, function(err) {
|
||||
prepQuery.finalize();
|
||||
db.close();
|
||||
if (err) {
|
||||
res.json({status:"error", message:err});
|
||||
console.log(err);
|
||||
} else {
|
||||
res.json({status:"OK", tag_val:rows[0]});
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
exports.seriesTagValues = function(req, res){
|
||||
var sqlite3 = require('sqlite3').verbose();
|
||||
var db = new sqlite3.Database(dbFile);
|
||||
|
||||
db.serialize(function(){
|
||||
var query = "SELECT * FROM TagData.values WHERE tagID = ? AND dateAdded > DATE_SUB(NOW(),INTERVAL ? HOUR)";
|
||||
var prepQuery = db.prepare(query);
|
||||
prepQuery.all(req.params.tag, req.params.hours, function(err, rows){
|
||||
prepQuery.finalize();
|
||||
db.close();
|
||||
if (err){
|
||||
console.log(err);
|
||||
res.json({status:"error", message:err, query:query});
|
||||
} else {
|
||||
res.json({status:"OK", tag: req.params.tag, values:rows});
|
||||
}
|
||||
})
|
||||
});
|
||||
};
|
||||
|
||||
exports.allTags = function(req, res){
|
||||
var sqlite3 = require('sqlite3').verbose();
|
||||
var db = new sqlite3.Database(dbFile);
|
||||
|
||||
db.serialize(function(){
|
||||
var query = "SELECT * FROM TagData.tags WHERE deleted = 0";
|
||||
var prepQuery = db.prepare(query);
|
||||
prepQuery.all(function(err, rows) {
|
||||
prepQuery.finalize();
|
||||
db.close();
|
||||
if (err) {
|
||||
res.json({status:"error", message:err});
|
||||
console.log(err);
|
||||
} else {
|
||||
res.json({status:"OK", tags:rows});
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
exports.allValues = function(req, res){
|
||||
res.json({status: "error", message: "not implemented"});
|
||||
};
|
||||
Reference in New Issue
Block a user