import time
import inspect
import os
from galaxy.model.orm import *
import logging
log = logging.getLogger( __name__ )
wd = os.getcwd()
[docs]def stripwd( s ):
if s.startswith( wd ):
return s[len(wd):]
return s
[docs]def pretty_stack():
rval = []
for frame, fname, line, funcname, _, _ in inspect.stack()[2:]:
rval.append( "%s:%s@%d" % ( stripwd( fname ), funcname, line ) )
return rval
[docs]class LoggingProxy(ConnectionProxy):
"""
Logs SQL statements using standard logging module
"""
[docs] def cursor_execute(self, execute, cursor, statement, parameters, context, executemany):
start = time.clock()
rval = execute(cursor, statement, parameters, context)
duration = time.clock() - start
log.debug( "statement: %r parameters: %r executemany: %r duration: %r stack: %r",
statement, parameters, executemany, duration, " > ".join( pretty_stack() ) )
return rval
[docs]class TraceLoggerProxy(ConnectionProxy):
"""
Logs SQL statements using a metlog client
"""
def __init__( self, trace_logger ):
self.trace_logger = trace_logger
[docs] def cursor_execute(self, execute, cursor, statement, parameters, context, executemany):
start = time.clock()
rval = execute(cursor, statement, parameters, context)
duration = time.clock() - start
self.trace_logger.log( "sqlalchemy_query",
message="Query executed", statement=statement, parameters=parameters,
executemany=executemany, duration=duration )
return rval