Skip to content

Commit 047bf3d

Browse files
committed
Fix opentelemetry-instrumentation-tornado server (request) duration metric calculation (#3486)
1 parent 4a1e0ce commit 047bf3d

File tree

2 files changed

+10
-2
lines changed
  • instrumentation/opentelemetry-instrumentation-tornado/src/opentelemetry/instrumentation/tornado

2 files changed

+10
-2
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
3737
([#3447](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3447))
3838
- `opentelemetry-instrumentation-botocore` Capture server attributes for botocore API calls
3939
([#3448](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3448))
40+
- `opentelemetry-instrumentation-tornado` Fix server (request) duration metric calculation
41+
([#3486](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3486))
4042

4143

4244
## Version 1.32.0/0.53b0 (2025-04-10)

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ def client_response_hook(span, future):
199199

200200
_logger = getLogger(__name__)
201201
_TraceContext = namedtuple("TraceContext", ["activation", "span", "token"])
202+
_HANDLER_STATE_KEY = "_otel_state_key"
202203
_HANDLER_CONTEXT_KEY = "_otel_trace_context_key"
203204
_OTEL_PATCHED_KEY = "_otel_patched_key"
204205

@@ -379,7 +380,10 @@ def _wrap(cls, method_name, wrapper):
379380
def _prepare(
380381
tracer, server_histograms, request_hook, func, handler, args, kwargs
381382
):
382-
server_histograms[_START_TIME] = default_timer()
383+
otel_handler_state = {
384+
_START_TIME: default_timer()
385+
}
386+
setattr(handler, _HANDLER_STATE_KEY, otel_handler_state)
383387

384388
request = handler.request
385389
if _excluded_urls.url_disabled(request.uri):
@@ -593,8 +597,10 @@ def _record_prepare_metrics(server_histograms, handler):
593597

594598

595599
def _record_on_finish_metrics(server_histograms, handler, error=None):
600+
otel_handler_state = getattr(handler, _HANDLER_STATE_KEY, None) or {}
601+
start_time = otel_handler_state.get(_START_TIME, None) or default_timer()
596602
elapsed_time = round(
597-
(default_timer() - server_histograms[_START_TIME]) * 1000
603+
(default_timer() - start_time) * 1000
598604
)
599605

600606
response_size = int(handler._headers.get("Content-Length", 0))

0 commit comments

Comments
 (0)