timerproxy.py
56 lines
| 1.7 KiB
| text/x-python
|
PythonLexer
Marcin Kuzminski
|
r49 | from sqlalchemy.interfaces import ConnectionProxy | ||
import time | ||||
import logging | ||||
r90 | log = logging.getLogger('timerproxy') | |||
r153 | BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = xrange(30, 38) | |||
def color_sql(sql): | ||||
COLOR_SEQ = "\033[1;%dm" | ||||
COLOR_SQL = YELLOW | ||||
normal = '\x1b[0m' | ||||
return COLOR_SEQ % COLOR_SQL + sql + normal | ||||
r172 | def one_space_trim(s): | |||
if s.find(" ") == -1: | ||||
return s | ||||
else: | ||||
s = s.replace(' ', ' ') | ||||
return one_space_trim(s) | ||||
r153 | def format_sql(sql): | |||
sql = color_sql(sql) | ||||
r172 | sql = sql.replace('\n', '') | |||
sql = one_space_trim(sql) | ||||
sql = sql\ | ||||
.replace('SELECT', '\n\tSELECT \n\t')\ | ||||
r236 | .replace('UPDATE', '\n\tUPDATE \n\t')\ | |||
.replace('DELETE', '\n\tDELETE \n\t')\ | ||||
r172 | .replace('FROM', '\n\tFROM')\ | |||
.replace('ORDER BY', '\n\tORDER BY')\ | ||||
.replace('LIMIT', '\n\tLIMIT')\ | ||||
.replace('WHERE', '\n\tWHERE')\ | ||||
.replace('AND', '\n\tAND')\ | ||||
.replace('LEFT', '\n\tLEFT')\ | ||||
.replace('INNER', '\n\tINNER')\ | ||||
.replace('INSERT', '\n\tINSERT')\ | ||||
.replace('DELETE', '\n\tDELETE') | ||||
r153 | return sql | |||
Marcin Kuzminski
|
r49 | |||
class TimerProxy(ConnectionProxy): | ||||
def cursor_execute(self, execute, cursor, statement, parameters, context, executemany): | ||||
now = time.time() | ||||
try: | ||||
log.info(">>>>> STARTING QUERY >>>>>") | ||||
return execute(cursor, statement, parameters, context) | ||||
finally: | ||||
total = time.time() - now | ||||
r90 | try: | |||
r153 | log.info(format_sql("Query: %s" % statement % parameters)) | |||
r90 | except TypeError: | |||
r153 | log.info(format_sql("Query: %s %s" % (statement, parameters))) | |||
Marcin Kuzminski
|
r49 | log.info("<<<<< TOTAL TIME: %f <<<<<" % total) | ||
r153 | ||||