Skip to content

Commit

Permalink
enable explain breadcrumbs when x-debug is active
Browse files Browse the repository at this point in the history
  • Loading branch information
Simon Davy committed Jan 15, 2020
1 parent 8e05c34 commit a8bb6fb
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 15 deletions.
2 changes: 1 addition & 1 deletion talisker/postgresql.py
Expand Up @@ -136,7 +136,7 @@ def _record(self, msg, query, vars, duration, extra={}):

def processor(data):
qdata['query'] = self._format_query(query, vars)
if self.explain_breadcrumbs:
if self.explain_breadcrumbs or talisker.Context.debug:
try:
cursor = base_connection.cursor()
cursor.execute('EXPLAIN ' + query, vars)
Expand Down
69 changes: 55 additions & 14 deletions tests/test_sentry.py
Expand Up @@ -300,39 +300,80 @@ def test_sql_summary_crumb():
}


@require_module('psycopg2')
def test_sql_crumbs_functional(request, postgresql, context, config):
@pytest.fixture
def test_db(postgresql):
import psycopg2
from talisker.postgresql import TaliskerConnection

config['TALISKER_EXPLAIN_SQL'] = '1'
table = request.function.__name__

with psycopg2.connect(postgresql.dsn) as ddl:
with ddl.cursor() as cur:
cur.execute("""
CREATE TABLE IF NOT EXISTS {} (
CREATE TABLE IF NOT EXISTS test (
id INTEGER PRIMARY KEY,
value TEXT
);
""".format(table))
cur.execute("INSERT INTO {} VALUES (1, 'foo')".format(table))
""")
cur.execute("INSERT INTO test VALUES (1, 'foo')")

return TaliskerConnection(postgresql.dsn)


cur = TaliskerConnection(postgresql.dsn).cursor()
@require_module('psycopg2')
def test_sql_crumbs_functional_explain_disabled(test_db, context):
cur = test_db.cursor()

q = 'SELECT * FROM {} WHERE id = %s'.format(table)
q = 'SELECT * FROM test WHERE id = %s'
cur.execute(q, (1,))
cur.fetchall()
talisker.sentry.get_client().captureMessage(table)
talisker.sentry.get_client().captureMessage('test')
msg = context.sentry[0]
sql_crumbs = [
c for c in msg['breadcrumbs']['values'] if c['category'] == 'sql'
]
data = sql_crumbs[0]['data']
assert data['query'] == talisker.postgresql.prettify_sql(q)
assert data['plan'].startswith(
'Index Scan using {0}_pkey on {0}'.format(table)
)
assert 'plan' not in data
assert 'duration_ms' in data
assert 'connection' in data


@require_module('psycopg2')
def test_sql_crumbs_functional_explain_config(test_db, context, config):
config['TALISKER_EXPLAIN_SQL'] = '1'

cur = test_db.cursor()

q = 'SELECT * FROM test WHERE id = %s'
cur.execute(q, (1,))
cur.fetchall()
talisker.sentry.get_client().captureMessage('test')
msg = context.sentry[0]
sql_crumbs = [
c for c in msg['breadcrumbs']['values'] if c['category'] == 'sql'
]
data = sql_crumbs[0]['data']
assert data['query'] == talisker.postgresql.prettify_sql(q)
assert data['plan'].startswith('Index Scan using test_pkey on test')
assert 'duration_ms' in data
assert 'connection' in data


@require_module('psycopg2')
def test_sql_crumbs_functional_explain_context(test_db, context):
talisker.Context.set_debug()
cur = test_db.cursor()

q = 'SELECT * FROM test WHERE id = %s'
cur.execute(q, (1,))
cur.fetchall()
talisker.sentry.get_client().captureMessage('test')
msg = context.sentry[0]
sql_crumbs = [
c for c in msg['breadcrumbs']['values'] if c['category'] == 'sql'
]
data = sql_crumbs[0]['data']
assert data['query'] == talisker.postgresql.prettify_sql(q)
assert data['plan'].startswith('Index Scan using test_pkey on test')
assert 'duration_ms' in data
assert 'connection' in data

Expand Down

0 comments on commit a8bb6fb

Please sign in to comment.