Compare commits
4 Commits
POCONSOLE-
...
POCONSOLE-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cf49309391 | ||
|
|
b0b964c45a | ||
|
|
5de541fc59 | ||
|
|
43f9ed378b |
5
.gitignore
vendored
@@ -5,7 +5,4 @@ sails/.tmp
|
||||
.remote-sync.json
|
||||
database.db
|
||||
venv/
|
||||
.vscode/
|
||||
pyr_test/env/lib/python2.7/site-packages/pyramid/tests/test_scaffolds/fixture_scaffold/development.ini_tmpl
|
||||
pyr_test/env/
|
||||
pyr_test/hp_webserver/poconsole.egg-info/
|
||||
Henry_Pump_WebServer.egg-info/
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
# app/__init__.py
|
||||
|
||||
import os
|
||||
from flask import Flask
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
@@ -8,17 +9,17 @@ from flask_sqlalchemy import SQLAlchemy
|
||||
|
||||
UPLOAD_FOLDER = os.path.join(os.getcwd(), 'app', 'docs')
|
||||
|
||||
app = Flask('app', static_url_path='')
|
||||
app = Flask('app', static_url_path='', static_folder="hp_webserver/static")
|
||||
app.config.update(
|
||||
DEBUG=True,
|
||||
# SQLALCHEMY_DATABASE_URI='mysql+mysqlconnector://website:henrypump@127.0.0.1/poconsole'
|
||||
SQLALCHEMY_DATABASE_URI='sqlite:///../database.db',
|
||||
SQLALCHEMY_DATABASE_URI='sqlite:///./database.db',
|
||||
)
|
||||
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
|
||||
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
|
||||
app.secret_key = 'henry_pump'
|
||||
db = SQLAlchemy(app)
|
||||
|
||||
from datalogger import views
|
||||
from datalogger import api
|
||||
from datalogger.models import *
|
||||
from hp_webserver.datalogger import views
|
||||
from hp_webserver.datalogger import api
|
||||
from hp_webserver.datalogger.models import *
|
||||
1
hp_webserver/__main__.py
Normal file
@@ -0,0 +1 @@
|
||||
print("MAIN IN hp_datalogger")
|
||||
1
hp_webserver/datalogger/__main__.py
Normal file
@@ -0,0 +1 @@
|
||||
print("THIS IS THE MAIN FROM datalogger")
|
||||
@@ -2,8 +2,8 @@ from pycomm.ab_comm.clx import Driver as ClxDriver
|
||||
import traceback
|
||||
import math
|
||||
|
||||
from app.datalogger.models import Device
|
||||
from app import db
|
||||
from hp_webserver.datalogger.models import Device
|
||||
from hp_webserver import db
|
||||
|
||||
|
||||
def getMainPLC():
|
||||
@@ -7,9 +7,9 @@ from sqlalchemy import and_, desc
|
||||
from sqlalchemy.sql import func
|
||||
from datetime import datetime
|
||||
|
||||
from app import app, db
|
||||
from app.datalogger.models import *
|
||||
from app.datalogger.getDailyTotals import getTotals
|
||||
from hp_webserver import app, db
|
||||
from hp_webserver.datalogger.models import *
|
||||
from hp_webserver.datalogger.getDailyTotals import getTotals
|
||||
from pycomm_helper.utils import readTag, writeTag
|
||||
from random import random
|
||||
|
||||
@@ -52,6 +52,7 @@ def tagsattime_to_obj(tup):
|
||||
@app.route('/', defaults={'path': ''})
|
||||
@app.route('/<path:path>')
|
||||
def catch_all(path):
|
||||
print("caught something!")
|
||||
return app.send_static_file('index.html')
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 357 KiB After Width: | Height: | Size: 357 KiB |
0
app/static/images/icons/_blank.png → hp_webserver/static/images/icons/_blank.png
Executable file → Normal file
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
0
app/static/images/icons/_page.png → hp_webserver/static/images/icons/_page.png
Executable file → Normal file
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
0
app/static/images/icons/doc.png → hp_webserver/static/images/icons/doc.png
Executable file → Normal file
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
0
app/static/images/icons/gif.png → hp_webserver/static/images/icons/gif.png
Executable file → Normal file
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
0
app/static/images/icons/jpg.png → hp_webserver/static/images/icons/jpg.png
Executable file → Normal file
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
0
app/static/images/icons/pdf.png → hp_webserver/static/images/icons/pdf.png
Executable file → Normal file
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
0
app/static/images/icons/png.png → hp_webserver/static/images/icons/png.png
Executable file → Normal file
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
0
app/static/images/icons/txt.png → hp_webserver/static/images/icons/txt.png
Executable file → Normal file
|
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 9.2 KiB |
0
app/static/images/icons/xls.png → hp_webserver/static/images/icons/xls.png
Executable file → Normal file
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
0
app/static/images/icons/xlsx.png → hp_webserver/static/images/icons/xlsx.png
Executable file → Normal file
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
0
app/static/images/icons/zip.png → hp_webserver/static/images/icons/zip.png
Executable file → Normal file
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 130 KiB |
@@ -53,7 +53,7 @@ poconsole.factory('Tag',function($q, $http, $log, dateConversion){
|
||||
var deferred = $q.defer();
|
||||
$http.get('/api/latest').success(function(data) {
|
||||
var vals = data.map(function(v){
|
||||
v.datetime = Date.create(v.datetime + "Z", { fromUTC: true });
|
||||
v.created_on = Date.create(v.created_on + "Z", { fromUTC: true });
|
||||
return v;
|
||||
});
|
||||
deferred.resolve(vals);
|
||||
@@ -1,49 +0,0 @@
|
||||
[app:main]
|
||||
use = egg:poconsole
|
||||
pyramid.reload_templates = true
|
||||
pyramid.includes =
|
||||
pyramid_debugtoolbar
|
||||
pyramid_tm
|
||||
|
||||
sqlalchemy.url = sqlite:///%(here)s/poconsole.sqlite
|
||||
|
||||
[server:main]
|
||||
use = egg:pyramid#wsgiref
|
||||
host = 0.0.0.0
|
||||
port = 6543
|
||||
|
||||
# Begin logging configuration
|
||||
|
||||
[loggers]
|
||||
keys = root, poconsole, sqlalchemy.engine.base.Engine
|
||||
|
||||
[logger_poconsole]
|
||||
level = DEBUG
|
||||
handlers =
|
||||
qualname = poconsole
|
||||
|
||||
[handlers]
|
||||
keys = console
|
||||
|
||||
[formatters]
|
||||
keys = generic
|
||||
|
||||
[logger_root]
|
||||
level = INFO
|
||||
handlers = console
|
||||
|
||||
[logger_sqlalchemy.engine.base.Engine]
|
||||
level = INFO
|
||||
handlers =
|
||||
qualname = sqlalchemy.engine.base.Engine
|
||||
|
||||
[handler_console]
|
||||
class = StreamHandler
|
||||
args = (sys.stderr,)
|
||||
level = NOTSET
|
||||
formatter = generic
|
||||
|
||||
[formatter_generic]
|
||||
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s
|
||||
|
||||
# End logging configuration
|
||||
@@ -1,35 +0,0 @@
|
||||
from pyramid.config import Configurator
|
||||
|
||||
from sqlalchemy import engine_from_config
|
||||
|
||||
from .models import DBSession, Base
|
||||
|
||||
def main(global_config, **settings):
|
||||
engine = engine_from_config(settings, 'sqlalchemy.')
|
||||
DBSession.configure(bind=engine)
|
||||
Base.metadata.bind = engine
|
||||
|
||||
config = Configurator(settings=settings,
|
||||
root_factory='poconsole.models.Root')
|
||||
config.include('pyramid_chameleon')
|
||||
|
||||
# Configs
|
||||
config.add_route('configs', '/api/configs')
|
||||
config.add_route('config', '/api/configs/{_id}')
|
||||
|
||||
# Configs
|
||||
config.add_route('configs', '/api/configs')
|
||||
config.add_route('config', '/api/configs/{_id}')
|
||||
|
||||
# Device Types
|
||||
config.add_route('device_types', '/api/device_types')
|
||||
config.add_route('device_type', '/api/device_types/{_id}')
|
||||
|
||||
|
||||
config.add_route('wiki_view', '/')
|
||||
config.add_route('wikipage_add', '/add')
|
||||
config.add_route('wikipage_view', '/{uid}')
|
||||
config.add_route('wikipage_edit', '/{uid}/edit')
|
||||
config.add_static_view('deform_static', 'deform:static/')
|
||||
config.scan('.views')
|
||||
return config.make_wsgi_app()
|
||||
@@ -1,61 +0,0 @@
|
||||
import os
|
||||
import sys
|
||||
import transaction
|
||||
|
||||
from sqlalchemy import engine_from_config
|
||||
|
||||
from pyramid.paster import (
|
||||
get_appsettings,
|
||||
setup_logging,
|
||||
)
|
||||
|
||||
from .models import (
|
||||
DBSession,
|
||||
Config,
|
||||
Device_type,
|
||||
Device,
|
||||
Doc,
|
||||
Tag,
|
||||
Tag_val,
|
||||
Card,
|
||||
GaugeOffVal,
|
||||
WellTest,
|
||||
Note,
|
||||
EventConfig,
|
||||
Event,
|
||||
RunStatus,
|
||||
FluidShot,
|
||||
BackupRestore,
|
||||
Base,
|
||||
)
|
||||
|
||||
|
||||
def usage(argv):
|
||||
cmd = os.path.basename(argv[0])
|
||||
print('usage: %s <config_uri>\n'
|
||||
'(example: "%s development.ini")' % (cmd, cmd))
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def main(argv=sys.argv):
|
||||
if len(argv) != 2:
|
||||
usage(argv)
|
||||
config_uri = argv[1]
|
||||
setup_logging(config_uri)
|
||||
settings = get_appsettings(config_uri)
|
||||
engine = engine_from_config(settings, 'sqlalchemy.')
|
||||
DBSession.configure(bind=engine)
|
||||
Base.metadata.create_all(engine)
|
||||
with transaction.manager:
|
||||
# Device Type Seeds
|
||||
device_type_CLX = Device_type(device_type='CLX')
|
||||
device_type_u800 = Device_type(device_type='Micro800')
|
||||
device_type_E300 = Device_type(device_type='E300')
|
||||
|
||||
DBSession.add(device_type_CLX)
|
||||
DBSession.add(device_type_u800)
|
||||
DBSession.add(device_type_E300)
|
||||
|
||||
# Device Seeds
|
||||
main_plc = Device(device_type_id=1, address="192.168.1.10")
|
||||
DBSession.add(main_plc)
|
||||
@@ -1,221 +0,0 @@
|
||||
from pyramid.security import Allow, Everyone
|
||||
from datetime import datetime
|
||||
|
||||
from sqlalchemy import (
|
||||
Column,
|
||||
Integer,
|
||||
Text,
|
||||
String,
|
||||
Float,
|
||||
DateTime,
|
||||
ForeignKey,
|
||||
)
|
||||
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
|
||||
from sqlalchemy.orm import (
|
||||
scoped_session,
|
||||
sessionmaker,
|
||||
relationship
|
||||
)
|
||||
|
||||
from zope.sqlalchemy import ZopeTransactionExtension
|
||||
|
||||
DBSession = scoped_session(
|
||||
sessionmaker(extension=ZopeTransactionExtension()))
|
||||
Base = declarative_base()
|
||||
|
||||
|
||||
# class Page(Base):
|
||||
# __tablename__ = 'wikipages'
|
||||
# uid = Column(Integer, primary_key=True)
|
||||
# title = Column(Text, unique=True)
|
||||
# body = Column(Text)
|
||||
|
||||
class Config(Base):
|
||||
__tablename__ = "configs"
|
||||
_id = Column(Integer, primary_key=True)
|
||||
parameter = Column(String(100), unique=True)
|
||||
val = Column(String(100), unique=True)
|
||||
created_on = Column(DateTime(), default=datetime.utcnow)
|
||||
updated_on = Column(DateTime(), default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
|
||||
class Device_type(Base):
|
||||
__tablename__ = "device_types"
|
||||
_id = Column(Integer, primary_key=True)
|
||||
device_type = Column(String(64))
|
||||
created_on = Column(DateTime(), default=datetime.utcnow)
|
||||
updated_on = Column(DateTime(), default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
|
||||
class Device(Base):
|
||||
__tablename__ = "devices"
|
||||
_id = Column(Integer, primary_key=True)
|
||||
device_type_id = Column(Integer, ForeignKey('device_types._id'))
|
||||
device_type = relationship(Device_type, primaryjoin=device_type_id == Device_type._id)
|
||||
address = Column(String(256))
|
||||
created_on = Column(DateTime(), default=datetime.utcnow)
|
||||
updated_on = Column(DateTime(), default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
|
||||
class Doc(Base):
|
||||
__tablename__ = "docs"
|
||||
_id = Column(Integer, primary_key=True)
|
||||
name = Column(String(256))
|
||||
created_on = Column(DateTime(), default=datetime.utcnow)
|
||||
updated_on = Column(DateTime(), default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
|
||||
class Tag(Base):
|
||||
__tablename__ = "tags"
|
||||
_id = Column(Integer, primary_key=True)
|
||||
name = Column(String(64))
|
||||
tag = Column(String(128))
|
||||
tag_category = Column(String(128))
|
||||
device_id = Column(Integer, ForeignKey('devices._id'))
|
||||
device = relationship(Device)
|
||||
description = Column(String(64))
|
||||
data_type = Column(String(64))
|
||||
change_threshold = Column(Float)
|
||||
guarantee_sec = Column(Integer)
|
||||
map_function = Column(String(64))
|
||||
units = Column(String(10))
|
||||
min_expected = Column(Float)
|
||||
max_expected = Column(Float)
|
||||
created_on = Column(DateTime(), default=datetime.utcnow)
|
||||
updated_on = Column(DateTime(), default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
|
||||
class Tag_val(Base):
|
||||
__tablename__ = "tag_vals"
|
||||
_id = Column(Integer, primary_key=True)
|
||||
tag_id = Column(Integer, ForeignKey('tags._id'))
|
||||
tag = relationship(Tag)
|
||||
value = Column(Float)
|
||||
created_on = Column(DateTime(), default=datetime.utcnow)
|
||||
updated_on = Column(DateTime(), default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
|
||||
class Card(Base):
|
||||
__tablename__ = "cards"
|
||||
_id = Column(Integer, primary_key=True)
|
||||
stroke_type = Column(String(32))
|
||||
stroke_number = Column(Integer)
|
||||
surf_pos = Column(Text)
|
||||
surf_lod = Column(Text)
|
||||
down_pos = Column(Text)
|
||||
down_lod = Column(Text)
|
||||
created_on = Column(DateTime(), default=datetime.utcnow)
|
||||
updated_on = Column(DateTime(), default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
|
||||
class GaugeOffVal(Base):
|
||||
__tablename__ = "gauge_off"
|
||||
_id = Column(Integer, primary_key=True)
|
||||
spm_average = Column(Float)
|
||||
downhole_gross_stroke_average = Column(Float)
|
||||
downhole_net_stroke_average = Column(Float)
|
||||
electricity_cost_total = Column(Float)
|
||||
fluid_level_average = Column(Float)
|
||||
full_card_production_total = Column(Float)
|
||||
inflow_rate_average = Column(Float)
|
||||
kWh_used_total = Column(Float)
|
||||
kWh_regen_total = Column(Float)
|
||||
lifting_cost_average = Column(Float)
|
||||
peak_pr_load = Column(Float)
|
||||
min_pr_load = Column(Float)
|
||||
percent_run = Column(Float)
|
||||
polished_rod_hp_average = Column(Float)
|
||||
pump_hp_average = Column(Float)
|
||||
production_total = Column(Float)
|
||||
pump_intake_pressure_average = Column(Float)
|
||||
surface_stroke_length_average = Column(Float)
|
||||
tubing_movement_average = Column(Float)
|
||||
created_on = Column(DateTime(), default=datetime.utcnow)
|
||||
updated_on = Column(DateTime(), default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
|
||||
class WellTest(Base):
|
||||
__tablename__ = "well_tests"
|
||||
_id = Column(Integer, primary_key=True)
|
||||
duration_hours = Column(Float)
|
||||
volume_h2o_actual = Column(Float)
|
||||
volume_oil_actual = Column(Float)
|
||||
volume_gas_actual = Column(Float)
|
||||
volume_h2o_projected = Column(Float)
|
||||
volume_oil_projected = Column(Float)
|
||||
volume_gas_projected = Column(Float)
|
||||
api_gravity_oil = Column(Float)
|
||||
spc_gravity_h2o = Column(Float)
|
||||
created_on = Column(DateTime(), default=datetime.utcnow)
|
||||
updated_on = Column(DateTime(), default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
|
||||
class Note(Base):
|
||||
__tablename__ = "notes"
|
||||
_id = Column(Integer, primary_key=True)
|
||||
note_text = Column(String(256))
|
||||
author = Column(String(128))
|
||||
created_on = Column(DateTime(), default=datetime.utcnow)
|
||||
updated_on = Column(DateTime(), default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
|
||||
class EventConfig(Base):
|
||||
__tablename__ = "event_configs"
|
||||
_id = Column(Integer, primary_key=True)
|
||||
name = Column(String(64))
|
||||
event_type = Column(String(64))
|
||||
tag = Column(String(128))
|
||||
condition = Column(String(64))
|
||||
device_id = Column(Integer, ForeignKey('devices._id'))
|
||||
device = relationship(Device)
|
||||
created_on = Column(DateTime(), default=datetime.utcnow)
|
||||
updated_on = Column(DateTime(), default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
|
||||
class Event(Base):
|
||||
__tablename__ = "events"
|
||||
_id = Column(Integer, primary_key=True)
|
||||
event_id = Column(Integer, ForeignKey('event_configs._id'))
|
||||
event = relationship(EventConfig)
|
||||
event_type = Column(String(64))
|
||||
event_condition = Column(String(64))
|
||||
created_on = Column(DateTime(), default=datetime.utcnow)
|
||||
updated_on = Column(DateTime(), default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
|
||||
class RunStatus(Base):
|
||||
__tablename__ = "run_status_log"
|
||||
_id = Column(Integer, primary_key=True)
|
||||
run_status = Column(String(64))
|
||||
created_on = Column(DateTime(), default=datetime.utcnow)
|
||||
updated_on = Column(DateTime(), default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
|
||||
class FluidShot(Base):
|
||||
__tablename__ = "fluid_shots"
|
||||
_id = Column(Integer, primary_key=True)
|
||||
pump_intake_pressure = Column(Float)
|
||||
created_on = Column(DateTime(), default=datetime.utcnow)
|
||||
updated_on = Column(DateTime(), default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
|
||||
class BackupRestore(Base):
|
||||
__tablename__ = "backup_restore"
|
||||
_id = Column(Integer, primary_key=True)
|
||||
tag = Column(String(128))
|
||||
tag_type = Column(String(128))
|
||||
device_id = Column(Integer, ForeignKey('devices._id'))
|
||||
device = relationship(Device)
|
||||
value = Column(String(128))
|
||||
created_on = Column(DateTime(), default=datetime.utcnow)
|
||||
updated_on = Column(DateTime(), default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
|
||||
class Root(object):
|
||||
__acl__ = [(Allow, Everyone, 'view'),
|
||||
(Allow, 'group:editors', 'edit')]
|
||||
|
||||
def __init__(self, request):
|
||||
pass
|
||||