From 9ec6693031459d83222ecac0fe66e9060e40b18b Mon Sep 17 00:00:00 2001 From: Peter Stockings Date: Thu, 26 Jan 2023 21:53:54 +1100 Subject: [PATCH] Switch from socket.io to REST for cadence streaming in attempt to fix timeout issue --- Procfile | 2 +- app.py | 28 +++++++++++++++++++--------- db.py | 4 ++++ static/js/BLE.js | 12 +++++++++++- 4 files changed, 35 insertions(+), 11 deletions(-) diff --git a/Procfile b/Procfile index 4c77a5c..9af4d6b 100644 --- a/Procfile +++ b/Procfile @@ -1 +1 @@ -web: gunicorn --worker-class eventlet -w 1 --timeout 600 app:app \ No newline at end of file +web: gunicorn app:app --workers=4 \ No newline at end of file diff --git a/app.py b/app.py index 29ab326..e7f6bd6 100644 --- a/app.py +++ b/app.py @@ -3,7 +3,7 @@ import json from urllib import response from dateutil.relativedelta import relativedelta import os -from flask import Flask, render_template +from flask import Flask, render_template, request import jinja_partials from flask_htmx import HTMX import minify_html @@ -18,7 +18,7 @@ app = Flask(__name__) app.config['SECRET_KEY'] = 'secret!' jinja_partials.register_extensions(app) htmx = HTMX(app) -socketio = SocketIO(app, cors_allowed_origins='*') +#socketio = SocketIO(app, cors_allowed_origins='*') db = DataBase(app) @@ -37,12 +37,12 @@ def response_minify(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']) +# @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("/") @@ -73,7 +73,17 @@ def overview(device_id): return render_template('overview.html', last_cadence=last_cadence, cadences=cadences[-15:], graph_data=graph_data) +@ app.route("/cadence", methods=['POST']) +def cadence(): + data = request.get_json() + print('' + datetime.now().replace(microsecond=0).isoformat() + + ' ' + json.dumps(data)) + db.insert_cadence(data['rpm'], data['id']) + return 'ok' + + 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) + #socketio.run(app, host='127.0.0.1', port=port) + app.run(host='127.0.0.1', port=port) diff --git a/db.py b/db.py index fabca04..710f197 100644 --- a/db.py +++ b/db.py @@ -59,3 +59,7 @@ class DataBase(): def get_device(self, device_id): return self.execute('SELECT * FROM device WHERE id = %s', [device_id], one=True) + + def insert_cadence(self, rpm, device_id): + self.execute('INSERT INTO cadence (rpm, device_id) VALUES (%s, %s)', + [rpm, device_id], commit=True) diff --git a/static/js/BLE.js b/static/js/BLE.js index 6c65bc8..f751859 100644 --- a/static/js/BLE.js +++ b/static/js/BLE.js @@ -24,6 +24,7 @@ async function connect(props) { console.log("> Notifications started"); characteristic.addEventListener("characteristicvaluechanged", props.onChange); console.log("> Characteristic value changed event listener added"); + /* socket = io({ reconnection: true, reconnectionDelay: 1000, @@ -43,6 +44,7 @@ async function connect(props) { } // else the socket will automatically try to reconnect }); + */ } async function disconnect() { @@ -88,7 +90,15 @@ function parseCSC(e) { if (prevRes) { let rpm = revsToRPM(prevRes, res); if (rpm > 0) - socket.emit("message", { rpm: parseFloat(rpm.toFixed(2)), id: 1 }); + //socket.emit("message", { rpm: parseFloat(rpm.toFixed(2)), id: 1 }); + fetch("/cadence", { + method: "POST", + headers: { + Accept: "application/json, text/plain, */*", + "Content-Type": "application/json", + }, + body: JSON.stringify({ rpm: parseFloat(rpm.toFixed(2)), id: 1 }), + }); } prevRes = res; return res;