mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-08-01 09:13:23 +08:00
Fix Tornado errors mapping to 500 (#1048)
This commit is contained in:
@ -8,7 +8,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
## [Unreleased](https://github.com/open-telemetry/opentelemetry-python/compare/v1.10.0-0.29b0...HEAD)
|
## [Unreleased](https://github.com/open-telemetry/opentelemetry-python/compare/v1.10.0-0.29b0...HEAD)
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
- `opentelemetry-instrumentation-tornado` Fix Tornado errors mapping to 500
|
||||||
|
([#1048])(https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1048)
|
||||||
- `opentelemetry-instrumentation-urllib` make span attributes available to sampler
|
- `opentelemetry-instrumentation-urllib` make span attributes available to sampler
|
||||||
([1014](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1014))
|
([1014](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1014))
|
||||||
- `opentelemetry-instrumentation-flask` Fix non-recording span bug
|
- `opentelemetry-instrumentation-flask` Fix non-recording span bug
|
||||||
|
@ -420,14 +420,15 @@ def _finish_span(tracer, handler, error=None):
|
|||||||
status_code = error.status_code
|
status_code = error.status_code
|
||||||
if not ctx and status_code == 404:
|
if not ctx and status_code == 404:
|
||||||
ctx = _start_span(tracer, handler, _time_ns())
|
ctx = _start_span(tracer, handler, _time_ns())
|
||||||
if status_code != 404:
|
else:
|
||||||
|
status_code = 500
|
||||||
|
reason = None
|
||||||
|
if status_code >= 500:
|
||||||
finish_args = (
|
finish_args = (
|
||||||
type(error),
|
type(error),
|
||||||
error,
|
error,
|
||||||
getattr(error, "__traceback__", None),
|
getattr(error, "__traceback__", None),
|
||||||
)
|
)
|
||||||
status_code = 500
|
|
||||||
reason = None
|
|
||||||
|
|
||||||
if not ctx:
|
if not ctx:
|
||||||
return
|
return
|
||||||
|
@ -317,6 +317,41 @@ class TestTornadoInstrumentation(TornadoTest, WsgiTestBase):
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_http_error(self):
|
||||||
|
response = self.fetch("/raise_403")
|
||||||
|
self.assertEqual(response.code, 403)
|
||||||
|
|
||||||
|
spans = self.sorted_spans(self.memory_exporter.get_finished_spans())
|
||||||
|
self.assertEqual(len(spans), 2)
|
||||||
|
server, client = spans
|
||||||
|
|
||||||
|
self.assertEqual(server.name, "RaiseHTTPErrorHandler.get")
|
||||||
|
self.assertEqual(server.kind, SpanKind.SERVER)
|
||||||
|
self.assertSpanHasAttributes(
|
||||||
|
server,
|
||||||
|
{
|
||||||
|
SpanAttributes.HTTP_METHOD: "GET",
|
||||||
|
SpanAttributes.HTTP_SCHEME: "http",
|
||||||
|
SpanAttributes.HTTP_HOST: "127.0.0.1:"
|
||||||
|
+ str(self.get_http_port()),
|
||||||
|
SpanAttributes.HTTP_TARGET: "/raise_403",
|
||||||
|
SpanAttributes.HTTP_CLIENT_IP: "127.0.0.1",
|
||||||
|
SpanAttributes.HTTP_STATUS_CODE: 403,
|
||||||
|
"tornado.handler": "tests.tornado_test_app.RaiseHTTPErrorHandler",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(client.name, "GET")
|
||||||
|
self.assertEqual(client.kind, SpanKind.CLIENT)
|
||||||
|
self.assertSpanHasAttributes(
|
||||||
|
client,
|
||||||
|
{
|
||||||
|
SpanAttributes.HTTP_URL: self.get_url("/raise_403"),
|
||||||
|
SpanAttributes.HTTP_METHOD: "GET",
|
||||||
|
SpanAttributes.HTTP_STATUS_CODE: 403,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
def test_dynamic_handler(self):
|
def test_dynamic_handler(self):
|
||||||
response = self.fetch("/dyna")
|
response = self.fetch("/dyna")
|
||||||
self.assertEqual(response.code, 404)
|
self.assertEqual(response.code, 404)
|
||||||
|
@ -105,6 +105,11 @@ class CustomResponseHeaderHandler(tornado.web.RequestHandler):
|
|||||||
self.set_status(200)
|
self.set_status(200)
|
||||||
|
|
||||||
|
|
||||||
|
class RaiseHTTPErrorHandler(tornado.web.RequestHandler):
|
||||||
|
def get(self):
|
||||||
|
raise tornado.web.HTTPError(403)
|
||||||
|
|
||||||
|
|
||||||
def make_app(tracer):
|
def make_app(tracer):
|
||||||
app = tornado.web.Application(
|
app = tornado.web.Application(
|
||||||
[
|
[
|
||||||
@ -116,6 +121,7 @@ def make_app(tracer):
|
|||||||
(r"/healthz", HealthCheckHandler),
|
(r"/healthz", HealthCheckHandler),
|
||||||
(r"/ping", HealthCheckHandler),
|
(r"/ping", HealthCheckHandler),
|
||||||
(r"/test_custom_response_headers", CustomResponseHeaderHandler),
|
(r"/test_custom_response_headers", CustomResponseHeaderHandler),
|
||||||
|
(r"/raise_403", RaiseHTTPErrorHandler),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
app.tracer = tracer
|
app.tracer = tracer
|
||||||
|
Reference in New Issue
Block a user