Skip to content

Commit 9056af4

Browse files
authored
Merge branch 'master' into jgreer013/issue-6596
2 parents 7215444 + e7262e9 commit 9056af4

13 files changed

Lines changed: 1202 additions & 2096 deletions

File tree

requirements-testing.txt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
pytest>=6.0.0
22
pytest-cov
3+
dataclasses; python_version < "3.7"
34
pytest-forked
4-
pytest-localserver
5-
pytest-timeout
65
executing
76
asttokens
87
responses
9-
httpcore[http2]
108
setuptools
119
docker

scripts/populate_tox/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,8 @@
108108
"djangorestframework",
109109
"pytest-django",
110110
"Werkzeug",
111+
"channels[daphne]",
111112
],
112-
">=2.0": ["channels[daphne]"],
113113
">=2.2,<3.1": ["six"],
114114
">=3.0": ["pytest-asyncio"],
115115
"<3.3": [

scripts/populate_tox/package_dependencies.jsonl

Lines changed: 19 additions & 48 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

scripts/populate_tox/releases.jsonl

Lines changed: 5 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

scripts/populate_tox/tox.jinja

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,14 @@ deps =
8080
# === Common ===
8181
py3.8-common: hypothesis
8282
common: brotli
83+
common: httpcore[asyncio,http2]
8384
common: jsonschema
8485
common: pysocks
8586
common: pytest-asyncio
86-
common: httpcore[asyncio]
87+
common: pytest-timeout
88+
common: pytest_localserver
8789
common: socksio
90+
common: werkzeug
8891
# See https://github.com/pytest-dev/pytest/issues/9621
8992
# and https://github.com/pytest-dev/pytest-forked/issues/67
9093
# for justification of the upper bound on pytest
@@ -102,11 +105,15 @@ deps =
102105
{py3.6,py3.7}-gevent: pytest<7.0.0
103106
{py3.8,py3.9,py3.10,py3.11,py3.12}-gevent: pytest
104107
gevent: brotli
108+
gevent: httpcore[http2]
105109
gevent: jsonschema
106110
gevent: pysocks
107111
gevent: pytest-asyncio
112+
gevent: pytest-timeout
113+
gevent: pytest_localserver
108114
gevent: setuptools<82
109115
gevent: socksio
116+
gevent: werkzeug
110117
{py3.10,py3.11}-gevent: zope.event<5.0.0
111118
{py3.10,py3.11}-gevent: zope.interface<8.0
112119

sentry_sdk/integrations/clickhouse_driver.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ def _inner(*args: "P.args", **kwargs: "P.kwargs") -> "T":
9090
attributes={
9191
"sentry.op": OP.DB,
9292
"sentry.origin": ClickhouseDriverIntegration.origin,
93+
SPANDATA.DB_QUERY_TEXT: str(query),
9394
},
9495
)
9596
else:

sentry_sdk/integrations/pymongo.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ def started(self, event: "CommandStartedEvent") -> None:
155155
span_first_data = {
156156
"db.operation.name": operation_name,
157157
"db.collection.name": collection_name,
158+
SPANDATA.DB_QUERY_TEXT: query,
158159
"sentry.op": OP.DB,
159160
"sentry.origin": PyMongoIntegration.origin,
160161
**db_data,

tests/conftest.py

Lines changed: 66 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,17 @@
2424
jsonschema = None
2525

2626
import pytest
27-
from pytest_localserver.http import WSGIServer
28-
from werkzeug.wrappers import Request, Response
27+
28+
try:
29+
from pytest_localserver.http import WSGIServer
30+
except ImportError:
31+
WSGIServer = None
32+
33+
try:
34+
from werkzeug.wrappers import Request, Response
35+
except ImportError:
36+
Request = None
37+
Response = None
2938

3039
try:
3140
from starlette.testclient import TestClient
@@ -1624,53 +1633,61 @@ def __ne__(self, other):
16241633
CapturedData = namedtuple("CapturedData", ["path", "event", "envelope", "compressed"])
16251634

16261635

1627-
class CapturingServer(WSGIServer):
1628-
def __init__(self, host="127.0.0.1", port=0, ssl_context=None):
1629-
WSGIServer.__init__(self, host, port, self, ssl_context=ssl_context)
1630-
self.code = 204
1631-
self.headers = {}
1632-
self.captured = []
1633-
1634-
def respond_with(self, code=200, headers=None):
1635-
self.code = code
1636-
if headers:
1637-
self.headers = headers
1638-
1639-
def clear_captured(self):
1640-
del self.captured[:]
1636+
@pytest.fixture(scope="module")
1637+
def wsgi_capturing_server():
1638+
assert WSGIServer is not None
1639+
1640+
class CapturingServer(WSGIServer):
1641+
def __init__(self, host="127.0.0.1", port=0, ssl_context=None):
1642+
WSGIServer.__init__(self, host, port, self, ssl_context=ssl_context)
1643+
self.code = 204
1644+
self.headers = {}
1645+
self.captured = []
1646+
1647+
def respond_with(self, code=200, headers=None):
1648+
self.code = code
1649+
if headers:
1650+
self.headers = headers
1651+
1652+
def clear_captured(self):
1653+
del self.captured[:]
1654+
1655+
def __call__(self, environ, start_response):
1656+
"""
1657+
This is the WSGI application.
1658+
"""
1659+
assert Request is not None
1660+
assert Response is not None
1661+
1662+
request = Request(environ)
1663+
event = envelope = None
1664+
content_encoding = request.headers.get("content-encoding")
1665+
if content_encoding == "gzip":
1666+
rdr = gzip.GzipFile(fileobj=io.BytesIO(request.data))
1667+
compressed = True
1668+
elif content_encoding == "br":
1669+
rdr = io.BytesIO(brotli.decompress(request.data))
1670+
compressed = True
1671+
else:
1672+
rdr = io.BytesIO(request.data)
1673+
compressed = False
16411674

1642-
def __call__(self, environ, start_response):
1643-
"""
1644-
This is the WSGI application.
1645-
"""
1646-
request = Request(environ)
1647-
event = envelope = None
1648-
content_encoding = request.headers.get("content-encoding")
1649-
if content_encoding == "gzip":
1650-
rdr = gzip.GzipFile(fileobj=io.BytesIO(request.data))
1651-
compressed = True
1652-
elif content_encoding == "br":
1653-
assert brotli is not None
1654-
rdr = io.BytesIO(brotli.decompress(request.data))
1655-
compressed = True
1656-
else:
1657-
rdr = io.BytesIO(request.data)
1658-
compressed = False
1659-
1660-
if request.mimetype == "application/json":
1661-
event = parse_json(rdr.read())
1662-
else:
1663-
envelope = Envelope.deserialize_from(rdr)
1664-
1665-
self.captured.append(
1666-
CapturedData(
1667-
path=request.path,
1668-
event=event,
1669-
envelope=envelope,
1670-
compressed=compressed,
1675+
if request.mimetype == "application/json":
1676+
event = parse_json(rdr.read())
1677+
else:
1678+
envelope = Envelope.deserialize_from(rdr)
1679+
1680+
self.captured.append(
1681+
CapturedData(
1682+
path=request.path,
1683+
event=event,
1684+
envelope=envelope,
1685+
compressed=compressed,
1686+
)
16711687
)
1672-
)
16731688

1674-
response = Response(status=self.code)
1675-
response.headers.extend(self.headers)
1676-
return response(environ, start_response)
1689+
response = Response(status=self.code)
1690+
response.headers.extend(self.headers)
1691+
return response(environ, start_response)
1692+
1693+
return CapturingServer()

tests/integrations/clickhouse_driver/test_clickhouse_driver.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,6 @@ def test_clickhouse_client_spans(
234234
sentry_init,
235235
capture_events,
236236
capture_items,
237-
capture_envelopes,
238237
span_streaming,
239238
):
240239
sentry_init(
@@ -278,6 +277,7 @@ def test_clickhouse_client_spans(
278277
"db.namespace": "",
279278
"db.user": "default",
280279
"sentry.op": "db",
280+
"db.query.text": "DROP TABLE IF EXISTS test",
281281
"sentry.origin": "auto.db.clickhouse_driver",
282282
"server.address": "localhost",
283283
"server.port": 9000,
@@ -293,6 +293,7 @@ def test_clickhouse_client_spans(
293293
"db.namespace": "",
294294
"db.user": "default",
295295
"sentry.op": "db",
296+
"db.query.text": "CREATE TABLE test (x Int32) ENGINE = Memory",
296297
"sentry.origin": "auto.db.clickhouse_driver",
297298
"server.address": "localhost",
298299
"server.port": 9000,
@@ -308,6 +309,7 @@ def test_clickhouse_client_spans(
308309
"db.namespace": "",
309310
"db.user": "default",
310311
"sentry.op": "db",
312+
"db.query.text": "INSERT INTO test (x) VALUES",
311313
"sentry.origin": "auto.db.clickhouse_driver",
312314
"server.address": "localhost",
313315
"server.port": 9000,
@@ -323,6 +325,7 @@ def test_clickhouse_client_spans(
323325
"db.namespace": "",
324326
"db.user": "default",
325327
"sentry.op": "db",
328+
"db.query.text": "INSERT INTO test (x) VALUES",
326329
"sentry.origin": "auto.db.clickhouse_driver",
327330
"server.address": "localhost",
328331
"server.port": 9000,
@@ -338,6 +341,7 @@ def test_clickhouse_client_spans(
338341
"db.namespace": "",
339342
"db.user": "default",
340343
"sentry.op": "db",
344+
"db.query.text": "SELECT sum(x) FROM test WHERE x > 150",
341345
"sentry.origin": "auto.db.clickhouse_driver",
342346
"server.address": "localhost",
343347
"server.port": 9000,
@@ -563,6 +567,7 @@ def test_clickhouse_client_spans_with_pii(
563567
"db.system.name": "clickhouse",
564568
"db.namespace": "",
565569
"db.user": "default",
570+
"db.query.text": "DROP TABLE IF EXISTS test",
566571
"server.address": "localhost",
567572
"server.port": 9000,
568573
"thread.id": mock.ANY,
@@ -577,6 +582,7 @@ def test_clickhouse_client_spans_with_pii(
577582
"db.system.name": "clickhouse",
578583
"db.namespace": "",
579584
"db.user": "default",
585+
"db.query.text": "CREATE TABLE test (x Int32) ENGINE = Memory",
580586
"server.address": "localhost",
581587
"server.port": 9000,
582588
"thread.id": mock.ANY,
@@ -591,6 +597,7 @@ def test_clickhouse_client_spans_with_pii(
591597
"db.system.name": "clickhouse",
592598
"db.namespace": "",
593599
"db.user": "default",
600+
"db.query.text": "INSERT INTO test (x) VALUES",
594601
"server.address": "localhost",
595602
"server.port": 9000,
596603
"thread.id": mock.ANY,
@@ -605,6 +612,7 @@ def test_clickhouse_client_spans_with_pii(
605612
"db.system.name": "clickhouse",
606613
"db.namespace": "",
607614
"db.user": "default",
615+
"db.query.text": "INSERT INTO test (x) VALUES",
608616
"server.address": "localhost",
609617
"server.port": 9000,
610618
},
@@ -617,6 +625,7 @@ def test_clickhouse_client_spans_with_pii(
617625
"db.system.name": "clickhouse",
618626
"db.namespace": "",
619627
"db.user": "default",
628+
"db.query.text": "SELECT sum(x) FROM test WHERE x > 150",
620629
"server.address": "localhost",
621630
"server.port": 9000,
622631
},
@@ -1012,6 +1021,7 @@ def test_clickhouse_dbapi_spans(
10121021
"db.driver.name": "clickhouse-driver",
10131022
"db.namespace": "",
10141023
"db.user": "default",
1024+
"db.query.text": "DROP TABLE IF EXISTS test",
10151025
"sentry.op": "db",
10161026
"sentry.origin": "auto.db.clickhouse_driver",
10171027
"server.address": "localhost",
@@ -1027,6 +1037,7 @@ def test_clickhouse_dbapi_spans(
10271037
"db.driver.name": "clickhouse-driver",
10281038
"db.namespace": "",
10291039
"db.user": "default",
1040+
"db.query.text": "CREATE TABLE test (x Int32) ENGINE = Memory",
10301041
"sentry.op": "db",
10311042
"sentry.origin": "auto.db.clickhouse_driver",
10321043
"server.address": "localhost",
@@ -1042,6 +1053,7 @@ def test_clickhouse_dbapi_spans(
10421053
"db.driver.name": "clickhouse-driver",
10431054
"db.namespace": "",
10441055
"db.user": "default",
1056+
"db.query.text": "INSERT INTO test (x) VALUES",
10451057
"sentry.op": "db",
10461058
"sentry.origin": "auto.db.clickhouse_driver",
10471059
"server.address": "localhost",
@@ -1057,6 +1069,7 @@ def test_clickhouse_dbapi_spans(
10571069
"db.driver.name": "clickhouse-driver",
10581070
"db.namespace": "",
10591071
"db.user": "default",
1072+
"db.query.text": "INSERT INTO test (x) VALUES",
10601073
"sentry.op": "db",
10611074
"sentry.origin": "auto.db.clickhouse_driver",
10621075
"server.address": "localhost",
@@ -1072,6 +1085,7 @@ def test_clickhouse_dbapi_spans(
10721085
"db.driver.name": "clickhouse-driver",
10731086
"db.namespace": "",
10741087
"db.user": "default",
1088+
"db.query.text": "SELECT sum(x) FROM test WHERE x > 150",
10751089
"sentry.op": "db",
10761090
"sentry.origin": "auto.db.clickhouse_driver",
10771091
"server.address": "localhost",
@@ -1266,6 +1280,7 @@ def test_clickhouse_dbapi_spans_with_pii(
12661280
"db.system.name": "clickhouse",
12671281
"db.namespace": "",
12681282
"db.user": "default",
1283+
"db.query.text": "DROP TABLE IF EXISTS test",
12691284
"sentry.op": "db",
12701285
"sentry.origin": "auto.db.clickhouse_driver",
12711286
"server.address": "localhost",
@@ -1280,6 +1295,7 @@ def test_clickhouse_dbapi_spans_with_pii(
12801295
"db.system.name": "clickhouse",
12811296
"db.namespace": "",
12821297
"db.user": "default",
1298+
"db.query.text": "CREATE TABLE test (x Int32) ENGINE = Memory",
12831299
"sentry.op": "db",
12841300
"sentry.origin": "auto.db.clickhouse_driver",
12851301
"server.address": "localhost",
@@ -1294,6 +1310,7 @@ def test_clickhouse_dbapi_spans_with_pii(
12941310
"db.system.name": "clickhouse",
12951311
"db.namespace": "",
12961312
"db.user": "default",
1313+
"db.query.text": "INSERT INTO test (x) VALUES",
12971314
"sentry.op": "db",
12981315
"sentry.origin": "auto.db.clickhouse_driver",
12991316
"server.address": "localhost",
@@ -1308,6 +1325,7 @@ def test_clickhouse_dbapi_spans_with_pii(
13081325
"db.system.name": "clickhouse",
13091326
"db.namespace": "",
13101327
"db.user": "default",
1328+
"db.query.text": "INSERT INTO test (x) VALUES",
13111329
"sentry.op": "db",
13121330
"sentry.origin": "auto.db.clickhouse_driver",
13131331
"server.address": "localhost",
@@ -1322,6 +1340,7 @@ def test_clickhouse_dbapi_spans_with_pii(
13221340
"db.system.name": "clickhouse",
13231341
"db.namespace": "",
13241342
"db.user": "default",
1343+
"db.query.text": "SELECT sum(x) FROM test WHERE x > 150",
13251344
"sentry.op": "db",
13261345
"sentry.origin": "auto.db.clickhouse_driver",
13271346
"server.address": "localhost",

tests/integrations/pymongo/test_pymongo.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,9 @@ def test_segment_span_streaming(sentry_init, capture_items, mongo_server, with_p
162162
assert insert_success["attributes"]["db.collection.name"] == "test_collection"
163163
assert insert_fail["attributes"]["db.collection.name"] == "erroneous"
164164

165+
for span in find, insert_success, insert_fail:
166+
assert span["attributes"][SPANDATA.DB_QUERY_TEXT] == span["name"]
167+
165168
if with_pii:
166169
assert "1" in find["name"]
167170
assert "2" in insert_success["name"]
@@ -247,6 +250,7 @@ def test_breadcrumbs_span_streaming(sentry_init, capture_items, mongo_server, wi
247250
assert data["db.driver.name"] == "pymongo"
248251
assert data["db.operation.name"] == "find"
249252
assert data["db.collection.name"] == "test_collection"
253+
assert data["db.query.text"] == crumb["message"]
250254
assert data["sentry.op"] == "db"
251255
assert data["sentry.origin"] == "auto.db.pymongo"
252256
assert data[SPANDATA.SERVER_ADDRESS] == "localhost"

0 commit comments

Comments
 (0)