Mercurial > kallithea
diff rhodecode/lib/timerproxy.py @ 547:1e757ac98988
renamed project to rhodecode
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Wed, 06 Oct 2010 03:18:16 +0200 |
parents | pylons_app/lib/timerproxy.py@b4d9680cd164 |
children | b9ea10d3e419 73434499fa72 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rhodecode/lib/timerproxy.py Wed Oct 06 03:18:16 2010 +0200 @@ -0,0 +1,59 @@ +from sqlalchemy.interfaces import ConnectionProxy +import time +from sqlalchemy import log +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 one_space_trim(s): + if s.find(" ") == -1: + return s + else: + s = s.replace(' ', ' ') + return one_space_trim(s) + +def format_sql(sql): + sql = color_sql(sql) + sql = sql.replace('\n', '') + sql = one_space_trim(sql) + sql = sql\ + .replace(',', ',\n\t')\ + .replace('SELECT', '\n\tSELECT \n\t')\ + .replace('UPDATE', '\n\tUPDATE \n\t')\ + .replace('DELETE', '\n\tDELETE \n\t')\ + .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') + return sql + + +class TimerProxy(ConnectionProxy): + + def __init__(self): + super(TimerProxy, self).__init__() + self.logging_name = 'timerProxy' + self.log = log.instance_logger(self, True) + + def cursor_execute(self, execute, cursor, statement, parameters, context, executemany): + + now = time.time() + try: + self.log.info(">>>>> STARTING QUERY >>>>>") + return execute(cursor, statement, parameters, context) + finally: + total = time.time() - now + try: + self.log.info(format_sql("Query: %s" % statement % parameters)) + except TypeError: + self.log.info(format_sql("Query: %s %s" % (statement, parameters))) + self.log.info("<<<<< TOTAL TIME: %f <<<<<" % total)