Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[httplib, requests] Sanitize urls in span metadata #688

Merged
merged 9 commits into from Nov 6, 2018
2 changes: 1 addition & 1 deletion ddtrace/compat.py
@@ -1,5 +1,5 @@
import sys
import platform
import sys

PYTHON_VERSION_INFO = sys.version_info
PY2 = sys.version_info[0] == 2
Expand Down
8 changes: 6 additions & 2 deletions ddtrace/contrib/httplib/patch.py
Expand Up @@ -5,12 +5,11 @@
import wrapt

# Project
from ...compat import httplib, PY2
from ...compat import PY2, httplib, parse
from ...ext import http as ext_http
from ...pin import Pin
from ...utils.wrappers import unwrap as _u


span_name = 'httplib.request' if PY2 else 'http.client.request'

log = logging.getLogger(__name__)
Expand Down Expand Up @@ -60,9 +59,14 @@ def _wrap_putrequest(func, instance, args, kwargs):
method, path = args[:2]
scheme = 'https' if isinstance(instance, httplib.HTTPSConnection) else 'http'
port = ':{port}'.format(port=instance.port)

# strip path of non-path data
path = parse.urlparse(path).path

if (scheme == 'http' and instance.port == 80) or (scheme == 'https' and instance.port == 443):
port = ''
url = '{scheme}://{host}{port}{path}'.format(scheme=scheme, host=instance.host, port=port, path=path)
majorgreys marked this conversation as resolved.
Show resolved Hide resolved

span.set_tag(ext_http.URL, url)
span.set_tag(ext_http.METHOD, method)
except Exception:
Expand Down
7 changes: 3 additions & 4 deletions tests/contrib/httplib/test_httplib.py
Expand Up @@ -7,16 +7,15 @@
import wrapt

# Project
from ddtrace.compat import httplib, PY2
from ddtrace.compat import PY2, httplib
from ddtrace.contrib.httplib import patch, unpatch
from ddtrace.contrib.httplib.patch import should_skip_request
from ddtrace.pin import Pin

from tests.opentracer.utils import init_tracer

from ...test_tracer import get_dummy_tracer
from ...util import assert_dict_issuperset, override_global_tracer


if PY2:
from urllib2 import urlopen, build_opener, Request
else:
Expand Down Expand Up @@ -242,7 +241,7 @@ def test_httplib_request_get_request_query_string(self):
{
'http.method': 'GET',
'http.status_code': '200',
'http.url': '{}?key=value&key2=value2'.format(URL_200),
'http.url': '{}'.format(URL_200),
brettlangdon marked this conversation as resolved.
Show resolved Hide resolved
}
)

Expand Down