mirror of
https://github.com/viq/NewsBlur.git
synced 2025-04-13 09:38:09 +00:00
49 lines
No EOL
1.8 KiB
Python
49 lines
No EOL
1.8 KiB
Python
from django.core.exceptions import MiddlewareNotUsed
|
|
from django.conf import settings
|
|
from django.db import connection
|
|
from redis.connection import Connection
|
|
from time import time
|
|
|
|
class RedisDumpMiddleware(object):
|
|
def __init__(self):
|
|
if not settings.DEBUG:
|
|
raise MiddlewareNotUsed()
|
|
|
|
def process_view(self, request, callback, callback_args, callback_kwargs):
|
|
if settings.DEBUG and not getattr(Connection, '_logging', False):
|
|
# save old methods
|
|
setattr(Connection, '_logging', True)
|
|
# self.orig_pack_command = \
|
|
# Connection.pack_command
|
|
# instrument methods to record messages
|
|
Connection.pack_command = \
|
|
self._instrument(Connection.pack_command)
|
|
return None
|
|
|
|
def process_response(self, request, response):
|
|
# if settings.DEBUG and hasattr(self, 'orig_pack_command'):
|
|
# # remove instrumentation from redis
|
|
# setattr(Connection, '_logging', False)
|
|
# Connection.pack_command = \
|
|
# self.orig_pack_command
|
|
return response
|
|
|
|
def _instrument(self, original_method):
|
|
def instrumented_method(*args, **kwargs):
|
|
message = self.process_message(*args, **kwargs)
|
|
if not message:
|
|
return original_method(*args, **kwargs)
|
|
start = time()
|
|
result = original_method(*args, **kwargs)
|
|
stop = time()
|
|
duration = stop - start
|
|
connection.queries.append({
|
|
'redis': message,
|
|
'time': '%.3f' % duration,
|
|
})
|
|
return result
|
|
return instrumented_method
|
|
|
|
def process_message(self, *args, **kwargs):
|
|
query = ' '.join([str(arg) for arg in args if not isinstance(arg, Connection)])
|
|
return { 'query': query, } |