Skip to content

Commit b1c2c79

Browse files
CarlosRCDevxrmx
andauthored
fix excluded_urls in instrumentation-asgi (#3567)
* fix excluded_urls in instrumentation-asgi * fix ExcludeList or str * chhangelog --------- Co-authored-by: Riccardo Magliocchetti <[email protected]>
1 parent b69ebb7 commit b1c2c79

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1313

1414
### Fixed
1515

16+
- `opentelemetry-instrumentation-asgi`: fix excluded_urls in instrumentation-asgi
17+
([#3567](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3567))
1618
- `opentelemetry-resource-detector-containerid`: make it more quiet on platforms without cgroups
1719
([#3579](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3579))
1820

instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/__init__.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,11 +273,13 @@ def client_response_hook(span: Span, scope: Scope, message: dict[str, Any]):
273273
OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS,
274274
OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST,
275275
OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE,
276+
ExcludeList,
276277
SanitizeValue,
277278
_parse_url_query,
278279
get_custom_headers,
279280
normalise_request_header_name,
280281
normalise_response_header_name,
282+
parse_excluded_urls,
281283
redact_url,
282284
sanitize_method,
283285
)
@@ -556,7 +558,7 @@ class OpenTelemetryMiddleware:
556558
def __init__(
557559
self,
558560
app,
559-
excluded_urls=None,
561+
excluded_urls: ExcludeList | str | None = None,
560562
default_span_details=None,
561563
server_request_hook: ServerRequestHook = None,
562564
client_request_hook: ClientRequestHook = None,
@@ -638,6 +640,8 @@ def __init__(
638640
self.active_requests_counter = create_http_server_active_requests(
639641
self.meter
640642
)
643+
if isinstance(excluded_urls, str):
644+
excluded_urls = parse_excluded_urls(excluded_urls)
641645
self.excluded_urls = excluded_urls
642646
self.default_span_details = (
643647
default_span_details or get_default_span_details

instrumentation/opentelemetry-instrumentation-asgi/tests/test_asgi_middleware.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1633,6 +1633,29 @@ async def test_no_metric_for_websockets(self):
16331633
await self.get_all_output()
16341634
self.assertIsNone(self.memory_metrics_reader.get_metrics_data())
16351635

1636+
async def test_excluded_urls(self):
1637+
self.scope["path"] = "/test_excluded_urls"
1638+
app = otel_asgi.OpenTelemetryMiddleware(
1639+
simple_asgi, excluded_urls="test_excluded_urls"
1640+
)
1641+
self.seed_app(app)
1642+
await self.send_default_request()
1643+
await self.get_all_output()
1644+
spans = self.memory_exporter.get_finished_spans()
1645+
self.assertEqual(len(spans), 0)
1646+
1647+
async def test_no_excluded_urls(self):
1648+
self.scope["path"] = "/test_excluded_urls"
1649+
app = otel_asgi.OpenTelemetryMiddleware(
1650+
simple_asgi, excluded_urls="test_excluded_urls"
1651+
)
1652+
self.seed_app(app)
1653+
self.scope["path"] = "/test_no_excluded_urls"
1654+
await self.send_default_request()
1655+
await self.get_all_output()
1656+
spans = self.memory_exporter.get_finished_spans()
1657+
self.assertGreater(len(spans), 0)
1658+
16361659

16371660
class TestAsgiAttributes(unittest.TestCase):
16381661
def setUp(self):

0 commit comments

Comments
 (0)