mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-07-29 05:04:05 +08:00
Fix Urllib instrumentation - Add status code to span if not None (#1430)
This commit is contained in:
@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
## Unreleased
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix bug in Urllib instrumentation - add status code to span attributes only if the status code is not None.
|
||||
([#1430](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1430))
|
||||
|
||||
## Version 1.14.0/0.35b0 (2022-11-03)
|
||||
|
||||
### Deprecated
|
||||
|
@ -206,7 +206,7 @@ def _instrument(
|
||||
code_ = result.getcode()
|
||||
labels[SpanAttributes.HTTP_STATUS_CODE] = str(code_)
|
||||
|
||||
if span.is_recording():
|
||||
if span.is_recording() and code_ is not None:
|
||||
span.set_attribute(SpanAttributes.HTTP_STATUS_CODE, code_)
|
||||
span.set_status(Status(http_status_to_status_code(code_)))
|
||||
|
||||
|
@ -16,6 +16,7 @@ import abc
|
||||
import socket
|
||||
import urllib
|
||||
from unittest import mock
|
||||
from unittest.mock import patch
|
||||
from urllib import request
|
||||
from urllib.error import HTTPError
|
||||
from urllib.request import OpenerDirector
|
||||
@ -150,6 +151,35 @@ class RequestsIntegrationTestBase(abc.ABC):
|
||||
trace.StatusCode.ERROR,
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def mock_get_code(*args, **kwargs):
|
||||
return None
|
||||
|
||||
@patch("http.client.HTTPResponse.getcode", new=mock_get_code)
|
||||
def test_response_code_none(self):
|
||||
|
||||
result = self.perform_request(self.URL)
|
||||
|
||||
self.assertEqual(result.read(), b"Hello!")
|
||||
span = self.assert_span()
|
||||
|
||||
self.assertIs(span.kind, trace.SpanKind.CLIENT)
|
||||
self.assertEqual(span.name, "HTTP GET")
|
||||
|
||||
self.assertEqual(
|
||||
span.attributes,
|
||||
{
|
||||
SpanAttributes.HTTP_METHOD: "GET",
|
||||
SpanAttributes.HTTP_URL: self.URL,
|
||||
},
|
||||
)
|
||||
|
||||
self.assertIs(span.status.status_code, trace.StatusCode.UNSET)
|
||||
|
||||
self.assertEqualSpanInstrumentationInfo(
|
||||
span, opentelemetry.instrumentation.urllib
|
||||
)
|
||||
|
||||
def test_uninstrument(self):
|
||||
URLLibInstrumentor().uninstrument()
|
||||
result = self.perform_request(self.URL)
|
||||
|
Reference in New Issue
Block a user