Warning
This document is for an in-development version of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.
Source code for galaxy.model.orm.engine_factory
import logging
import time
from sqlalchemy import create_engine, event
from sqlalchemy.engine import Engine
log = logging.getLogger(__name__)
[docs]def build_engine(url, engine_options, database_query_profiling_proxy=False, trace_logger=None, slow_query_log_threshold=0, thread_local_log=None):
# Should we use the logging proxy?
if database_query_profiling_proxy:
import galaxy.model.orm.logging_connection_proxy as logging_connection_proxy
proxy = logging_connection_proxy.LoggingProxy()
# If metlog is enabled, do micrologging
elif trace_logger:
import galaxy.model.orm.logging_connection_proxy as logging_connection_proxy
proxy = logging_connection_proxy.TraceLoggerProxy(trace_logger)
else:
proxy = None
if slow_query_log_threshold or thread_local_log:
@event.listens_for(Engine, "before_execute")
def before_execute(conn, clauseelement, multiparams, params):
conn.info.setdefault('query_start_time', []).append(time.time())
@event.listens_for(Engine, "after_cursor_execute")
def after_cursor_execute(conn, cursor, statement,
parameters, context, executemany):
total = time.time() - conn.info['query_start_time'].pop(-1)
if total > slow_query_log_threshold:
log.debug("Slow query: %f(s)\n%s\nParameters: %s" % (total, statement, parameters))
if thread_local_log is not None:
try:
if thread_local_log.log:
log.debug("Request query: %f(s)\n%s\nParameters: %s" % (total, statement, parameters))
except AttributeError:
pass
# Create the database engine
engine = create_engine(url, proxy=proxy, **engine_options)
return engine