From dd96e7721b403f673db0d18456b32b06848f2ab1 Mon Sep 17 00:00:00 2001 From: RunasSudo Date: Mon, 2 Jan 2023 16:59:52 +1100 Subject: [PATCH] Display query/page generation time in debug mode --- drcr/templates/base.html | 6 ++++++ drcr/webapp.py | 29 ++++++++++++++++++++++++----- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/drcr/templates/base.html b/drcr/templates/base.html index ae42812..6736f15 100644 --- a/drcr/templates/base.html +++ b/drcr/templates/base.html @@ -40,6 +40,12 @@
{% block content %}{% endblock %} + + {% if config['DEBUG'] %} +
+

Queries executed in {{ dbtime() }} msec. Page generated in __EXECUTION_TIME__ msec.

+
+ {% endif %}
{% endblock %} diff --git a/drcr/webapp.py b/drcr/webapp.py index 91fe586..d7449fe 100644 --- a/drcr/webapp.py +++ b/drcr/webapp.py @@ -14,16 +14,19 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from flask import Flask +from flask import Flask, g +from flask_sqlalchemy.record_queries import get_recorded_queries from .database import db from .general_journal.models import GeneralJournalTransaction from .statements.models import StatementLine, StatementLineTransaction +import time + app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///drcr.db' -app.config['SQLALCHEMY_RECORD_QUERIES'] = True +app.config['SQLALCHEMY_RECORD_QUERIES'] = app.debug db.init_app(app) def all_transactions(): @@ -42,6 +45,22 @@ from .statements import views def initdb(): db.create_all() -@app.teardown_appcontext -def shutdown_session(exception=None): - db_session.remove() +if app.debug: + @app.before_request + def before_request(): + g.start = time.time() + + @app.after_request + def after_request(response): + diff = time.time() - g.start + if response.response and response.status_code == 200 and response.content_type.startswith('text/html'): + response.set_data(response.get_data().replace(b'__EXECUTION_TIME__', bytes(format(diff * 1000, '.1f'), 'utf-8'))) + return response + + @app.context_processor + def add_dbtime(): + def dbtime(): + queries = get_recorded_queries() + total_duration = sum(q.duration for q in queries) + return format(total_duration * 1000, '.1f') + return dict(dbtime=dbtime)