mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-07-30 21:56:07 +08:00
Remove URL credentials (httpx integration) (#2020)
* Remove URL credentials (httpx) * Add CHANGELOG
This commit is contained in:
@ -22,6 +22,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
- `opentelemetry-instrumentation-httpx` Remove URL credentials
|
||||||
|
([#2020](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/2020))
|
||||||
- `opentelemetry-instrumentation-urllib`/`opentelemetry-instrumentation-urllib3` Fix metric descriptions to match semantic conventions
|
- `opentelemetry-instrumentation-urllib`/`opentelemetry-instrumentation-urllib3` Fix metric descriptions to match semantic conventions
|
||||||
([#1959](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1959))
|
([#1959](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1959))
|
||||||
|
|
||||||
|
@ -28,6 +28,7 @@ dependencies = [
|
|||||||
"opentelemetry-api ~= 1.12",
|
"opentelemetry-api ~= 1.12",
|
||||||
"opentelemetry-instrumentation == 0.44b0.dev",
|
"opentelemetry-instrumentation == 0.44b0.dev",
|
||||||
"opentelemetry-semantic-conventions == 0.44b0.dev",
|
"opentelemetry-semantic-conventions == 0.44b0.dev",
|
||||||
|
"opentelemetry-util-http == 0.44b0.dev",
|
||||||
]
|
]
|
||||||
|
|
||||||
[project.optional-dependencies]
|
[project.optional-dependencies]
|
||||||
|
@ -206,6 +206,7 @@ from opentelemetry.semconv.trace import SpanAttributes
|
|||||||
from opentelemetry.trace import SpanKind, TracerProvider, get_tracer
|
from opentelemetry.trace import SpanKind, TracerProvider, get_tracer
|
||||||
from opentelemetry.trace.span import Span
|
from opentelemetry.trace.span import Span
|
||||||
from opentelemetry.trace.status import Status
|
from opentelemetry.trace.status import Status
|
||||||
|
from opentelemetry.util.http import remove_url_credentials
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -269,7 +270,7 @@ def _extract_parameters(args, kwargs):
|
|||||||
# In httpx >= 0.20.0, handle_request receives a Request object
|
# In httpx >= 0.20.0, handle_request receives a Request object
|
||||||
request: httpx.Request = args[0]
|
request: httpx.Request = args[0]
|
||||||
method = request.method.encode()
|
method = request.method.encode()
|
||||||
url = request.url
|
url = remove_url_credentials(str(request.url))
|
||||||
headers = request.headers
|
headers = request.headers
|
||||||
stream = request.stream
|
stream = request.stream
|
||||||
extensions = request.extensions
|
extensions = request.extensions
|
||||||
|
@ -604,6 +604,13 @@ class TestSyncIntegration(BaseTestCases.BaseManualTest):
|
|||||||
return self.client.request(method, url, headers=headers)
|
return self.client.request(method, url, headers=headers)
|
||||||
return client.request(method, url, headers=headers)
|
return client.request(method, url, headers=headers)
|
||||||
|
|
||||||
|
def test_credential_removal(self):
|
||||||
|
new_url = "http://username:password@mock/status/200"
|
||||||
|
self.perform_request(new_url)
|
||||||
|
span = self.assert_span()
|
||||||
|
|
||||||
|
self.assertEqual(span.attributes[SpanAttributes.HTTP_URL], self.URL)
|
||||||
|
|
||||||
|
|
||||||
class TestAsyncIntegration(BaseTestCases.BaseManualTest):
|
class TestAsyncIntegration(BaseTestCases.BaseManualTest):
|
||||||
response_hook = staticmethod(_async_response_hook)
|
response_hook = staticmethod(_async_response_hook)
|
||||||
@ -664,6 +671,13 @@ class TestAsyncIntegration(BaseTestCases.BaseManualTest):
|
|||||||
)
|
)
|
||||||
self.assert_span(num_spans=2)
|
self.assert_span(num_spans=2)
|
||||||
|
|
||||||
|
def test_credential_removal(self):
|
||||||
|
new_url = "http://username:password@mock/status/200"
|
||||||
|
self.perform_request(new_url)
|
||||||
|
span = self.assert_span()
|
||||||
|
|
||||||
|
self.assertEqual(span.attributes[SpanAttributes.HTTP_URL], self.URL)
|
||||||
|
|
||||||
|
|
||||||
class TestSyncInstrumentationIntegration(BaseTestCases.BaseInstrumentorTest):
|
class TestSyncInstrumentationIntegration(BaseTestCases.BaseInstrumentorTest):
|
||||||
def create_client(
|
def create_client(
|
||||||
|
2
tox.ini
2
tox.ini
@ -386,7 +386,7 @@ commands_pre =
|
|||||||
|
|
||||||
grpc: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-grpc[test]
|
grpc: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-grpc[test]
|
||||||
|
|
||||||
falcon{1,2,3},flask{213,220},django{1,2,3,4},pyramid,tornado,starlette,fastapi,aiohttp,asgi,requests,urllib,urllib3v{1,2},wsgi: pip install {toxinidir}/util/opentelemetry-util-http[test]
|
falcon{1,2,3},flask{213,220},django{1,2,3,4},pyramid,tornado,starlette,fastapi,aiohttp,asgi,httpx{18,21},requests,urllib,urllib3v{1,2},wsgi: pip install {toxinidir}/util/opentelemetry-util-http[test]
|
||||||
wsgi,falcon{1,2,3},flask{213,220},django{1,2,3,4},pyramid: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-wsgi[test]
|
wsgi,falcon{1,2,3},flask{213,220},django{1,2,3,4},pyramid: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-wsgi[test]
|
||||||
asgi,django{3,4},starlette,fastapi: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-asgi[test]
|
asgi,django{3,4},starlette,fastapi: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-asgi[test]
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user