timerproxy.py
44 lines
| 1.4 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 | ||||
def format_sql(sql): | ||||
sql = color_sql(sql) | ||||
sql = sql.replace('SELECT', '\n SELECT \n\t')\ | ||||
.replace('FROM', '\n FROM')\ | ||||
.replace('ORDER BY', '\n ORDER BY')\ | ||||
.replace('LIMIT', '\n LIMIT')\ | ||||
.replace('WHERE', '\n WHERE')\ | ||||
.replace('AND', '\n AND')\ | ||||
.replace('LEFT', '\n LEFT')\ | ||||
.replace('INNER', '\n INNER')\ | ||||
.replace('INSERT', '\n INSERT')\ | ||||
.replace('DELETE', '\n DELETE') | ||||
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 | ||||