diff --git a/www/app.js b/www/app.js index 91f45ff..e4e4092 100644 --- a/www/app.js +++ b/www/app.js @@ -65,15 +65,14 @@ var angular = function(req, res) { res.render('angularIndex'); }; -app.get('/json/get/id/:tagName', fns.getTagID); // Gets the id for a tag name -app.get('/json/tag/add/:tagName/:units/:min/:max', fns.createTag); // Adds a tag to the scan list -app.get('/json/tag/update/:id/:tagName/:units/:min/:max', fns.updateTag); // Updates tag data -app.get('/json/tag/delete/:tag', fns.deleteTag); // Removes a tag from the scan list -app.get('/json/tag/:id', fns.getTag); // Lists all tags in the scan list -app.get('/json/tag', fns.getAllTags); // Lists all tags in 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/all', fns.allValues); // Gets the latest values of all tags in the scan list +app.post('/json/tag/add', fns.createTag); // Adds a tag to the scan list +app.post('/json/tag/update/', fns.updateTag); // Updates tag data +app.get('/json/tag/delete/:tag', fns.deleteTag); // Removes a tag from the scan list +app.get('/json/tag/:id', fns.getTag); // Lists all tags in the scan list +app.get('/json/tag', fns.getAllTags); // Lists all tags in the scan list +app.get('/json/val/:tag', fns.latestValueSingleTag); // 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/all', fns.latestValueAllTags); // Gets the latest values of all tags in the scan list app.get('*', angular); diff --git a/www/functions_SQLite.js b/www/functions_SQLite.js index 51e31ee..7d055f6 100644 --- a/www/functions_SQLite.js +++ b/www/functions_SQLite.js @@ -1,53 +1,35 @@ // var dbFile = "/usr/db/data.db"; var dbFile = "/home/pi/data.db"; // var dbFile = '/Users/patrickjmcd/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) +exports.getAllTags = function(req, res){ var sqlite3 = require('sqlite3').verbose(); var db = new sqlite3.Database(dbFile); db.serialize(function(){ - var query = "SELECT id FROM tags WHERE tagName = ?"; + var query = "SELECT * FROM tags WHERE deleted = 0"; var prepQuery = db.prepare(query); - prepQuery.all(tagName, function(err, rows){ + prepQuery.all(function(err, rows) { prepQuery.finalize(); db.close(); - if (err){ - cb(err, null); + if (err) { + res.json({status:"error", message:err}); + console.log(err); } else { - cb(null, rows[0].id); + res.json({status:"OK", tags:rows}); } - }) + }); }); }; -exports.getTagID = 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.createTag = function(req, res){ var sqlite3 = require('sqlite3').verbose(); var db = new sqlite3.Database(dbFile); db.serialize(function(){ - var query = "INSERT INTO tags (tagName, units, minExpected, maxExpected) VALUES (?, ?, ?, ?)"; + var query = "INSERT INTO tags (tagName, units, minExpected, maxExpected, vanityName, description) VALUES (?, ?, ?, ?, ?, ?)"; var prepQuery = db.prepare(query); - prepQuery.run(req.params.tagName, req.params.units, req.params.min, req.params.max, function(err){ + prepQuery.run(req.body.tagName, req.body.units, req.body.minExpected, req.body.maxExpected, req.body.vanityName, req.body.description, function(err){ prepQuery.finalize(); db.close(); if (err) { @@ -85,9 +67,9 @@ exports.updateTag = function(req, res){ var db = new sqlite3.Database(dbFile); db.serialize(function(){ - var query = "UPDATE tags set tagName = ?, units = ?, minExpected = ?, maxExpected = ? WHERE id = ?"; + var query = "UPDATE tags set tagName = ?, units = ?, minExpected = ?, maxExpected = ?, vanityName = ?, description = ? WHERE id = ?"; var prepQuery = db.prepare(query); - prepQuery.run(req.params.tagName, req.params.units, req.params.min, req.params.max, req.params.id, function(err) { + prepQuery.run(req.body.tagName, req.body.units, req.body.minExpected, req.body.maxExpected, req.body.vanityName, req.body.description, req.body.id, function(err) { prepQuery.finalize(); db.close(); if (err) { @@ -120,9 +102,27 @@ exports.deleteTag = function(req, res){ }); }; +exports.seriesTagValues = function(req, res){ + var sqlite3 = require('sqlite3').verbose(); + var db = new sqlite3.Database(dbFile); + db.serialize(function(){ + var query = "SELECT * FROM vals WHERE tagID = ? AND dateAdded > DATETIME('now', '-1 HOUR')"; + var prepQuery = db.prepare(query); + prepQuery.all(parseInt(req.params.tag), 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, vals:rows}); + } + }) + }); +}; -exports.latestTagValue = function(req, res){ +exports.latestValueSingleTag = function(req, res){ var sqlite3 = require('sqlite3').verbose(); var db = new sqlite3.Database(dbFile); @@ -143,49 +143,7 @@ exports.latestTagValue = function(req, res){ }); }; -exports.seriesTagValues = function(req, res){ - var sqlite3 = require('sqlite3').verbose(); - var db = new sqlite3.Database(dbFile); - - db.serialize(function(){ - var query = "SELECT * FROM vals WHERE tagID = ? AND dateAdded > DATETIME('now', '-24 HOUR')"; - var prepQuery = db.prepare(query); - prepQuery.all(parseInt(req.params.tag), 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, vals:rows}); - } - }) - }); -}; - -exports.getAllTags = function(req, res){ - var sqlite3 = require('sqlite3').verbose(); - var db = new sqlite3.Database(dbFile); - - db.serialize(function(){ - var query = "SELECT * FROM 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){ +exports.latestValueAllTags = function(req, res){ var sqlite3 = require('sqlite3').verbose(); var db = new sqlite3.Database(dbFile); diff --git a/www/public/js/controller.js b/www/public/js/controller.js index a0d98a5..ec67e67 100644 --- a/www/public/js/controller.js +++ b/www/public/js/controller.js @@ -108,13 +108,57 @@ tsCtrlrs.factory('tags',function($q, $http, $log){ } }); return deferred.promise; - } + }; + + var createTag = function(tag){ + $http.post('/json/tag/add', { + tagName: tag.tagName, + vanityName: tag.vanityName, + units: tag.units, + minExpected: tag.minExpected, + maxExpected: tag.maxExpected, + description: tag.description + }).success(function(data){ + return data; + }); + }; + + var updateTag = function(tag){ + $log.info("updateTag called with "+ JSON.stringify(tag)); + $http.post('/json/tag/update', { + id: tag.id, + tagName: tag.tagName, + vanityName: tag.vanityName, + units: tag.units, + minExpected: tag.minExpected, + maxExpected: tag.maxExpected, + description: tag.description + }).success(function(data){ + return data; + }).error(function(err){ + $log.warn("updateTag Error: " + err); + }); + }; + + var deleteTag = function(id){ + var deferred = $q.defer(); + var url = '/json/tag/delete/' + id; + $http.get(url).success(function(data) { + deferred.resolve({ + status: data.status + }); + }); + return deferred.promise; + }; return { getTag: getTag, getTagList: getTagList, getTagHistory: getTagHistory, - getCurrentValues: getCurrentValues + getCurrentValues: getCurrentValues, + createTag: createTag, + updateTag: updateTag, + deleteTag: deleteTag, }; }); @@ -126,77 +170,132 @@ tsCtrlrs.controller('mainCtrl', function($scope, Page, Alerts) { tsCtrlrs.controller('dashboardCtrl', function($scope, $route, $http, $routeParams, Page, Alerts, $log, tags) { Page.setTitle('Dashboard'); Page.setPage('dashboard'); - $scope.loading = true; - var getCurrentValues = tags.getCurrentValues(); - getCurrentValues.then(function(data) { - $scope.loading = false; - if (data.status == "OK"){ - $scope.vals = data.vals; - $scope.error = false; - } else { - $scope.error = data.message; - } - }); + $scope.loadDashboard = function(){ + $scope.loading = true; + var getCurrentValues = tags.getCurrentValues(); + getCurrentValues.then(function(data) { + $scope.loading = false; + if (data.status == "OK"){ + $scope.vals = data.vals; + $scope.error = false; + } else { + $scope.error = data.message; + } + }); + }; + $scope.loadDashboard(); }); tsCtrlrs.controller('tagsCtrl', function($scope, $route, $http, $routeParams, Page, Alerts, $log, tags) { Page.setTitle('Tags'); Page.setPage('tags'); - $scope.loading = true; - var getTagList = tags.getTagList(); - getTagList.then(function(data) { - $scope.loading = false; - if (data.status == "OK"){ - $scope.tags = data.tags; - $scope.error = false; - } else { - $scope.error = data.message; - } - }); + $scope.loadTagList = function(){ + $scope.loading = true; + var getTagList = tags.getTagList(); + getTagList.then(function(data) { + $scope.loading = false; + if (data.status == "OK"){ + $scope.tags = data.tags; + $scope.error = false; + } else { + $scope.error = data.message; + } + }); + }; + $scope.loadTagList(); + + $scope.submitAddTag = function(){ + var createStatus = tags.createTag($scope.newTag); + $scope.createStatus = createStatus.status; + $scope.loadTagList(); + } + + $scope.deleteTag = function(id){ + var deleteTag = tags.deleteTag(id); + deleteTag.then(function(data){ + $log.info("deleting tag "+ id + " status: " + data.status); + if (data.status == "OK"){ + $scope.error = false; + $scope.loadTagList(); + } else { + $scope.error = data.message; + } + }) + }; + + $scope.openEditTag = function(id){ + var getTag = tags.getTag(id); + getTag.then(function(data){ + if (data.status == "OK"){ + $scope.error = false; + $scope.editTag = data.tag; + $log.info("Started editing tag with parameters: "+ JSON.stringify($scope.editTag)); + } else { + $scope.error = data.message; + } + }); + }; + + $scope.submitEditTag = function(){ + var editStatus = tags.updateTag($scope.editTag); + $log.info(editStatus); + $scope.editStatus = editStatus.status; + $scope.loadTagList(); + } + }); tsCtrlrs.controller('tagValsCtrl', function($scope, $route, $http, $routeParams, Page, Alerts, $log, tags) { Page.setTitle('Tag Series'); Page.setPage('tags'); - $scope.loading = true; - var getTag = tags.getTag($routeParams.tagID); - getTag.then(function(tagData){ - if (tagData.status == "OK"){ - $scope.tag = tagData.tag; - Page.setTitle('Tag Series: '+ tagData.tag.tagName); - var getTagHistory = tags.getTagHistory($routeParams.tagID); - getTagHistory.then(function(data) { - $scope.loading = false; - if (data.status == "OK"){ - $scope.data = data; - $scope.error = false; + $scope.loadTagVals = function(){ + $scope.loading = true; + var getTag = tags.getTag($routeParams.tagID); + getTag.then(function(tagData){ + if (tagData.status == "OK"){ + $scope.tag = tagData.tag; + Page.setTitle('Tag Series: '+ tagData.tag.tagName); + var getTagHistory = tags.getTagHistory($routeParams.tagID); + getTagHistory.then(function(data) { + $scope.loading = false; + if (data.status == "OK"){ + $scope.data = data; + $scope.error = false; + + $scope.options = { + series: [ + { + axis: "y", + dataset: "vals", + key: "val", + label: "Tag Value", + color: "#1f77b4", + type: ['line'], + id: 'tagChart' + } + ], + axes: { + x: { + key: "id", + // type: "date" + } + } + }; + } else { + $scope.error = data.message; + } + }); + } else { + $scope.loading = false; + $scope.error = data.message; + } + }); + }; + $scope.loadTagVals(); + + + + + - $scope.options = { - series: [ - { - axis: "y", - dataset: "vals", - key: "val", - label: "Tag Value", - color: "#1f77b4", - type: ['line'], - id: 'tagChart' - } - ], - axes: { - x: { - key: "id", - // type: "date" - } - } - }; - } else { - $scope.error = data.message; - } - }); - } else { - $scope.loading = false; - $scope.error = data.message; - } - }); }); diff --git a/www/public/partials/dashboard.html b/www/public/partials/dashboard.html index 6798d9a..0d03a23 100644 --- a/www/public/partials/dashboard.html +++ b/www/public/partials/dashboard.html @@ -13,12 +13,14 @@

Error Caught!

{{message}}
+
+
diff --git a/www/public/partials/tagVals.html b/www/public/partials/tagVals.html index a7ac036..6c7f5a9 100644 --- a/www/public/partials/tagVals.html +++ b/www/public/partials/tagVals.html @@ -13,12 +13,14 @@

Error Caught!

{{message}}
+
+
diff --git a/www/public/partials/tags.html b/www/public/partials/tags.html index 50ea561..a707433 100644 --- a/www/public/partials/tags.html +++ b/www/public/partials/tags.html @@ -1,3 +1,96 @@ + + + + + + + +
@@ -39,11 +132,14 @@ {{tag.minExpected}} {{tag.maxExpected}} {{tag.units}} - - + + +