Working with SampleData.py and SSL. Issues still exist with tag graphs
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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('/<path:path>')
|
||||
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/<string:ids>/<string:start>/<string:end>')
|
||||
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/<string:ids>')
|
||||
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])
|
||||
@@ -1 +1 @@
|
||||
from datalogger import *
|
||||
pass
|
||||
@@ -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'])
|
||||
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)
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
35
web_db/flask/app/hplumberjack.crt
Normal file
35
web_db/flask/app/hplumberjack.crt
Normal file
@@ -0,0 +1,35 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
BW67nK0NQS6BaT45qVap
|
||||
-----END CERTIFICATE-----
|
||||
51
web_db/flask/app/hplumberjack.key
Normal file
51
web_db/flask/app/hplumberjack.key
Normal file
@@ -0,0 +1,51 @@
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
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
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -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 = "";
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -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
|
||||
});
|
||||
|
||||
@@ -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
|
||||
};
|
||||
});
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
});
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
<tr ng-repeat="device in devices">
|
||||
<!-- <td>{{device.id}}</td> -->
|
||||
<td>{{device.address}}</td>
|
||||
<td>{{device.device_type.dType}}</td>
|
||||
<td>{{device.device_type.device_type}}</td>
|
||||
<!-- <td><i class="fa fa-pencil"></i></td> -->
|
||||
<td><i class="fa fa-times" ng-click="deleteDevice(device.id)"></i></td>
|
||||
</tr>
|
||||
@@ -121,7 +121,7 @@
|
||||
|
||||
<div class="form-group">
|
||||
<label for="device_type">Device Type</label>
|
||||
<select ng-model="newDevice.device_type" ng-options="t as t.dType for t in device_types track by t.id" class="form-control" id="device_type"></select>
|
||||
<select ng-model="newDevice.device_type" ng-options="t as t.device_type for t in device_types track by t.id" class="form-control" id="device_type"></select>
|
||||
</div>
|
||||
|
||||
<button class="btn btn-primary" ng-click="addDevice(newDevice)">Add Device</button>
|
||||
|
||||
@@ -24,10 +24,10 @@
|
||||
<a href="/csv/all" class="btn btn-large btn-primary"><i class="fa fa-download"></i> Download All Data</a>
|
||||
<div ng-repeat="val in vals">
|
||||
<div class="col-md-4" style="height:200px; margin-bottom:40px;">
|
||||
<just-gage id="{{val.name}}" min='val.minExpected' max='val.maxExpected' value='val.val' options="{label:val.units,title:val.name, decimals:2, refreshAnimationType:'bounce', startAnimationType:'bounce'}"></just-gage>
|
||||
<just-gage id="{{val.tag_name}}" min='val.min_expected' max='val.max_expected' value='val.value' options="{label:val.units,title:val.tag_name, decimals:2, refreshAnimationType:'bounce', startAnimationType:'bounce'}"></just-gage>
|
||||
<div style="text-align:center">
|
||||
<h5>{{ val.dtime | date: 'medium'}}</h5>
|
||||
<a href="/#/tag/{{val.t_id}}" class="btn btn-large btn-primary"><i class="fa fa-line-chart"></i> View Data</a>
|
||||
<h5>{{ val.datetime | date: 'medium'}}</h5>
|
||||
<a href="/#/tag/{{val.tag_id}}" class="btn btn-large btn-primary"><i class="fa fa-line-chart"></i> View Data</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<form>
|
||||
<div class="form-group">
|
||||
<label for="data_source">Data Source</label>
|
||||
<select ng-model="newTag.deviceID" ng-options="d as device_label(d) for d in devices track by d.id" class="form-control" id="data_source"></select>
|
||||
<select ng-model="newTag.device_id" ng-options="d as device_label(d) for d in devices track" class="form-control" id="data_source"></select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="tag">Tag</label>
|
||||
@@ -26,11 +26,11 @@
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="data_type">Data Type</label>
|
||||
<select ng-model="newTag.data_type_id" ng-options="t as t.data_type_id for t in data_types track by t.id" class="form-control" id="data_type"></select>
|
||||
<select ng-model="newTag.data_type_id" ng-options="t as t.data_type.id for t in data_types" class="form-control" id="data_type"></select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="tag_type">Tag Type</label>
|
||||
<select ng-model="newTag.tag_class" class="form-control" id="tag_type">
|
||||
<select ng-model="newTag.tag_class_id" class="form-control" id="tag_type">
|
||||
<option value=5>Normal</option>
|
||||
<option value=6>PLC Handshake</option>
|
||||
</select>
|
||||
@@ -87,8 +87,8 @@
|
||||
<div class="well" ng-if="message"><h3 class="text-danger">{{message}}</h3></div>
|
||||
<form>
|
||||
<div class="form-group">
|
||||
<label for="data_source">Data Source</label>
|
||||
<select ng-model="editTag.deviceID" ng-options="d as device_label(d) for d in devices track by d.id" class="form-control" id="data_source"></select>
|
||||
<label for="data_source">Data Source {{editTag.device_id}}</label>
|
||||
<select ng-model="editTag.device_id" ng-options="d.id as device_label(d) for d in devices" class="form-control" id="data_source"></select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="tag">Tag Name</label>
|
||||
@@ -104,11 +104,11 @@
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="data_type">Data Type</label>
|
||||
<select ng-model="editTag.data_type_id" ng-options="t as t.data_type_id for t in data_types track by t.id" class="form-control" id="data_type"></select>
|
||||
<select ng-model="editTag.data_type_id" ng-options="t.id as t.data_type for t in data_types" class="form-control" id="data_type"></select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="tag_type">Tag Type</label>
|
||||
<select ng-model="editTag.tag_class" class="form-control" id="tag_type">
|
||||
<select ng-model="editTag.tag_class_id" class="form-control" id="tag_type">
|
||||
<option value=5>Normal</option>
|
||||
<option value=6>PLC Handshake</option>
|
||||
</select>
|
||||
|
||||
Binary file not shown.
@@ -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)
|
||||
app.run(debug=True, ssl_context='adhoc')
|
||||
Reference in New Issue
Block a user