Starts work on POCONSOLE-75 for Backup and Restore of PLC values

This commit is contained in:
Patrick McDonagh
2016-12-01 19:10:09 -06:00
parent 680e0f9c19
commit 8b5a89a851
8 changed files with 151 additions and 15 deletions

View File

@@ -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)

View File

@@ -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,
}

View File

@@ -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/<int:id>')
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)

View File

@@ -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;
});

View File

@@ -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){

View File

@@ -9,7 +9,7 @@
</ul>
</div>
<div class="col-sm-10 pull-right">
<div ng-if="loading" class="well"><img src="/img/loading.gif" style="display: table-cell; vertical-align: middle"/></div>
<div ng-if="loading" class="well"><img src="/images/loading.gif" style="display: table-cell; vertical-align: middle"/></div>
<div ng-if="!loading">
<div ng-if="error" class="well"><h2>Error: {{error}}</h2></div>
<div ng-if="!error">

View File

@@ -18,7 +18,7 @@
</ul>
</div>
<div class="col-sm-10 pull-right">
<div ng-if="loading" class="well"><img src="/img/loading.gif" style="display: table-cell; vertical-align: middle"/></div>
<div ng-if="loading" class="well"><img src="/images/loading.gif" style="display: table-cell; vertical-align: middle"/></div>
<div ng-if="!loading">
<div ng-if="error" class="well"><h2>Error: {{error}}</h2></div>
<div ng-if="!error">

View File

@@ -9,7 +9,7 @@
</ul>
</div>
<div class="col-sm-10 pull-right">
<div ng-if="loading" class="well"><img src="/img/loading.gif" style="display: table-cell; vertical-align: middle"/></div>
<div ng-if="loading" class="well"><img src="/images/loading.gif" style="display: table-cell; vertical-align: middle"/></div>
<div ng-if="!loading">
<div class="row">
<div class="col-sm-12">