diff --git a/app/datalogger/api.py b/app/datalogger/api.py index 15e6563..1dd422e 100644 --- a/app/datalogger/api.py +++ b/app/datalogger/api.py @@ -19,3 +19,4 @@ manager.create_api(EventConfig, methods=['GET', 'POST', 'DELETE', 'PUT']) manager.create_api(Event, methods=['GET', 'POST', 'DELETE'], allow_delete_many=True) manager.create_api(RunStatus, methods=['GET', 'POST', 'DELETE'], allow_delete_many=True) manager.create_api(FluidShot, methods=['GET', 'POST', 'DELETE', 'PUT'], allow_delete_many=True) +manager.create_api(BackupRestore, methods=['GET', 'POST', 'DELETE', 'PUT'], allow_delete_many=True) diff --git a/app/datalogger/models.py b/app/datalogger/models.py index 5823d16..bcf3ed2 100644 --- a/app/datalogger/models.py +++ b/app/datalogger/models.py @@ -5,6 +5,10 @@ from .. import db class Config(db.Model): + """Configuration table + + Holds the extra configuration parameters + """ __tablename__ = "configs" _id = db.Column(db.Integer, primary_key=True) parameter = db.Column(db.String(100), unique=True) @@ -363,3 +367,28 @@ class FluidShot(db.Model): "created_on": self.created_on, "updated_on": self.updated_on, } + + +class BackupRestore(db.Model): + __tablename__ = "backup_restore" + _id = db.Column(db.Integer, primary_key=True) + tag = db.Column(db.String(128)) + tag_type = db.Column(db.String(128)) + device_id = db.Column(db.Integer, db.ForeignKey('devices._id')) + device = db.relationship(Device) + value = db.Column(db.String(128)) + created_on = db.Column(db.DateTime(), default=datetime.utcnow) + updated_on = db.Column(db.DateTime(), default=datetime.utcnow, onupdate=datetime.utcnow) + + @property + def serialize(self): + return { + "_id": self._id, + "tag": self.tag, + "tag_type": self.tag_type, + "device_id": self.device_id, + "device": self.device.serialize, + "value": self.value, + "created_on": self.created_on, + "updated_on": self.updated_on, + } diff --git a/app/datalogger/views.py b/app/datalogger/views.py index 7575291..b8d17c0 100644 --- a/app/datalogger/views.py +++ b/app/datalogger/views.py @@ -9,6 +9,7 @@ from datetime import datetime from app import app, db from app.datalogger.models import * from app.datalogger.getDailyTotals import getTotals +from pycomm_helper.utils import readTag ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif', 'doc', 'docx', 'xls', 'xlsx', 'zip']) @@ -203,3 +204,33 @@ def get_csv_for_stroke(stroke_number): mimetype="text/csv", headers={"Content-disposition": "attachment; filename=card_{}.csv".format(res._id)}) + + +@app.route('/api/backup_restore_update_all') +def update_backup_restore_all(): + all_br = [i.serialize for i in BackupRestore.query.all()] + for i in range(0, len(all_br)): + try: + # read_value = readTag(all_br[i]['device']['address'], all_br[i]['tag']) + read_value = (1.234, 'REAL') + all_br[i]['value'] = read_value[0] + all_br[i]['tag_type'] = read_value[1] + BackupRestore.query.filter_by(_id=all_br[i]['_id']).update({"value": str(all_br[i]['value']), "tag_type": all_br[i]['tag_type']}) + except: + print("Error backing up tag value for tag {}".format(all_br[i]['tag'])) + continue + return jsonify(all_br) + + +@app.route('/api/backup_restore_update/') +def update_backup_restore(id): + single_br = BackupRestore.query.filter_by(_id=id).one().serialize + try: + # read_value = readTag(single_br['device']['address'], single_br['tag']) + read_value = (1.234, 'REAL') + single_br['value'] = read_value[0] + single_br['tag_type'] = read_value[1] + BackupRestore.query.filter_by(_id=single_br['_id']).update({"value": str(single_br['value']), "tag_type": single_br['tag_type']}) + except: + print("Error backing up tag value for tag {}".format(single_br['tag'])) + return jsonify(single_br) diff --git a/app/static/js/backup_restore.factory.js b/app/static/js/backup_restore.factory.js new file mode 100644 index 0000000..291a1d2 --- /dev/null +++ b/app/static/js/backup_restore.factory.js @@ -0,0 +1,75 @@ +poconsole.factory('BackupRestore', function($q, $http, $log){ + var service = {}; + + service.getBRTag = function(id){ + var deferred = $q.defer(); + $http.get('/api/backup_restore/' + id).success(function(data) { + deferred.resolve(data); + }); + return deferred.promise; + }; + + service.createBRTag = function(brTag){ + $http.post('/api/backup_restore', { + tag: brTag.tag, + }).success(function(data){ + return data; + }); + }; + + service.updateBRTag = function(brTag){ + var put_obj = { + tag: brTag.tag + }; + + if (brTag.data_type){ + put_obj.data_type = brTag.data_type; + } + + if (brTag.value){ + put_ojb.value = brTag.value; + } + + $http.put('/api/backup_restore/'+ brTag._id, data=put_obj).success(function(data){ + return data; + }).error(function(err){ + $log.warn("updateTag Error: " + err); + }); + }; + + service.deleteBRTag = function(id){ + var deferred = $q.defer(); + var url = '/api/backup_restore/' + id; + $http.delete(url).success(function(data) { + deferred.resolve({ + data: data + }); + }); + return deferred.promise; + }; + + service.updateBRTagValuesAll = function(){ + var deferred = $q.defer(); + var url = '/api/backup_restore_update_all/'; + $http.get(url).success(function(data) { + deferred.resolve({ + data: data + }); + }); + return deferred.promise; + }; + + service.updateBRTagValuesSingle = function(id){ + var deferred = $q.defer(); + var url = '/api/backup_restore_update/' + id.toString(); + $http.get(url).success(function(data) { + deferred.resolve({ + data: data + }); + }); + return deferred.promise; + }; + + + return service; +}); diff --git a/app/static/js/tags.factory.js b/app/static/js/tags.factory.js index 3ee0488..647062e 100644 --- a/app/static/js/tags.factory.js +++ b/app/static/js/tags.factory.js @@ -64,15 +64,15 @@ poconsole.factory('Tag',function($q, $http, $log, dateConversion){ $http.post('/api/tags', { tag: tag.tag, name: tag.name, - tag_class_id: parseInt(tag.tag_class_id), + tag_category: tag.tag_category, device_id: parseInt(tag.device_id), + description: tag.description, + data_type: tag.data_type, + change_threshold: tag.change_threshold, + guarantee_sec: tag.guarantee_sec, units: tag.units, min_expected: tag.min_expected, - max_expected: tag.max_expected, - guarantee_sec: tag.guarantee_sec, - change_threshold: tag.change_threshold, - description: tag.description, - data_type_id: parseInt(tag.data_type_id) + max_expected: tag.max_expected }).success(function(data){ return data; }); @@ -83,15 +83,15 @@ poconsole.factory('Tag',function($q, $http, $log, dateConversion){ var put_obj = { tag: tag.tag, name: tag.name, - tag_class_id: parseInt(tag.tag_class_id), + tag_category: tag.tag_category, device_id: parseInt(tag.device_id), + description: tag.description, + data_type: tag.data_type, + change_threshold: tag.change_threshold, + guarantee_sec: tag.guarantee_sec, units: tag.units, min_expected: tag.min_expected, - max_expected: tag.max_expected, - guarantee_sec: tag.guarantee_sec, - change_threshold: tag.change_threshold, - description: tag.description, - data_type_id: parseInt(tag.data_type_id) + max_expected: tag.max_expected }; console.log({id: tag._id, put_obj: put_obj}); $http.put('/api/tags/'+ tag._id, data=put_obj).success(function(data){ diff --git a/app/static/templates/card.html b/app/static/templates/card.html index 78b2e58..4ed5a44 100644 --- a/app/static/templates/card.html +++ b/app/static/templates/card.html @@ -9,7 +9,7 @@
-
+

Error: {{error}}

diff --git a/app/static/templates/latestcard.html b/app/static/templates/latestcard.html index 988663a..8ebff02 100644 --- a/app/static/templates/latestcard.html +++ b/app/static/templates/latestcard.html @@ -18,7 +18,7 @@
-
+

Error: {{error}}

diff --git a/app/static/templates/multiplecards.html b/app/static/templates/multiplecards.html index 27c0743..3e55b63 100644 --- a/app/static/templates/multiplecards.html +++ b/app/static/templates/multiplecards.html @@ -9,7 +9,7 @@
-
+