72 lines
2.3 KiB
Python
72 lines
2.3 KiB
Python
from os import getenv
|
|
|
|
from django.conf import settings
|
|
from django.contrib.auth.middleware import RemoteUserMiddleware
|
|
from django.db import connection
|
|
|
|
|
|
class CustomRemoteUser(RemoteUserMiddleware):
|
|
header = getenv('PROXY_HEADER', 'HTTP_REMOTE_USER')
|
|
|
|
|
|
"""
|
|
Gist code by vstoykov, you can check his original gist at:
|
|
https://gist.github.com/vstoykov/1390853/5d2e8fac3ca2b2ada8c7de2fb70c021e50927375
|
|
Changes:
|
|
Ignoring static file requests and a certain useless admin request from triggering the logger.
|
|
Updated statements to make it Python 3 friendly.
|
|
"""
|
|
|
|
|
|
|
|
def terminal_width():
|
|
"""
|
|
Function to compute the terminal width.
|
|
"""
|
|
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(getenv['COLUMNS'])
|
|
except:
|
|
pass
|
|
if width <= 0:
|
|
width = 80
|
|
return width
|
|
|
|
|
|
def SqlPrintingMiddleware(get_response):
|
|
def middleware(request):
|
|
response = get_response(request)
|
|
if (
|
|
not settings.DEBUG
|
|
or len(connection.queries) == 0
|
|
or request.path_info.startswith(settings.MEDIA_URL)
|
|
or '/admin/jsi18n/' in request.path_info
|
|
):
|
|
return response
|
|
|
|
indentation = 2
|
|
print("\n\n%s\033[1;35m[SQL Queries for]\033[1;34m %s\033[0m\n" % (" " * indentation, request.path_info))
|
|
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("%s\033[1;32m[TOTAL QUERIES: %s]\033[0m" % (" " * indentation, len(connection.queries)))
|
|
return response
|
|
return middleware
|