NewsBlur-viq/utils/request_introspection_middleware.py

85 lines
3.3 KiB
Python
Raw Normal View History

from django.conf import settings
from utils import log as logging
2021-07-15 17:03:51 -04:00
import time
2021-02-24 12:00:12 -05:00
IGNORE_PATHS = [
2021-02-24 12:01:12 -05:00
"/_haproxychk",
2021-02-24 12:00:12 -05:00
]
class DumpRequestMiddleware:
def process_request(self, request):
2021-02-24 12:05:19 -05:00
if settings.DEBUG and request.path not in IGNORE_PATHS:
request_data = request.POST or request.GET
2021-02-24 12:07:44 -05:00
request_items = dict(request_data).items()
if request_items:
request_items_str = f"{dict(request_items)}"
if len(request_items_str) > 200:
request_items_str = request_items_str[:100] + "...[" + str(len(request_items_str)-200) + " bytes]..." + request_items_str[-100:]
logging.debug(" ---> ~FC%s ~SN~FK~BC%s~BT~ST ~FC%s~BK~FC" % (request.method, request.path, request_items_str))
2021-02-24 12:05:19 -05:00
else:
2020-12-16 22:55:21 -05:00
logging.debug(" ---> ~FC%s ~SN~FK~BC%s~BT~ST" % (request.method, request.path))
2020-06-17 03:24:16 -04:00
def process_response(self, request, response):
if hasattr(request, 'sql_times_elapsed'):
if request.sql_times_elapsed.get('redis_user'):
redis_log = "user:%s%.6f~SNs story:%s%.6f~SNs session:%s%.6f~SNs" % (
self.color_db(request.sql_times_elapsed['redis_user'], '~FC'),
request.sql_times_elapsed['redis_user'],
self.color_db(request.sql_times_elapsed['redis_story'], '~FC'),
request.sql_times_elapsed['redis_story'],
self.color_db(request.sql_times_elapsed['redis_session'], '~FC'),
request.sql_times_elapsed['redis_session'],
)
else:
redis_log = "%s%.6f~SNs" % (
self.color_db(request.sql_times_elapsed['db_redis'], '~FC'),
request.sql_times_elapsed['db_redis'],
)
logging.debug(" ---> %s~SN~FCDB times: ~FYsql: %s%.4f~SNs ~SN~FMmongo: %s%.5f~SNs ~SN~FCredis: %s" % (
2021-07-15 17:03:51 -04:00
self.elapsed_time(request),
self.color_db(request.sql_times_elapsed['sql'], '~FY'),
request.sql_times_elapsed['sql'],
2021-07-15 17:03:51 -04:00
self.color_db(request.sql_times_elapsed['mongo'], '~FM'),
request.sql_times_elapsed['mongo'],
redis_log
))
return response
2021-07-15 17:03:51 -04:00
def elapsed_time(self, request):
time_elapsed = ""
if hasattr(request, 'start_time'):
seconds = time.time() - request.start_time
color = '~FB'
if seconds >= 1:
color = '~FR'
elif seconds > .2:
color = '~SB~FK'
time_elapsed = "[%s%.4ss~SB] " % (
color,
seconds,
)
return time_elapsed
def color_db(self, seconds, default):
color = default
2021-07-15 17:05:58 -04:00
if seconds >= .25:
2021-07-15 17:03:51 -04:00
color = '~SB~FR'
2021-07-15 17:05:58 -04:00
elif seconds > .1:
2021-07-15 17:03:51 -04:00
color = '~FW'
return color
2020-07-01 18:38:37 -04:00
def __init__(self, get_response=None):
2020-06-17 03:24:16 -04:00
self.get_response = get_response
def __call__(self, request):
response = None
if hasattr(self, 'process_request'):
response = self.process_request(request)
if not response:
response = self.get_response(request)
if hasattr(self, 'process_response'):
response = self.process_response(request, response)
2020-06-17 03:24:16 -04:00
return response