/lib/galaxy/model/orm/logging_connection_proxy.py

https://bitbucket.org/cistrome/cistrome-harvard/ · Python · 48 lines · 35 code · 7 blank · 6 comment · 2 complexity · b654c720bb3341c027f73b2c62a6d3d1 MD5 · raw file

  1. import time
  2. import inspect
  3. import os
  4. from galaxy.model.orm import *
  5. import logging
  6. log = logging.getLogger( __name__ )
  7. wd = os.getcwd()
  8. def stripwd( s ):
  9. if s.startswith( wd ):
  10. return s[len(wd):]
  11. return s
  12. def pretty_stack():
  13. rval = []
  14. for frame, fname, line, funcname, _, _ in inspect.stack()[2:]:
  15. rval.append( "%s:%s@%d" % ( stripwd( fname ), funcname, line ) )
  16. return rval
  17. class LoggingProxy(ConnectionProxy):
  18. """
  19. Logs SQL statements using standard logging module
  20. """
  21. def cursor_execute(self, execute, cursor, statement, parameters, context, executemany):
  22. start = time.clock()
  23. rval = execute(cursor, statement, parameters, context)
  24. duration = time.clock() - start
  25. log.debug( "statement: %r parameters: %r executemany: %r duration: %r stack: %r",
  26. statement, parameters, executemany, duration, " > ".join( pretty_stack() ) )
  27. return rval
  28. class TraceLoggerProxy(ConnectionProxy):
  29. """
  30. Logs SQL statements using a metlog client
  31. """
  32. def __init__( self, trace_logger ):
  33. self.trace_logger = trace_logger
  34. def cursor_execute(self, execute, cursor, statement, parameters, context, executemany):
  35. start = time.clock()
  36. rval = execute(cursor, statement, parameters, context)
  37. duration = time.clock() - start
  38. self.trace_logger.log( "sqlalchemy_query",
  39. message="Query executed", statement=statement, parameters=parameters,
  40. executemany=executemany, duration=duration )
  41. return rval