From 918c1fa17db45c96a0d3e6a36bf5b1600f96cdf7 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Fri, 17 Jan 2020 20:21:59 +0300 Subject: [PATCH] middleware to log db queries --- apps/utils/middleware.py | 28 ++++++++++++++++++++++++++++ project/settings/development.py | 5 ++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/apps/utils/middleware.py b/apps/utils/middleware.py index c772e645..f5048345 100644 --- a/apps/utils/middleware.py +++ b/apps/utils/middleware.py @@ -1,5 +1,8 @@ """Custom middlewares.""" +import logging + from django.utils import translation, timezone +from django.db import connection from account.models import User from configuration.models import TranslationSettings @@ -7,6 +10,8 @@ from main.methods import determine_user_city from main.models import SiteSettings from translation.models import Language +logger = logging.getLogger(__name__) + def get_locale(cookie_dict): return cookie_dict.get('locale') @@ -92,3 +97,26 @@ def user_last_ip(get_response): return response return middleware + + +def log_db_queries_per_API_request(get_response): + """Middleware-helper to optimize requests performance""" + + def middleware(request): + total_time = 0 + response = get_response(request) + for query in connection.queries: + query_time = query.get('time') + if query_time is None: + query_time = query.get('duration', 0) / 1000 + total_time += float(query_time) + + total_queries = len(connection.queries) + if total_queries > 10: + logger.error( + f'\t{len(connection.queries)} queries run, total {total_time} seconds \t' + f'URL: "{request.method} {request.get_full_path_info()}\t"' + ) + return response + + return middleware diff --git a/project/settings/development.py b/project/settings/development.py index 24a1a795..3048541b 100644 --- a/project/settings/development.py +++ b/project/settings/development.py @@ -80,4 +80,7 @@ EMAIL_USE_TLS = True EMAIL_HOST = 'smtp.gmail.com' EMAIL_HOST_USER = 'anatolyfeteleu@gmail.com' EMAIL_HOST_PASSWORD = 'nggrlnbehzksgmbt' -EMAIL_PORT = 587 \ No newline at end of file +EMAIL_PORT = 587 + + +MIDDLEWARE.append('utils.middleware.log_db_queries_per_API_request')