Skip to content

Commit fa689eb

Browse files
Stop recording spans for internal web requests to Sentry (#2297)
* Stop logging spans for internal requests to Sentry * Add tests for client is_sentry_url * Fixed mypy errors * Fixed test failures * Test parameter cleanup
1 parent 6d925c6 commit fa689eb

File tree

7 files changed

+52
-10
lines changed

7 files changed

+52
-10
lines changed

sentry_sdk/client.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -581,6 +581,17 @@ def capture_event(
581581

582582
return event_id
583583

584+
def is_sentry_url(self, url):
585+
# type: (str) -> bool
586+
"""
587+
Determines whether the given URL matches the Sentry DSN.
588+
"""
589+
return (
590+
self.transport is not None
591+
and self.transport.parsed_dsn is not None
592+
and self.transport.parsed_dsn.netloc in url
593+
)
594+
584595
def capture_session(
585596
self, session # type: Session
586597
):

sentry_sdk/hub.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -837,6 +837,10 @@ def trace_propagation_meta(self, span=None):
837837

838838
return meta
839839

840+
def is_sentry_url(self, url):
841+
# type: (str) -> bool
842+
return self.client is not None and self.client.is_sentry_url(url)
843+
840844

841845
GLOBAL_HUB = Hub()
842846
_local.set(GLOBAL_HUB)

sentry_sdk/integrations/stdlib.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,14 @@ def _install_httplib():
6969
def putrequest(self, method, url, *args, **kwargs):
7070
# type: (HTTPConnection, str, str, *Any, **Any) -> Any
7171
hub = Hub.current
72-
if hub.get_integration(StdlibIntegration) is None:
73-
return real_putrequest(self, method, url, *args, **kwargs)
7472

7573
host = self.host
7674
port = self.port
7775
default_port = self.default_port
7876

77+
if hub.get_integration(StdlibIntegration) is None or hub.is_sentry_url(host):
78+
return real_putrequest(self, method, url, *args, **kwargs)
79+
7980
real_url = url
8081
if real_url is None or not real_url.startswith(("http://", "https://")):
8182
real_url = "%s://%s%s%s" % (

sentry_sdk/tracing_utils.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -377,13 +377,7 @@ def should_propagate_trace(hub, url):
377377
client = hub.client # type: Any
378378
trace_propagation_targets = client.options["trace_propagation_targets"]
379379

380-
if client.transport and client.transport.parsed_dsn:
381-
dsn_url = client.transport.parsed_dsn.netloc
382-
else:
383-
dsn_url = None
384-
385-
is_request_to_sentry = dsn_url and dsn_url in url
386-
if is_request_to_sentry:
380+
if hub.is_sentry_url(url):
387381
return False
388382

389383
return match_regex_list(url, trace_propagation_targets, substring_matching=True)

tests/integrations/stdlib/test_httplib.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def before_breadcrumb(crumb, hint):
8484
}
8585

8686

87-
def test_empty_realurl(sentry_init, capture_events):
87+
def test_empty_realurl(sentry_init):
8888
"""
8989
Ensure that after using sentry_sdk.init you can putrequest a
9090
None url.

tests/test_client.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1136,3 +1136,31 @@ def test_max_value_length_option(
11361136
capture_message("a" * 2000)
11371137

11381138
assert len(events[0]["message"]) == expected_data_length
1139+
1140+
1141+
def test_is_sentry_url_true():
1142+
client = Client(dsn="https://[email protected]/123456789")
1143+
test_url = "abcd1234.ingest.sentry.io"
1144+
1145+
is_sentry_url = client.is_sentry_url(test_url)
1146+
1147+
assert is_sentry_url
1148+
1149+
1150+
def test_is_sentry_url_false():
1151+
client = Client(dsn="https://[email protected]/123456789")
1152+
test_url = "abcd1234.mywebsite.com"
1153+
1154+
is_sentry_url = client.is_sentry_url(test_url)
1155+
1156+
assert not is_sentry_url
1157+
1158+
1159+
def test_is_sentry_url_no_transport():
1160+
client = Client()
1161+
client.transport = None
1162+
test_url = "abcd1234.mywebsite.com"
1163+
1164+
is_sentry_url = client.is_sentry_url(test_url)
1165+
1166+
assert not is_sentry_url

tests/tracing/test_misc.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,10 @@ def test_should_propagate_trace(
305305
):
306306
hub = MagicMock()
307307
hub.client = MagicMock()
308+
309+
# This test assumes the urls are not Sentry URLs. Use test_should_propogate_trace_to_sentry for sentry URLs.
310+
hub.is_sentry_url = lambda _: False
311+
308312
hub.client.options = {"trace_propagation_targets": trace_propagation_targets}
309313
hub.client.transport = MagicMock()
310314
hub.client.transport.parsed_dsn = Dsn("https://[email protected]/12312012")

0 commit comments

Comments
 (0)