Skip to content

Commit 2959ff5

Browse files
committed
Fix to properly skip all tornado server telemetry when URL excluded.
1 parent 0d23c86 commit 2959ff5

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed

CHANGELOG.md

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

1616
- `opentelemetry-instrumentation-tornado` Fix server (request) duration metric calculation
1717
([#3679](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3679))
18+
- `opentelemetry-instrumentation-tornado` Fix to properly skip all server telemetry when URL excluded.
19+
([#3680](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3680))
1820

1921
## Version 1.36.0/0.57b0 (2025-07-29)
2022

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -403,13 +403,14 @@ def _wrap(cls, method_name, wrapper):
403403
def _prepare(
404404
tracer, server_histograms, request_hook, func, handler, args, kwargs
405405
):
406+
request = handler.request
406407
otel_handler_state = {
407-
_START_TIME: default_timer()
408+
_START_TIME: default_timer(),
409+
'exclude_request': _excluded_urls.url_disabled(request.uri),
408410
}
409411
setattr(handler, _HANDLER_STATE_KEY, otel_handler_state)
410412

411-
request = handler.request
412-
if _excluded_urls.url_disabled(request.uri):
413+
if otel_handler_state['exclude_request']:
413414
return func(*args, **kwargs)
414415

415416
_record_prepare_metrics(server_histograms, handler)
@@ -627,6 +628,8 @@ def _record_prepare_metrics(server_histograms, handler):
627628

628629
def _record_on_finish_metrics(server_histograms, handler, error=None):
629630
otel_handler_state = getattr(handler, _HANDLER_STATE_KEY, None) or {}
631+
if otel_handler_state.get('exclude_request'):
632+
return
630633
start_time = otel_handler_state.get(_START_TIME, None) or default_timer()
631634
elapsed_time = round(
632635
(default_timer() - start_time) * 1000

instrumentation/opentelemetry-instrumentation-tornado/tests/test_metrics_instrumentation.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,3 +177,16 @@ def test_metric_uninstrument(self):
177177
for point in list(metric.data.data_points):
178178
if isinstance(point, HistogramDataPoint):
179179
self.assertEqual(point.count, 1)
180+
181+
def test_exclude_lists(self):
182+
def test_excluded(path):
183+
self.fetch(path)
184+
185+
# Verify no server metrics written (only client ones should exist)
186+
metrics = self.get_sorted_metrics()
187+
for metric in metrics:
188+
self.assertTrue("http.server" not in metric.name, metric)
189+
self.assertEqual(len(metrics), 3, metrics)
190+
191+
test_excluded("/healthz")
192+
test_excluded("/ping")

0 commit comments

Comments
 (0)