Skip to content

Commit 04168e2

Browse files
Fix Tornado errors mapping to 500
1 parent 40c1805 commit 04168e2

File tree

3 files changed

+44
-3
lines changed

3 files changed

+44
-3
lines changed

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -369,14 +369,15 @@ def _finish_span(tracer, handler, error=None):
369369
status_code = error.status_code
370370
if not ctx and status_code == 404:
371371
ctx = _start_span(tracer, handler, _time_ns())
372-
if status_code != 404:
372+
else:
373+
status_code = 500
374+
reason = None
375+
if status_code >= 500:
373376
finish_args = (
374377
type(error),
375378
error,
376379
getattr(error, "__traceback__", None),
377380
)
378-
status_code = 500
379-
reason = None
380381

381382
if not ctx:
382383
return

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

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,41 @@ def test_404(self):
317317
},
318318
)
319319

320+
def test_403(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, "Raise403Handler.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.Raise403Handler",
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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,10 @@ def get(self):
105105
self.set_status(200)
106106

107107

108+
class Raise403Handler(tornado.web.RequestHandler):
109+
def get(self):
110+
raise tornado.web.HTTPError(403)
111+
108112
def make_app(tracer):
109113
app = tornado.web.Application(
110114
[
@@ -116,6 +120,7 @@ def make_app(tracer):
116120
(r"/healthz", HealthCheckHandler),
117121
(r"/ping", HealthCheckHandler),
118122
(r"/test_custom_response_headers", CustomResponseHeaderHandler),
123+
(r"/raise_403", Raise403Handler),
119124
]
120125
)
121126
app.tracer = tracer

0 commit comments

Comments
 (0)