wsgi: always record span status code to have it available in metrics (#3148)

This commit is contained in:
GonzaloGuasch
2025-01-02 16:58:17 -03:00
committed by GitHub
parent e5eb524e89
commit 95f14cd8df
3 changed files with 15 additions and 4 deletions

View File

@ -23,6 +23,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
([#3133](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3133))
- `opentelemetry-instrumentation-falcon` add support version to v4
([#3086](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3086))
- `opentelemetry-instrumentation-wsgi` always record span status code to have it available in metrics
([#3148](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3148))
- add support to Python 3.13
([#3134](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3134))

View File

@ -480,11 +480,7 @@ def add_response_attributes(
"""Adds HTTP response attributes to span using the arguments
passed to a PEP3333-conforming start_response callable.
"""
if not span.is_recording():
return
status_code_str, _ = start_response_status.split(" ", 1)
status_code = 0
try:
status_code = int(status_code_str)
except ValueError:

View File

@ -779,6 +779,19 @@ class TestWsgiAttributes(unittest.TestCase):
self.span.set_attribute.assert_has_calls(expected, any_order=True)
self.span.set_attribute.assert_has_calls(expected_new, any_order=True)
def test_response_attributes_noop(self):
mock_span = mock.Mock()
mock_span.is_recording.return_value = False
attrs = {}
otel_wsgi.add_response_attributes(
mock_span, "404 Not Found", {}, duration_attrs=attrs
)
self.assertEqual(mock_span.set_attribute.call_count, 0)
self.assertEqual(mock_span.is_recording.call_count, 2)
self.assertEqual(attrs[SpanAttributes.HTTP_STATUS_CODE], 404)
def test_credential_removal(self):
self.environ["HTTP_HOST"] = "username:password@mock"
self.environ["PATH_INFO"] = "/status/200"