From 8592b4ff73e050dcf3ba53a5a75accf4a307a262 Mon Sep 17 00:00:00 2001 From: Tomasz Pytel Date: Thu, 19 Nov 2020 15:22:40 -0300 Subject: [PATCH 1/2] [Plugin] moved Method & Url tags before requests --- skywalking/plugins/sw_requests.py | 5 +++-- skywalking/plugins/sw_urllib3.py | 5 +++-- skywalking/plugins/sw_urllib_request.py | 12 ++++++++++-- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/skywalking/plugins/sw_requests.py b/skywalking/plugins/sw_requests.py index 8060d709..d53c2bf0 100644 --- a/skywalking/plugins/sw_requests.py +++ b/skywalking/plugins/sw_requests.py @@ -60,13 +60,14 @@ def _sw_request(this: Session, method, url, for item in carrier: headers[item.key] = item.val + span.tag(Tag(key=tags.HttpMethod, val=method.upper())) + span.tag(Tag(key=tags.HttpUrl, val=url)) + res = _request(this, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json) - span.tag(Tag(key=tags.HttpMethod, val=method.upper())) - span.tag(Tag(key=tags.HttpUrl, val=url)) span.tag(Tag(key=tags.HttpStatus, val=res.status_code)) if res.status_code >= 400: span.error_occurred = True diff --git a/skywalking/plugins/sw_urllib3.py b/skywalking/plugins/sw_urllib3.py index 285c973f..f0ae749d 100644 --- a/skywalking/plugins/sw_urllib3.py +++ b/skywalking/plugins/sw_urllib3.py @@ -49,10 +49,11 @@ def _sw_request(this: RequestMethods, method, url, fields=None, headers=None, ** for item in carrier: headers[item.key] = item.val - res = _request(this, method, url, fields=fields, headers=headers, **urlopen_kw) - span.tag(Tag(key=tags.HttpMethod, val=method.upper())) span.tag(Tag(key=tags.HttpUrl, val=url)) + + res = _request(this, method, url, fields=fields, headers=headers, **urlopen_kw) + span.tag(Tag(key=tags.HttpStatus, val=res.status)) if res.status >= 400: span.error_occurred = True diff --git a/skywalking/plugins/sw_urllib_request.py b/skywalking/plugins/sw_urllib_request.py index 5afa5e8c..c2849d3a 100644 --- a/skywalking/plugins/sw_urllib_request.py +++ b/skywalking/plugins/sw_urllib_request.py @@ -29,6 +29,7 @@ def install(): from urllib.request import OpenerDirector + from urllib.error import HTTPError _open = OpenerDirector.open @@ -38,15 +39,22 @@ def _sw_open(this: OpenerDirector, fullurl, data, timeout): context = get_context() carrier = Carrier() - with context.new_exit_span(op=fullurl.selector or '/', peer=fullurl.host, carrier=carrier) as span: + url = fullurl.selector.split("?")[0] if fullurl.selector else '/' + with context.new_exit_span(op=url, peer=fullurl.host, carrier=carrier) as span: span.layer = Layer.Http span.component = Component.General [fullurl.add_header(item.key, item.val) for item in carrier] - res = _open(this, fullurl, data, timeout) span.tag(Tag(key=tags.HttpMethod, val=fullurl.get_method())) span.tag(Tag(key=tags.HttpUrl, val=fullurl.full_url)) + + try: + res = _open(this, fullurl, data, timeout) + except HTTPError as e: + span.tag(Tag(key=tags.HttpStatus, val=e.code)) + raise + span.tag(Tag(key=tags.HttpStatus, val=res.code)) if res.code >= 400: span.error_occurred = True From f29aadfe3e3cea7feb118959ed485b9ebb05c7c6 Mon Sep 17 00:00:00 2001 From: Tomasz Pytel Date: Fri, 20 Nov 2020 10:10:05 -0300 Subject: [PATCH 2/2] set tags after _open() --- skywalking/plugins/sw_urllib_request.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/skywalking/plugins/sw_urllib_request.py b/skywalking/plugins/sw_urllib_request.py index c2849d3a..5baad82f 100644 --- a/skywalking/plugins/sw_urllib_request.py +++ b/skywalking/plugins/sw_urllib_request.py @@ -46,14 +46,14 @@ def _sw_open(this: OpenerDirector, fullurl, data, timeout): [fullurl.add_header(item.key, item.val) for item in carrier] - span.tag(Tag(key=tags.HttpMethod, val=fullurl.get_method())) - span.tag(Tag(key=tags.HttpUrl, val=fullurl.full_url)) - try: res = _open(this, fullurl, data, timeout) except HTTPError as e: span.tag(Tag(key=tags.HttpStatus, val=e.code)) raise + finally: # we do this here because it may change in _open() + span.tag(Tag(key=tags.HttpMethod, val=fullurl.get_method())) + span.tag(Tag(key=tags.HttpUrl, val=fullurl.full_url)) span.tag(Tag(key=tags.HttpStatus, val=res.code)) if res.code >= 400: