diff --git a/daq_sample/sampleData.py b/daq_sample/sampleData.py index dc111a3..1df38fb 100644 --- a/daq_sample/sampleData.py +++ b/daq_sample/sampleData.py @@ -1,7 +1,7 @@ #!/usr/bin/env python ''' -MySQL Tag Server +Sample Tag generator Created on April 7, 2016 @author: Patrick McDonagh @description: Continuously loops through a list of tags to store values from a PLC into a MySQL database @@ -15,7 +15,7 @@ import requests import json # DEFAULTS -db_address = "10.10.10.10:3000" +db_address = "localhost:5000" db_url = "https://{}".format(db_address) scan_rate = 30 # seconds save_all = "test" # use True, False, or any string @@ -61,9 +61,8 @@ def main(): global db_address, scan_rate, save_all try: # Get tags stored in database - get_tag_request_data = {'where': '{"tag_class": 5}'} - get_tag_request = requests.get('{}/tag'.format(db_url), params=get_tag_request_data, verify=False) - tags = json.loads(get_tag_request.text) + get_tag_request = requests.get('{}/api/tags'.format(db_url), verify=False) + tags = json.loads(get_tag_request.text)['objects'] except Exception as e: print("Error getting tags: {}".format(e)) time.sleep(10) @@ -91,10 +90,9 @@ def main(): except Exception as e: print("Error getting save-all: {}".format(e)) print("I'll just use {} as the save-all parameter...".format(save_all)) - for t in tags: # name, tag, db_id, data_type, change_threshold, guarantee_sec, mapFn=None, device_type='CLX', ip_address='192.168.1.10'): - tag_store[t['name']] = Sample(t['name'], t['tag'], t['id'], t['data_type'], t['change_threshold'], t['guarantee_sec'], mapFn=t['map_function'], ip_address=t['deviceID']['address'], db_address=db_address) + tag_store[t['name']] = Sample(t['name'], t['tag'], t['id'], t['data_type_id'], t['change_threshold'], t['guarantee_sec'], mapFn=t['map_function'], ip_address=t['device']['address'], db_address=db_address) while True: for tag in tag_store: diff --git a/web_db/flask/app/__init__.py b/web_db/flask/app/__init__.py index 1bd78d5..7b480a6 100644 --- a/web_db/flask/app/__init__.py +++ b/web_db/flask/app/__init__.py @@ -1,7 +1,8 @@ # project/__init__.py -from flask import Flask, render_template, request, session, send_from_directory -from flask.ext.sqlalchemy import SQLAlchemy +from flask import Flask, render_template, request, session, send_from_directory, jsonify +from flask_sqlalchemy import SQLAlchemy +from sqlalchemy import and_ app = Flask('app', static_url_path='') @@ -11,12 +12,31 @@ app.config.update( ) db = SQLAlchemy(app) - - @app.route('/', defaults={'path': ''}) @app.route('/') def catch_all(path): return app.send_static_file('index.html') -from datalogger import datalogger +from .datalogger import datalogger +from .datalogger.models import * +@app.route('/api/latest') +def get_latest_tag_vals(): + res = db.engine.execute('SELECT v1.id as id, v1.created_on as dtime, t.id as t_id, t.name as name, t.tag as tag, v1.value as value, t.units as units, t.description as description, t.min_expected as min_expected, t.max_expected as max_expected FROM tag_vals v1 INNER JOIN tags t ON t.id = v1.tag_id WHERE v1.id = (SELECT v2.id FROM tag_vals v2 WHERE v2.tag_id = v1.tag_id ORDER BY v2.id DESC LIMIT 1) ORDER BY t.id') + lat = res.fetchall() + latest_tags = list(map(latest_to_obj, lat)) + return jsonify(latest_tags) + + +@app.route('/api/valuesbetween///') +def get_tag_vals_between(ids, start, end): + ids = ids.split(',') + res = Tag_val.query.filter(and_(Tag_val.tag_id.in_(ids), Tag_val.created_on > start, Tag_val.created_on <= end)).all() + return jsonify([i.serialize for i in res]) + + +@app.route('/api/multipletags/') +def get_multiple_tags(ids): + ids = ids.split(',') + res = Tag.query.filter(Tag.id.in_(ids)).all() + return jsonify([i.serialize for i in res]) \ No newline at end of file diff --git a/web_db/flask/app/datalogger/__init__.py b/web_db/flask/app/datalogger/__init__.py index 2ff2340..fc80254 100644 --- a/web_db/flask/app/datalogger/__init__.py +++ b/web_db/flask/app/datalogger/__init__.py @@ -1 +1 @@ -from datalogger import * \ No newline at end of file +pass \ No newline at end of file diff --git a/web_db/flask/app/datalogger/datalogger.py b/web_db/flask/app/datalogger/datalogger.py index a5184c6..3539ecd 100644 --- a/web_db/flask/app/datalogger/datalogger.py +++ b/web_db/flask/app/datalogger/datalogger.py @@ -1,15 +1,15 @@ -from flask.ext.restless import APIManager +from flask_restless import APIManager from .models import * from .. import app manager = APIManager(app, flask_sqlalchemy_db=db) -manager.create_api(Config, methods=['GET', 'POST', 'DELETE']) -manager.create_api(Data_type, methods=['GET', 'POST', 'DELETE']) -manager.create_api(Device_type, methods=['GET', 'POST', 'DELETE']) -manager.create_api(Device, methods=['GET', 'POST', 'DELETE']) -manager.create_api(Doc, methods=['GET', 'POST', 'DELETE']) -manager.create_api(Tag_class, methods=['GET', 'POST', 'DELETE']) -manager.create_api(Tag, methods=['GET', 'POST', 'DELETE']) -manager.create_api(Tag_val, methods=['GET', 'POST', 'DELETE']) \ No newline at end of file +manager.create_api(Config, methods=['GET', 'POST', 'DELETE', 'PUT']) +manager.create_api(Data_type, methods=['GET', 'POST', 'DELETE', 'PUT']) +manager.create_api(Device_type, methods=['GET', 'POST', 'DELETE', 'PUT']) +manager.create_api(Device, methods=['GET', 'POST', 'DELETE', 'PUT']) +manager.create_api(Doc, methods=['GET', 'POST', 'DELETE', 'PUT']) +manager.create_api(Tag_class, methods=['GET', 'POST', 'DELETE', 'PUT']) +manager.create_api(Tag, methods=['GET', 'POST', 'DELETE', 'PUT']) +manager.create_api(Tag_val, methods=['GET', 'POST', 'DELETE'], allow_delete_many=True) \ No newline at end of file diff --git a/web_db/flask/app/datalogger/models.py b/web_db/flask/app/datalogger/models.py index 0dabdab..9265a06 100644 --- a/web_db/flask/app/datalogger/models.py +++ b/web_db/flask/app/datalogger/models.py @@ -12,6 +12,16 @@ class Config(db.Model): 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, + "parameter": self.parameter, + "val": self.val, + "created_on": self.created_on, + "updated_on": self.updated_on, + } + class Data_type(db.Model): __tablename__ = "data_types" @@ -21,6 +31,16 @@ class Data_type(db.Model): 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, + "data_type": self.data_type, + "plc_type": self.plc_type, + "created_on": self.created_on, + "updated_on": self.updated_on, + } + class Device_type(db.Model): __tablename__ = "device_types" id = db.Column(db.Integer, primary_key=True) @@ -28,6 +48,15 @@ class Device_type(db.Model): 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, + "device_type": self.device_type, + "created_on": self.created_on, + "updated_on": self.updated_on, + } + class Device(db.Model): __tablename__ = "devices" @@ -38,6 +67,17 @@ class Device(db.Model): 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, + "device_type_id": self.device_type_id, + "device_type": self.device_type.serialize, + "address": self.address, + "created_on": self.created_on, + "updated_on": self.updated_on, + } + class Doc(db.Model): __tablename__ = "docs" @@ -48,6 +88,17 @@ class Doc(db.Model): 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, + "name": self.name, + "location": self.location, + "description": self.description, + "created_on": self.created_on, + "updated_on": self.updated_on, + } + class Tag_class(db.Model): __tablename__ = "tag_classes" id = db.Column(db.Integer, primary_key=True) @@ -59,6 +110,17 @@ class Tag_class(db.Model): def toJSON(self): return json.dumps({'id': self.id, 'class_type': self.class_type, 'description': self.description, 'created_on': self.created_on, 'updated_on': self.updated_on}) + @property + def serialize(self): + return { + "id": self.id, + "class_type": self.class_type, + "description": self.description, + "created_on": self.created_on, + "updated_on": self.updated_on, + } + + class Tag(db.Model): __tablename__ = "tags" id = db.Column(db.Integer, primary_key=True) @@ -67,7 +129,7 @@ class Tag(db.Model): tag_class = db.relationship(Tag_class) tag = db.Column(db.String(128)) device_id = db.Column(db.Integer, db.ForeignKey('devices.id')) - device_ = db.relationship(Device) + device = db.relationship(Device) description = db.Column(db.String(64)) data_type_id = db.Column(db.Integer, db.ForeignKey('data_types.id')) data_type = db.relationship(Data_type) @@ -81,7 +143,42 @@ class Tag(db.Model): updated_on = db.Column(db.DateTime(), default=datetime.utcnow, onupdate=datetime.utcnow) + @property + def serialize(self): + return { + "id": self.id, + "name": self.name, + "tag_class_id": self.tag_class_id, + "tag_class": self.tag_class.serialize, + "tag": self.tag, + "device_id": self.device_id, + "device": self.device.serialize, + "description": self.description, + "data_type_id": self.data_type_id, + "data_type": self.data_type.serialize, + "change_threshold": self.change_threshold, + "guarantee_sec": self.guarantee_sec, + "map_function": self.map_function, + "units": self.units, + "min_expected": self.min_expected, + "max_expected": self.max_expected, + "created_on": self.created_on, + "updated_on": self.updated_on + } +def latest_to_obj(tup): + ob = {} + ob['id'] = tup[0] + ob['datetime'] = str(tup[1]) + ob['tag_id'] = str(tup[2]) + ob['tag_name'] = str(tup[3]) + ob['tag'] = str(tup[4]) + ob['value'] = tup[5] + ob['units'] = tup[6] + ob['tag_description'] = str(tup[7]) + ob['min_expected'] = tup[8] + ob['max_expected'] = tup[9] + return ob class Tag_val(db.Model): @@ -89,7 +186,20 @@ class Tag_val(db.Model): id = db.Column(db.Integer, primary_key=True) tag_id = db.Column(db.Integer, db.ForeignKey('tags.id')) tag = db.relationship(Tag) - val = db.Column(db.Float) + value = db.Column(db.Float) 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_id": self.tag_id, + "tag": self.tag.serialize, + "value": self.value, + "created_on": self.created_on, + "updated_on": self.updated_on + } + + + diff --git a/web_db/flask/app/hplumberjack.crt b/web_db/flask/app/hplumberjack.crt new file mode 100644 index 0000000..dab823d --- /dev/null +++ b/web_db/flask/app/hplumberjack.crt @@ -0,0 +1,35 @@ +-----BEGIN CERTIFICATE----- +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 +BW67nK0NQS6BaT45qVap +-----END CERTIFICATE----- diff --git a/web_db/flask/app/hplumberjack.key b/web_db/flask/app/hplumberjack.key new file mode 100644 index 0000000..95bb851 --- /dev/null +++ b/web_db/flask/app/hplumberjack.key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/web_db/flask/app/static/js/config.controller.js b/web_db/flask/app/static/js/config.controller.js index 62e732e..7fd7f4a 100644 --- a/web_db/flask/app/static/js/config.controller.js +++ b/web_db/flask/app/static/js/config.controller.js @@ -52,7 +52,7 @@ poconsole.controller('configCtrl', function($scope, Page, $log, config, devices, $scope.loggerRunning = data.status; }); }; - $scope.checkLogger(); + // $scope.checkLogger(); $scope.restartLogger = function(){ var restartLogger = config.restartLogger(); @@ -74,7 +74,7 @@ poconsole.controller('configCtrl', function($scope, Page, $log, config, devices, var addDevice = devices.addDevice(dev); addDevice.then(function(d){ $scope.getDevices(); - $scope.newDevice.address = ""; + dev.address = ""; }); }; diff --git a/web_db/flask/app/static/js/config.factory.js b/web_db/flask/app/static/js/config.factory.js index 43e4e47..23df2e3 100644 --- a/web_db/flask/app/static/js/config.factory.js +++ b/web_db/flask/app/static/js/config.factory.js @@ -2,9 +2,9 @@ poconsole.factory('config',function($q, $http, $log){ var getConfig = function(){ var deferred = $q.defer(); - $http.get('/config').success(function(data) { + $http.get('/api/configs').success(function(data) { deferred.resolve({ - config:data + config:data.objects }); }); return deferred.promise; @@ -12,7 +12,7 @@ poconsole.factory('config',function($q, $http, $log){ var submitParameter = function(entry){ var deferred = $q.defer(); - $http.post('/config', { + $http.post('/api/configs', { parameter: entry.parameter, val: entry.val }).success(function(data){ @@ -25,7 +25,7 @@ poconsole.factory('config',function($q, $http, $log){ var updateParameter = function(entry){ var deferred = $q.defer(); - $http.post('/config/update/' + entry.id, { + $http.put('/api/configs/' + entry.id, { parameter: entry.parameter, val: entry.val }).success(function(data){ @@ -38,7 +38,7 @@ poconsole.factory('config',function($q, $http, $log){ var deleteParameter = function(id){ var deferred = $q.defer(); - $http.delete('/config/' + id).success(function(data){ + $http.delete('/api/configs/' + id).success(function(data){ deferred.resolve({ data:data }); diff --git a/web_db/flask/app/static/js/dateConversion.factory.js b/web_db/flask/app/static/js/dateConversion.factory.js index aa39e2d..66ec89f 100644 --- a/web_db/flask/app/static/js/dateConversion.factory.js +++ b/web_db/flask/app/static/js/dateConversion.factory.js @@ -24,8 +24,19 @@ poconsole.factory('dateConversion', function(){ var sec = d.getSeconds().pad(2); return "".concat(year, "-", month, "-", day, " ", hour, ":", min, ":", sec); }; + + var pythonDate = function(d){ + var year = d.getFullYear().pad(4); + var month = (d.getMonth() + 1).pad(2); + var day = d.getDate().pad(2); + var hour = d.getHours().pad(2); + var min = d.getMinutes().pad(2); + var sec = d.getSeconds().pad(2); + return "".concat(year, "-", month, "-", day, " ", hour, ":", min, ":", sec, ".000"); + }; return { mysqlDate: mysqlDate, - sqliteDate: sqliteDate + sqliteDate: sqliteDate, + pythonDate: pythonDate }; }); diff --git a/web_db/flask/app/static/js/devices.factory.js b/web_db/flask/app/static/js/devices.factory.js index e2395c1..6ebb8cb 100644 --- a/web_db/flask/app/static/js/devices.factory.js +++ b/web_db/flask/app/static/js/devices.factory.js @@ -1,9 +1,10 @@ poconsole.factory('devices', function($q, $http, $log){ var getAllDevices = function(){ var deferred = $q.defer(); - $http.get('/device').success(function(data) { + $http.get('/api/devices').success(function(data) { + console.log({device:data.objects}); deferred.resolve({ - devices:data + devices:data.objects }); }); return deferred.promise; @@ -11,7 +12,7 @@ poconsole.factory('devices', function($q, $http, $log){ var getDevice = function(id){ var deferred = $q.defer(); - $http.get('/device/'+ id).success(function(data) { + $http.get('/api/devices/'+ id).success(function(data) { deferred.resolve({ devices:data }); @@ -22,9 +23,9 @@ poconsole.factory('devices', function($q, $http, $log){ var addDevice = function(d){ $log.info(d); var deferred = $q.defer(); - $http.post('/device/create', { + $http.post('/api/devices', { address: d.address, - device_type: d.device_type.id + device_type_id: d.device_type.id }).success(function(data){ deferred.resolve({ data:data @@ -35,7 +36,7 @@ poconsole.factory('devices', function($q, $http, $log){ var updateDevice = function(d){ var deferred = $q.defer(); - $http.post('/device/update/' + d.id, { + $http.put('/api/devices/' + d.id, { address: d.address, device_type: d.device_type.id }).success(function(data){ @@ -48,7 +49,7 @@ poconsole.factory('devices', function($q, $http, $log){ var deleteDevice = function(id){ var deferred = $q.defer(); - var url = '/device/' + id; + var url = '/api/devices/' + id; $http.delete(url).success(function(data) { deferred.resolve({ data:data @@ -59,9 +60,9 @@ poconsole.factory('devices', function($q, $http, $log){ var getDeviceTypes = function(){ var deferred = $q.defer(); - $http.get('/device_type').success(function(data) { + $http.get('/api/device_types').success(function(data) { deferred.resolve({ - device_types:data + device_types:data.objects }); }); return deferred.promise; diff --git a/web_db/flask/app/static/js/tagVals.controller.js b/web_db/flask/app/static/js/tagVals.controller.js index e96a893..3335797 100644 --- a/web_db/flask/app/static/js/tagVals.controller.js +++ b/web_db/flask/app/static/js/tagVals.controller.js @@ -24,19 +24,20 @@ poconsole.controller('tagValsCtrl', function($scope, $route, $http, $routeParams $log.info({start: sDTime, end:eDTime}); $scope.loading = true; var tags_to_get = $routeParams.tagID.split(","); - var getTag = tags.getTag(tags_to_get); + var getMultipleTags = tags.getMultipleTags(tags_to_get); $scope.tags_to_get = tags_to_get.toString(); - getTag.then(function(tagData){ + getMultipleTags.then(function(tagData){ $scope.tag = tagData.tag; - var getTagHistoryBetween = tags.getTagHistoryBetween(tags_to_get, sDTime, eDTime); + console.log($scope.tag); + var getTagHistoryBetween = tags.getTagHistoryBetween(tags_to_get, dateConversion.pythonDate(sDTime), dateConversion.pythonDate(eDTime)); getTagHistoryBetween.then(function(data) { $scope.loading = false; $scope.data = data; $scope.table_vals = $scope.data.vals.map(function(x){ - var ob = {id: x.id, tagID: x.tagID, dtime: new Date(x.createdAt)}; + var ob = {id: x.id, tag: x.tag, dtime: new Date(x.created_on)}; for(var t = 0; t< $scope.tag.length; t++){ - if ($scope.tag[t].name === x.tagID.name){ - ob[$scope.tag[t].name] = x.val; + if ($scope.tag[t].name === x.tag.name){ + ob[$scope.tag[t].name] = x.value; } else { ob[$scope.tag[t].name] = null; } @@ -47,17 +48,18 @@ poconsole.controller('tagValsCtrl', function($scope, $route, $http, $routeParams var split_vals = {}; var all_datetimes = []; for(var t=0; t< $scope.tag.length; t++){ + split_vals[$scope.tag[t].name] = {}; split_vals[$scope.tag[t].name].dtimes = []; split_vals[$scope.tag[t].name].vals = []; split_vals[$scope.tag[t].name].ob = {}; } for (var i = 0; i< data.vals.length; i++){ - split_vals[data.vals[i].tagID.name].ob[data.vals[i].createdAt]= data.vals[i].val; - split_vals[data.vals[i].tagID.name].dtimes.push(data.vals[i].createdAt); - split_vals[data.vals[i].tagID.name].vals.push(data.vals[i].val); - if (all_datetimes.indexOf(data.vals[i].createdAt) == -1){ - all_datetimes.push(data.vals[i].createdAt); + split_vals[data.vals[i].tag.name].ob[data.vals[i].created_on]= data.vals[i].val; + split_vals[data.vals[i].tag.name].dtimes.push(data.vals[i].created_on); + split_vals[data.vals[i].tag.name].vals.push(data.vals[i].value); + if (all_datetimes.indexOf(data.vals[i].created_on) == -1){ + all_datetimes.push(data.vals[i].created_on); } } $scope.data.vals = [{dtime:new Date(all_datetimes[0])}]; @@ -76,7 +78,7 @@ poconsole.controller('tagValsCtrl', function($scope, $route, $http, $routeParams } $scope.data.vals.push(newOb); } - + console.log($scope.data); $scope.error = false; $scope.options = { series: [ @@ -101,6 +103,7 @@ poconsole.controller('tagValsCtrl', function($scope, $route, $http, $routeParams drawDots:false }); } + console.log($scope.options); }); }); }; diff --git a/web_db/flask/app/static/js/tags.controller.js b/web_db/flask/app/static/js/tags.controller.js index 6c38451..e566edb 100644 --- a/web_db/flask/app/static/js/tags.controller.js +++ b/web_db/flask/app/static/js/tags.controller.js @@ -31,7 +31,7 @@ poconsole.controller('tagsCtrl', function($scope, $route, $http, $routeParams, P var getTag = tags.getTag(id); getTag.then(function(data){ $scope.error = false; - $scope.dTag = data.tag[0]; + $scope.dTag = data.tag; $log.info("Thinking about deleting tag with parameters: "+ JSON.stringify($scope.dTag)); }); }; @@ -49,7 +49,7 @@ poconsole.controller('tagsCtrl', function($scope, $route, $http, $routeParams, P var getTag = tags.getTag(id); getTag.then(function(data){ $scope.error = false; - $scope.dTagValues = data.tag[0]; + $scope.dTagValues = data.tag; $log.info("Thinking about deleting tag data with parameters: "+ JSON.stringify($scope.dTagValues)); }); }; @@ -68,14 +68,13 @@ poconsole.controller('tagsCtrl', function($scope, $route, $http, $routeParams, P getTag.then(function(data){ $scope.error = false; $scope.editTag = data.tag; + console.log(typeof data.tag.device_id); $log.info("Started editing tag with parameters: "+ JSON.stringify($scope.editTag)); }); }; $scope.submitEditTag = function(){ var editStatus = tags.updateTag($scope.editTag); - $log.info(editStatus); - $scope.editStatus = editStatus.status; $scope.loadTagList(); }; @@ -90,7 +89,7 @@ poconsole.controller('tagsCtrl', function($scope, $route, $http, $routeParams, P }; $scope.device_label = function(data_type_obj){ - return data_type_obj.address + " - " + data_type_obj.device_type.dType; + return data_type_obj.address + " - " + data_type_obj.device_type.device_type; }; }); diff --git a/web_db/flask/app/static/js/tags.factory.js b/web_db/flask/app/static/js/tags.factory.js index 5df9af0..dc6d0f8 100644 --- a/web_db/flask/app/static/js/tags.factory.js +++ b/web_db/flask/app/static/js/tags.factory.js @@ -1,3 +1,8 @@ +var makeDateinObject = function(ob){ + ob.datetime= new Date(ob.datetime); + return ob +}; + poconsole.factory('tags',function($q, $http, $log, dateConversion){ var getTag = function(id) { var deferred = $q.defer(); @@ -10,6 +15,17 @@ poconsole.factory('tags',function($q, $http, $log, dateConversion){ return deferred.promise; }; + var getMultipleTags = function(ids){ + var deferred = $q.defer(); + $http.get('/api/multipletags/' + ids).success(function(data) { + console.log(data); + deferred.resolve({ + tag:data + }); + }); + return deferred.promise; + }; + var getTagList = function() { var deferred = $q.defer(); $http.get('/api/tags').success(function(data) { @@ -24,7 +40,7 @@ poconsole.factory('tags',function($q, $http, $log, dateConversion){ var deferred = $q.defer(); $http.get('/api/data_types').success(function(data) { deferred.resolve({ - data_types:data + data_types:data.objects }); }); return deferred.promise; @@ -32,8 +48,10 @@ poconsole.factory('tags',function($q, $http, $log, dateConversion){ var getTagHistoryBetween = function(id, start, end){ var deferred = $q.defer(); - var w = {'where':{'tagID': id, 'createdAt': {">":dateConversion.mysqlDate(start), "<": dateConversion.mysqlDate(end)}}}; - $http.get("/tag_val", {params:w}).success(function(data) { + var url = "/api/valuesbetween/" + id + "/" + start + "/" + end; + console.log({url:url}); + $http.get(url).success(function(data) { + console.log(data); deferred.resolve({ vals:data }); @@ -43,7 +61,8 @@ poconsole.factory('tags',function($q, $http, $log, dateConversion){ var getCurrentValues = function(){ var deferred = $q.defer(); - $http.get('/tag_val/latest').success(function(data) { + $http.get('/api/latest').success(function(data) { + data = data.map(makeDateinObject); deferred.resolve({ vals:data }); @@ -52,18 +71,18 @@ poconsole.factory('tags',function($q, $http, $log, dateConversion){ }; var createTag = function(tag){ - $http.post('/tag/create', { + $http.post('/api/tags', { tag: tag.tag, name: tag.name, - tag_class:tag.tag_class, - deviceID: tag.deviceID, + tag_class_id:tag.tag_class_id, + device_id: tag.device_id, units: tag.units, minExpected: tag.minExpected, maxExpected: tag.maxExpected, guarantee_sec: tag.guarantee_sec, change_threshold: tag.change_threshold, description: tag.description, - data_type: tag.data_type + data_type_id: tag.data_type_id }).success(function(data){ return data; }); @@ -71,19 +90,21 @@ poconsole.factory('tags',function($q, $http, $log, dateConversion){ var updateTag = function(tag){ $log.info("updateTag called with "+ JSON.stringify(tag)); - $http.post('/tag/update/'+ tag.id, { + var put_obj = { tag: tag.tag, name: tag.name, - tag_class:tag.tag_class, - deviceID: tag.deviceID, + tag_class_id: parseInt(tag.tag_class_id), + device_id: parseInt(tag.device_id), units: tag.units, - minExpected: tag.minExpected, - maxExpected: tag.maxExpected, + 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: tag.data_type - }).success(function(data){ + data_type_id: parseInt(tag.data_type_id) + }; + console.log({id: tag.id, put_obj: put_obj}); + $http.put('/api/tags/'+ tag.id, data=put_obj).success(function(data){ return data; }).error(function(err){ $log.warn("updateTag Error: " + err); @@ -92,7 +113,7 @@ poconsole.factory('tags',function($q, $http, $log, dateConversion){ var deleteTag = function(id){ var deferred = $q.defer(); - var url = '/tag/' + id; + var url = '/api/tags/' + id; $http.delete(url).success(function(data) { deferred.resolve({ data: data @@ -103,8 +124,11 @@ poconsole.factory('tags',function($q, $http, $log, dateConversion){ var clearSingleTagData = function(id){ var deferred = $q.defer(); - var url = '/tag_val/clear/' + id; - $http.get(url).success(function(data) { + var url = '/api/tag_vals'; + var filters = [{"name": "id", "op": "==", "val": "%" + id.toString() + "%"}]; + var req_data = {"q": JSON.stringify({"filters": filters})} + console.log(req_data); + $http.delete(url, data=req_data).success(function(data) { deferred.resolve({ status: data.status }); @@ -114,8 +138,8 @@ poconsole.factory('tags',function($q, $http, $log, dateConversion){ var clearAllTagData = function(){ var deferred = $q.defer(); - var url = '/tag_val/clear/all'; - $http.get(url).success(function(data) { + var url = '/api/tag_vals'; + $http.delete(url).success(function(data) { deferred.resolve({ status: data.status }); @@ -125,6 +149,7 @@ poconsole.factory('tags',function($q, $http, $log, dateConversion){ return { getTag: getTag, + getMultipleTags, getMultipleTags, getTagList: getTagList, getDataTypes: getDataTypes, getTagHistoryBetween: getTagHistoryBetween, diff --git a/web_db/flask/app/static/templates/config.html b/web_db/flask/app/static/templates/config.html index 16ad6bc..d49a8bb 100644 --- a/web_db/flask/app/static/templates/config.html +++ b/web_db/flask/app/static/templates/config.html @@ -78,7 +78,7 @@ {{device.address}} - {{device.device_type.dType}} + {{device.device_type.device_type}} @@ -121,7 +121,7 @@
- +
diff --git a/web_db/flask/app/static/templates/dashboard.html b/web_db/flask/app/static/templates/dashboard.html index ae65810..e058819 100644 --- a/web_db/flask/app/static/templates/dashboard.html +++ b/web_db/flask/app/static/templates/dashboard.html @@ -24,10 +24,10 @@ Download All Data
- +
-
{{ val.dtime | date: 'medium'}}
- View Data +
{{ val.datetime | date: 'medium'}}
+ View Data
diff --git a/web_db/flask/app/static/templates/tags.html b/web_db/flask/app/static/templates/tags.html index 1836524..b3689b3 100644 --- a/web_db/flask/app/static/templates/tags.html +++ b/web_db/flask/app/static/templates/tags.html @@ -10,7 +10,7 @@
- +
@@ -26,11 +26,11 @@
- +
- @@ -87,8 +87,8 @@

{{message}}

- - + +
@@ -104,11 +104,11 @@
- +
- diff --git a/web_db/flask/database.db b/web_db/flask/database.db index d36a43c..93c3f53 100644 Binary files a/web_db/flask/database.db and b/web_db/flask/database.db differ diff --git a/web_db/flask/run.py b/web_db/flask/run.py index 5751813..1d99c67 100644 --- a/web_db/flask/run.py +++ b/web_db/flask/run.py @@ -1,4 +1,8 @@ from app import app +import ssl + +# context = ssl.SSLContext(protocol=ssl.PROTOCOL_TLSv1_2) +# context.load_cert_chain('/Users/patrickjmcd/Henry_Pump/tagserver/web_db/flask/app/hplumberjack.crt', '/Users/patrickjmcd/Henry_Pump/tagserver/web_db/flask/app/hplumberjack.key') if __name__ == '__main__': - app.run(debug=True) \ No newline at end of file + app.run(debug=True, ssl_context='adhoc') \ No newline at end of file