Changeset - 83c7ee1b5f5c
[Not reviewed]
default
0 1 0
Marcin Kuzminski - 15 years ago 2010-05-21 03:01:31
marcin@python-works.com
improved timerproxy with sqllogging, and new way of sqlformat queries
1 file changed with 20 insertions and 10 deletions:
0 comments (0 inline, 0 general)
pylons_app/lib/timerproxy.py
Show inline comments
 
from sqlalchemy.interfaces import ConnectionProxy
 
import time
 
import logging
 
log = logging.getLogger('timerproxy')
 
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('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')
 
    sql = sql.replace('\n', '')
 
    sql = one_space_trim(sql)
 
    sql = sql\
 
        .replace('SELECT', '\n\tSELECT \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 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
 
            try:
0 comments (0 inline, 0 general)