From 72f1cb6684e1c09a927c77599aeee34664e2d5a1 Mon Sep 17 00:00:00 2001 From: Patrick McDonagh Date: Fri, 28 Oct 2016 18:22:23 -0500 Subject: [PATCH] Working with SampleData.py and SSL. Issues still exist with tag graphs --- daq_sample/sampleData.py | 12 +- web_db/flask/app/__init__.py | 30 ++++- web_db/flask/app/datalogger/__init__.py | 2 +- web_db/flask/app/datalogger/datalogger.py | 18 +-- web_db/flask/app/datalogger/models.py | 114 +++++++++++++++++- web_db/flask/app/hplumberjack.crt | 35 ++++++ web_db/flask/app/hplumberjack.key | 51 ++++++++ .../flask/app/static/js/config.controller.js | 4 +- web_db/flask/app/static/js/config.factory.js | 10 +- .../app/static/js/dateConversion.factory.js | 13 +- web_db/flask/app/static/js/devices.factory.js | 19 +-- .../flask/app/static/js/tagVals.controller.js | 27 +++-- web_db/flask/app/static/js/tags.controller.js | 9 +- web_db/flask/app/static/js/tags.factory.js | 65 +++++++--- web_db/flask/app/static/templates/config.html | 4 +- .../flask/app/static/templates/dashboard.html | 6 +- web_db/flask/app/static/templates/tags.html | 14 +-- web_db/flask/database.db | Bin 16384 -> 20480 bytes web_db/flask/run.py | 6 +- 19 files changed, 348 insertions(+), 91 deletions(-) create mode 100644 web_db/flask/app/hplumberjack.crt create mode 100644 web_db/flask/app/hplumberjack.key 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 d36a43c3de4678930bdb81659f1ef3535ce8ba7f..93c3f539cb2e0301caf81190141373a5161e4b8d 100644 GIT binary patch literal 20480 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 nH3?=D@-qp delta 775 zcmZ|Ny-EW?5C`zRT;d&3i9!5;5QqplR1#+P^EL<}Sn2}=1uGlHH?S}w>6NXt5^Eb1 zwAMGU67&JmDZYVj5F~frZnf@$qth@HMp|YLvBv zXmM8v9da7baeX2Ac%(WMj9swL40l^&ASCSrL>6q6h!aUZalvgOS z`v*nAgi+cHNgZBDWp@90rnSR!kmfF0Tc7-G)RaS}A1A}_=yh65dTLk0(T`2^tldS= z?-Rd2EQcq)=_?-Wzg^jLZJyME`YokeLN|dc2IkcP3b> SR=soIe8zjjZT*nD4f8+k7N@WP 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