Skip to content

Commit 3462cb7

Browse files
Fix Tornado errors mapping to 500
1 parent e9f83e1 commit 3462cb7

File tree

3 files changed

+45
-3
lines changed

3 files changed

+45
-3
lines changed

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

+4-3
Original file line numberDiff line numberDiff line change
@@ -420,14 +420,15 @@ def _finish_span(tracer, handler, error=None):
420420
status_code = error.status_code
421421
if not ctx and status_code == 404:
422422
ctx = _start_span(tracer, handler, _time_ns())
423-
if status_code != 404:
423+
else:
424+
status_code = 500
425+
reason = None
426+
if status_code >= 500:
424427
finish_args = (
425428
type(error),
426429
error,
427430
getattr(error, "__traceback__", None),
428431
)
429-
status_code = 500
430-
reason = None
431432

432433
if not ctx:
433434
return

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

+35
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,41 @@ def test_404(self):
317317
},
318318
)
319319

320+
def test_http_error(self):
321+
response = self.fetch("/raise_403")
322+
self.assertEqual(response.code, 403)
323+
324+
spans = self.sorted_spans(self.memory_exporter.get_finished_spans())
325+
self.assertEqual(len(spans), 2)
326+
server, client = spans
327+
328+
self.assertEqual(server.name, "RaiseHTTPErrorHandler.get")
329+
self.assertEqual(server.kind, SpanKind.SERVER)
330+
self.assertSpanHasAttributes(
331+
server,
332+
{
333+
SpanAttributes.HTTP_METHOD: "GET",
334+
SpanAttributes.HTTP_SCHEME: "http",
335+
SpanAttributes.HTTP_HOST: "127.0.0.1:"
336+
+ str(self.get_http_port()),
337+
SpanAttributes.HTTP_TARGET: "/raise_403",
338+
SpanAttributes.HTTP_CLIENT_IP: "127.0.0.1",
339+
SpanAttributes.HTTP_STATUS_CODE: 403,
340+
"tornado.handler": "tests.tornado_test_app.RaiseHTTPErrorHandler",
341+
},
342+
)
343+
344+
self.assertEqual(client.name, "GET")
345+
self.assertEqual(client.kind, SpanKind.CLIENT)
346+
self.assertSpanHasAttributes(
347+
client,
348+
{
349+
SpanAttributes.HTTP_URL: self.get_url("/raise_403"),
350+
SpanAttributes.HTTP_METHOD: "GET",
351+
SpanAttributes.HTTP_STATUS_CODE: 403,
352+
},
353+
)
354+
320355
def test_dynamic_handler(self):
321356
response = self.fetch("/dyna")
322357
self.assertEqual(response.code, 404)

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

+6
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ def get(self):
105105
self.set_status(200)
106106

107107

108+
class RaiseHTTPErrorHandler(tornado.web.RequestHandler):
109+
def get(self):
110+
raise tornado.web.HTTPError(403)
111+
112+
108113
def make_app(tracer):
109114
app = tornado.web.Application(
110115
[
@@ -116,6 +121,7 @@ def make_app(tracer):
116121
(r"/healthz", HealthCheckHandler),
117122
(r"/ping", HealthCheckHandler),
118123
(r"/test_custom_response_headers", CustomResponseHeaderHandler),
124+
(r"/raise_403", RaiseHTTPErrorHandler),
119125
]
120126
)
121127
app.tracer = tracer

0 commit comments

Comments
 (0)