first base of project-changed apps: Herd-livestock-tag-log-elasticsearch-
This commit is contained in:
59
apps/core/middlewares.py
Normal file
59
apps/core/middlewares.py
Normal file
@@ -0,0 +1,59 @@
|
||||
from django.db import connection
|
||||
from django.conf import settings
|
||||
import os
|
||||
|
||||
|
||||
def terminal_width():
|
||||
"""
|
||||
Function to compute the terminal width.
|
||||
WARNING: This is not my code, but I've been using it forever and
|
||||
I don't remember where it came from.
|
||||
"""
|
||||
width = 0
|
||||
try:
|
||||
import struct, fcntl, termios
|
||||
s = struct.pack('HHHH', 0, 0, 0, 0)
|
||||
x = fcntl.ioctl(1, termios.TIOCGWINSZ, s)
|
||||
width = struct.unpack('HHHH', x)[1]
|
||||
except:
|
||||
pass
|
||||
if width <= 0:
|
||||
try:
|
||||
width = int(os.environ['COLUMNS'])
|
||||
except:
|
||||
pass
|
||||
if width <= 0:
|
||||
width = 80
|
||||
return width
|
||||
|
||||
|
||||
class SqlPrintingMiddleware(object):
|
||||
"""
|
||||
Middleware which prints out a list of all SQL queries done
|
||||
for each view that is processed. This is only useful for debugging.
|
||||
"""
|
||||
|
||||
def __init__(self, get_response):
|
||||
# print("heloo")
|
||||
self.get_response = get_response
|
||||
|
||||
def __call__(self, request):
|
||||
return self.process_response(request=request, response=self.get_response(request))
|
||||
|
||||
def process_response(self, request, response): # noqa
|
||||
indentation = 2
|
||||
if len(connection.queries) > 0 and settings.DEBUG:
|
||||
width = terminal_width()
|
||||
total_time = 0.0
|
||||
for query in connection.queries:
|
||||
nice_sql = query['sql'].replace('"', '').replace(',', ', ')
|
||||
sql = "\033[1;31m[%s]\033[0m %s" % (query['time'], nice_sql)
|
||||
total_time = total_time + float(query['time'])
|
||||
while len(sql) > width - indentation:
|
||||
print("%s%s" % (" " * indentation, sql[:width - indentation]))
|
||||
sql = sql[width - indentation:]
|
||||
print("%s%s\n" % (" " * indentation, sql))
|
||||
replace_tuple = (" " * indentation, str(total_time))
|
||||
print("%s\033[1;32m[TOTAL TIME: %s seconds]\033[0m" % replace_tuple)
|
||||
print(response)
|
||||
return response
|
||||
Reference in New Issue
Block a user