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)