84 lines
2.3 KiB
Python
84 lines
2.3 KiB
Python
from datetime import datetime, date, timedelta
|
|
import json
|
|
from urllib import response
|
|
from dateutil.relativedelta import relativedelta
|
|
import os
|
|
from flask import Flask, render_template
|
|
import jinja_partials
|
|
from flask_htmx import HTMX
|
|
import minify_html
|
|
from urllib.parse import urlparse
|
|
from flask_socketio import SocketIO
|
|
import pygal
|
|
from pygal.style import Style
|
|
|
|
|
|
from db import DataBase
|
|
|
|
app = Flask(__name__)
|
|
# TODO CHANGE SECRET KEY TO ENVIRONMENT VARIABLE
|
|
app.config['SECRET_KEY'] = 'secret!'
|
|
jinja_partials.register_extensions(app)
|
|
htmx = HTMX(app)
|
|
socketio = SocketIO(app, cors_allowed_origins='*')
|
|
db = DataBase(app)
|
|
|
|
|
|
@app.after_request
|
|
def response_minify(response):
|
|
"""
|
|
minify html response to decrease site traffic
|
|
"""
|
|
if response.content_type == u'text/html; charset=utf-8':
|
|
response.set_data(
|
|
minify_html.minify(response.get_data(
|
|
as_text=True), minify_js=True, remove_processing_instructions=True)
|
|
)
|
|
|
|
return response
|
|
return response
|
|
|
|
|
|
@socketio.on('message')
|
|
def handle_message(data):
|
|
current_time = datetime.now().replace(
|
|
microsecond=0).isoformat()
|
|
print('' + current_time + ' ' + json.dumps(data))
|
|
db.insert_cadence(data['rpm'], data['id'])
|
|
|
|
|
|
@ app.route("/")
|
|
def home():
|
|
return render_template('base.html')
|
|
|
|
|
|
@app.route("/overview")
|
|
def overview():
|
|
cadences = db.get_all_cadences()
|
|
last_cadence = cadences[-1]['rpm']
|
|
|
|
custom_style = Style(
|
|
background='transparent',
|
|
plot_background='transparent',
|
|
foreground='#53E89B',
|
|
foreground_strong='#53A0E8',
|
|
foreground_subtle='#630C0D',
|
|
opacity='.6',
|
|
opacity_hover='.9',
|
|
transition='400ms ease-in',
|
|
colors=('#E853A0', '#E8537A', '#E95355', '#E87653', '#E89B53'))
|
|
|
|
graph = pygal.Line(show_y_guides=False,
|
|
show_legend=False, style=custom_style)
|
|
graph.x_labels = [c['logged_at'] for c in cadences]
|
|
graph.add('RPM', [c['rpm'] for c in cadences])
|
|
graph_data = graph.render_data_uri()
|
|
|
|
return render_template('overview.html', last_cadence=last_cadence, cadences=cadences[-15:], graph_data=graph_data)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
# Bind to PORT if defined, otherwise default to 5000.
|
|
port = int(os.environ.get('PORT', 5000))
|
|
socketio.run(app, host='127.0.0.1', port=port)
|