Add tracer for sqlalchemy
To use it in your code you should add 2 sqlalchemy engine event listeners import sqlalchemy from sqlalchemy import event as sa_event from osprofiler import sqlalchemy as sa_profiler engine = sqlaclhemy.create_engine('your_db_host') sa_profiler.add_tracing(sqlalchemy, engine, 'your_service')
This commit is contained in:
parent
ba027d8f20
commit
aa320244cc
45
osprofiler/sqlalchemy.py
Normal file
45
osprofiler/sqlalchemy.py
Normal file
@ -0,0 +1,45 @@
|
||||
# Copyright 2013 OpenStack Foundation.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from osprofiler import profiler
|
||||
|
||||
|
||||
def before_execute(name):
|
||||
"""Add listener that will send trace info before sql executed."""
|
||||
def handler(conn, clauseelement, multiparams, params):
|
||||
p = profiler.get_profiler()
|
||||
if p:
|
||||
info = {"db.statement": str(clauseelement),
|
||||
"db.multiparams": str(multiparams),
|
||||
"db.params": str(params)}
|
||||
p.start(name, info=info)
|
||||
|
||||
return handler
|
||||
|
||||
|
||||
def after_execute():
|
||||
"""Add listener that will send trace info after sql executed."""
|
||||
def handler(conn, clauseelement, multiparams, params, result):
|
||||
p = profiler.get_profiler()
|
||||
if p:
|
||||
p.stop(info={"db.result": str(result)})
|
||||
|
||||
return handler
|
||||
|
||||
|
||||
def add_tracing(sqlalchemy, engine, name):
|
||||
"""Add tracing to all sqlalchemy calls."""
|
||||
sqlalchemy.event.listen(engine, 'before_execute', before_execute(name))
|
||||
sqlalchemy.event.listen(engine, 'after_execute', after_execute())
|
Loading…
Reference in New Issue
Block a user