we got graphs

This commit is contained in:
Andrew Ridgway 2024-07-23 15:03:37 +10:00
parent 0278942e29
commit 048ee9c03b
13 changed files with 136 additions and 105 deletions

2
.gitignore vendored
View File

@ -1,4 +1,4 @@
*__pycache__* *__pycache__*
.venv* .venv*
.env .env*
mongo_data/* mongo_data/*

View File

@ -1,4 +1,4 @@
FROM python:3.10 as pool_base_image FROM python:3.10 AS pool_base_image
WORKDIR /pool_data WORKDIR /pool_data
@ -9,4 +9,3 @@ RUN apt-get update -y && apt-get upgrade -y && apt-get install -y libsasl2-dev p
RUN pip install --upgrade pip RUN pip install --upgrade pip
RUN pip --default-timeout=1000 install -r requirements.txt RUN pip --default-timeout=1000 install -r requirements.txt

View File

@ -1,4 +1,4 @@
FROM pool_base_image as flask FROM pool_base_image AS flask
COPY requirements.txt . COPY requirements.txt .

3
pyproject.toml Normal file
View File

@ -0,0 +1,3 @@
[tool.pyright]
venvPath = "."
venv = ".venv"

View File

@ -6,3 +6,4 @@ click
Flask-WTF Flask-WTF
bootstrap-flask bootstrap-flask
waitress waitress
bokeh

View File

@ -1,9 +1,10 @@
from bokeh.models.layouts import HBox from bokeh.models.layouts import HBox
from bokeh.plotting import column
from charts import PoolCharts from charts import PoolCharts
from bokeh.io import output_file, show from bokeh.io import output_file, show
from bokeh.layouts import row from bokeh.layouts import row
output_file("data_plot.html") output_file("static/data_plot.html")
chart = PoolCharts.PoolCharts() chart = PoolCharts.PoolCharts()
@ -13,4 +14,4 @@ total_chlorine = chart.line_chart("Pool Total Chlorine", "total_chlorine", 50)
free_chlorine = chart.line_chart("Pool Free Chlorine", "free_chlorine", 50) free_chlorine = chart.line_chart("Pool Free Chlorine", "free_chlorine", 50)
show(row(ph, total_chlorine, free_chlorine)) show(column(ph, total_chlorine, free_chlorine))

View File

@ -17,7 +17,7 @@ class PoolCharts():
data_list = [] data_list = []
date_count = {} date_count = {}
for record in data: for record in data:
if record[field] != "None": if field in record and record[field] != "None":
if record["date"] not in dates: if record["date"] not in dates:
print("new date record") print("new date record")
dates.append(record["date"]) dates.append(record["date"])
@ -42,6 +42,8 @@ class PoolCharts():
p.line(x=dates, y=data_list) p.line(x=dates, y=data_list)
p.xgrid.grid_line_color = None p.xgrid.grid_line_color = None
if not data_list:
p.y_range.start = 0
else:
p.y_range.start = round(min(data_list) - 1) p.y_range.start = round(min(data_list) - 1)
return p return p

File diff suppressed because one or more lines are too long

View File

@ -1,3 +1,4 @@
from bokeh.core.enums import SpatialUnitsType
import mongo.build_db as pool_database import mongo.build_db as pool_database
import mongo.query_db as pool_database_query import mongo.query_db as pool_database_query
@ -7,6 +8,11 @@ from flask_bootstrap import Bootstrap5
from wtforms import StringField, SubmitField, DateField, IntegerField, PasswordField, DecimalField, RadioField, TextAreaField from wtforms import StringField, SubmitField, DateField, IntegerField, PasswordField, DecimalField, RadioField, TextAreaField
from wtforms.validators import DataRequired, Length, Optional from wtforms.validators import DataRequired, Length, Optional
from waitress import serve from waitress import serve
from bokeh.models.layouts import HBox
from bokeh.plotting import column
from charts import PoolCharts
from bokeh.io import output_file, show
from bokeh.layouts import row
app = Flask(__name__) app = Flask(__name__)
app.secret_key = 'testsecret' #this value will change app.secret_key = 'testsecret' #this value will change
@ -14,6 +20,21 @@ app.secret_key = 'testsecret' #this value will change
bootstrap = Bootstrap5(app) bootstrap = Bootstrap5(app)
csrf = CSRFProtect(app) csrf = CSRFProtect(app)
# used to configure the bokeh plot for graphs
output_file("/pool_data/src/flask/static/data_plot.html")
def create_graphs():
chart = PoolCharts.PoolCharts()
ph = chart.line_chart("Pool PH", "ph", 30)
total_chlorine = chart.line_chart("Pool Total Chlorine", "total_chlorine", 30)
free_chlorine = chart.line_chart("Pool Free Chlorine", "free_chlorine", 30)
alkalinity = chart.line_chart("Alkalinity", "alkalinity", 30)
salt = chart.line_chart("Salt", "salt", 30)
temp = chart.line_chart("Temperature", "temp", 30)
hardness = chart.line_chart("Hardness", "hardness", 30)
stabiliser = chart.line_chart("Stabiliser", "stabiliser", 30)
show(row(column(ph, total_chlorine, free_chlorine, temp), column(salt, alkalinity, hardness, stabiliser)))
class userForm(FlaskForm): class userForm(FlaskForm):
username = StringField("User Name?", validators=[DataRequired()]) username = StringField("User Name?", validators=[DataRequired()])
@ -54,7 +75,7 @@ def index():
def updater(): def updater():
if 'logged_in' not in session: if 'logged_in' not in session:
return redirect("/") return redirect("/")
create_graphs()
query_db = pool_database_query.pool_query() query_db = pool_database_query.pool_query()
query = query_db.get_top(10, "ph") query = query_db.get_top(10, "ph")
form = dataForm() form = dataForm()
@ -117,4 +138,3 @@ def user_detail(id):
if __name__ == '__main__': if __name__ == '__main__':
#app.run(host='0.0.0.0') #app.run(host='0.0.0.0')
serve(app, host='0.0.0.0', port=5000, url_scheme='https') serve(app, host='0.0.0.0', port=5000, url_scheme='https')

File diff suppressed because one or more lines are too long

View File

@ -1,30 +1,26 @@
<!DOCTYPE html> <!doctype html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title> <title>{% block title %} Let there Be Pool Data {% endblock %}</title>
{% block title %}
Let there Be Pool Data
{% endblock %}
</title>
{{ bootstrap.load_css() }} {{ bootstrap.load_css() }}
<style> <style>
body { background: #e8f1f9; } body {
background: #e8f1f9;
}
</style> </style>
</head> </head>
<body> <body>
<!-- this is a base template using Bootstrap-Flask <!-- this is a base template using Bootstrap-Flask
https://bootstrap-flask.readthedocs.io/ --> https://bootstrap-flask.readthedocs.io/ -->
{% block content %} {% block content %} {% endblock %}
{% endblock %}
<!-- you can delete the next line if you're not using any Bootstrap JS -->
<!-- you can delete the next line if you're not using any Bootstrap JS --> {{ bootstrap.load_js() }}
{{ bootstrap.load_js() }} </body>
</body>
</html> </html>

View File

@ -27,7 +27,7 @@
<td> <td>
{{ render_form(form) }} {{ render_form(form) }}
</td> </td>
<td> <!-- <td>
<div class="container"> <div class="container">
<div class="col-md-10 col-lg-8 mx-lg-auto mx-md-auto"> <div class="col-md-10 col-lg-8 mx-lg-auto mx-md-auto">
@ -45,11 +45,20 @@
</table> </table>
</div> </div>
</div> </div>
</td> -->
<td>
<div class="container">
<div class= "col-xs-12 col-sm-12 col-md-12">
<iframe style="width: 100vw;height: 80vh;position: relative;" src="static/data_plot.html" frameborder="0" allowfullscreen>
</iframe>
</div>
</div>
</td> </td>
</tr> </tr>
</table>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>
{% endblock %} {% endblock %}

View File

@ -1,4 +1,4 @@
# /bin/bash ou /bin/bash
source .venv/bin/activate source .venv/bin/activate
source .env source .env