137 lines
5.1 KiB
Python
137 lines
5.1 KiB
Python
from pyramid.view import view_config
|
|
from pyramid.httpexceptions import HTTPFound
|
|
from pyramid.security import remember, forget
|
|
from datetime import datetime, timedelta
|
|
from math import ceil
|
|
from .view_helpers import *
|
|
|
|
|
|
@view_config(route_name='home', renderer='templates/dashboard.jinja2')
|
|
@view_config(route_name="json_snapshot", renderer="prettyjson")
|
|
def my_view(request):
|
|
latest_tag_values = []
|
|
latesttag_agg = request.db['measurements'].aggregate([
|
|
{'$sort': {'dateStored': 1}},
|
|
{
|
|
'$group': {
|
|
'_id': '$tagname',
|
|
'currentValue': {'$last': '$currentValue'},
|
|
'units': {'$last': '$units'},
|
|
'maxValue': {'$last': '$maxValue'},
|
|
'minValue': {'$last': '$minValue'},
|
|
'totalValue': {'$last': '$totalValue'},
|
|
'averageValue': {'$last': '$averageValue'},
|
|
'useTotal': {'$last': '$useTotal'},
|
|
'useAverage': {'$last': '$useAverage'}
|
|
}
|
|
}
|
|
])
|
|
for t in latesttag_agg:
|
|
latest_tag_values.append(t)
|
|
|
|
latest_card = []
|
|
try:
|
|
latest_card = list(request.db['cards'].find().sort("timestamp", -1).limit(1))[0]
|
|
except IndexError:
|
|
latest_card = []
|
|
|
|
return {'project': 'POC Web Interface', 'navgroup': 'dashboard', 'tag_values': latest_tag_values, 'card': latest_card}
|
|
|
|
|
|
@view_config(route_name="gaugeoff_all", renderer="templates/gaugeoff_all.jinja2")
|
|
@view_config(route_name="json_gaugeoff_all", renderer="prettyjson")
|
|
def gaugeoff_all(request):
|
|
gaugeoff_list = []
|
|
dateagg = list(request.db['gaugeOff'].aggregate(
|
|
[
|
|
{
|
|
'$project': {
|
|
'yearMonthDay': {'$dateToString': {'format': "%Y-%m-%d", 'date': "$timestamp"}},
|
|
'tagname': 1,
|
|
'dailyTotal': 1,
|
|
'dailyAverage': 1,
|
|
'maxDailyValue': 1,
|
|
'minDailyValue': 1,
|
|
'currentValue': 1
|
|
}
|
|
},
|
|
{
|
|
'$group': {
|
|
'_id': "$yearMonthDay",
|
|
'tags': {'$push': {'name': "$tagname"}},
|
|
'totals': {'$push': {'total': "$dailyTotal"}},
|
|
'averages': {'$push': {'average': "$dailyAverage"}},
|
|
'max': {'$push': {'max': "$maxDailyValue"}},
|
|
'min': {'$push': {'min': "$minDailyValue"}},
|
|
'last': {'$push': {'last': "$currentValue"}}
|
|
}
|
|
}
|
|
]))
|
|
for d in dateagg:
|
|
newGO = {'date': datetime.strptime(d["_id"], '%Y-%m-%d'), 'tags': {}}
|
|
for i in range(0, len(d['tags'])):
|
|
newTagObj = {
|
|
"max": d['max'][i]['max'],
|
|
"min": d['min'][i]['min'],
|
|
"last": d['last'][i]['last'],
|
|
"total": d['totals'][i]['total'],
|
|
"average": d['averages'][i]['average'],
|
|
}
|
|
newGO['tags'][d['tags'][i]['name']] = newTagObj
|
|
gaugeoff_list.append(newGO)
|
|
return {'navgroup': 'gaugeoff', 'data': gaugeoff_list}
|
|
|
|
|
|
@view_config(route_name="runstatus", renderer="templates/runstatus.jinja2")
|
|
@view_config(route_name="json_runstatus", renderer="prettyjson")
|
|
@view_config(route_name="json_runstatus_page", renderer="prettyjson")
|
|
def run_status(request):
|
|
page_num = 1
|
|
try:
|
|
page_num = int(request.matchdict['page_num'])
|
|
except KeyError:
|
|
pass
|
|
|
|
num_per_page = 100
|
|
num_cards = request.db['runStatus'].count()
|
|
pages = ceil(num_cards / num_per_page)
|
|
runStatuses = list(request.db['runStatus'].find().sort("timestamp", -1).skip(num_per_page * (page_num - 1)).limit(num_per_page))
|
|
return {'navgroup': 'runstatus', 'data': runStatuses, 'pagination': Pagination(page_num, num_per_page, num_cards)}
|
|
|
|
|
|
@view_config(route_name="config", renderer="templates/config.jinja2", permission="edit")
|
|
@view_config(route_name="json_config", renderer="prettyjson", permission="edit")
|
|
def well_config(request):
|
|
current_configuration = list(request.db['wellConfiguration'].find().sort("timestamp", -1).limit(1))[0]
|
|
return {'navgroup': 'config', 'config': current_configuration}
|
|
|
|
|
|
@view_config(route_name="admin", renderer="templates/admin.jinja2", permission="edit")
|
|
def admin_view(request):
|
|
address = get_poc_address(request) or 'localhost'
|
|
return {'navgroup': 'admin', 'pocIPAddress': address}
|
|
|
|
|
|
@view_config(route_name="auth")
|
|
def sign_in_out(request):
|
|
username = request.POST.get('username')
|
|
if username:
|
|
if check_password(request, username, request.POST.get('password')):
|
|
headers = remember(request, username)
|
|
else:
|
|
headers = forget(request)
|
|
else:
|
|
headers = forget(request)
|
|
return HTTPFound(location=request.route_url('home'), headers=headers)
|
|
|
|
|
|
@view_config(route_name='register',
|
|
renderer='templates/register.jinja2', permission="edit")
|
|
def register(request):
|
|
return {"navgroup": "user"}
|
|
|
|
|
|
@view_config(route_name='setpoints', renderer='templates/setpoints.jinja2', permission='edit')
|
|
def setpoints(request):
|
|
return {"navgroup": "setpoints"}
|