diff --git a/pubnub/request_handlers/async_aiohttp.py b/pubnub/request_handlers/async_aiohttp.py index a67605c2..e727e323 100644 --- a/pubnub/request_handlers/async_aiohttp.py +++ b/pubnub/request_handlers/async_aiohttp.py @@ -141,7 +141,8 @@ async def async_request(self, options_func, cancellation_event): uuid=uuid, auth_key=auth_key, client_request=None, - client_response=response + client_response=response, + http_version=f"HTTP/{response.version.major}.{response.version.minor}" if response.version else None ) # if body is not None and len(body) > 0 and not options.non_json_response: @@ -173,6 +174,10 @@ async def async_request(self, options_func, cancellation_event): data = "N/A" logger.debug(data) + logger.debug( + "PubNub request completed: operation=%s protocol=%s" + % (options.operation_type, response_info.http_version) + ) if response.status not in (200, 307, 204): diff --git a/pubnub/request_handlers/async_httpx.py b/pubnub/request_handlers/async_httpx.py index 002d6df1..fc23d65f 100644 --- a/pubnub/request_handlers/async_httpx.py +++ b/pubnub/request_handlers/async_httpx.py @@ -193,7 +193,8 @@ async def async_request(self, options_func, cancellation_event): uuid=uuid, auth_key=auth_key, client_request=None, - client_response=response + client_response=response, + http_version=response.http_version ) # if body is not None and len(body) > 0 and not options.non_json_response: @@ -225,6 +226,10 @@ async def async_request(self, options_func, cancellation_event): data = "N/A" logger.debug(data) + logger.debug( + "PubNub request completed: operation=%s protocol=%s" + % (options.operation_type, response_info.http_version) + ) if response.status_code not in (200, 307, 204): diff --git a/pubnub/request_handlers/httpx.py b/pubnub/request_handlers/httpx.py index d22e0ee2..01db83f0 100644 --- a/pubnub/request_handlers/httpx.py +++ b/pubnub/request_handlers/httpx.py @@ -318,7 +318,8 @@ def _build_envelope(self, p_options, e_options): origin=res.url.host, uuid=uuid, auth_key=auth_key, - client_request=res.request + client_request=res.request, + http_version=res.http_version ) if res.status_code not in [200, 204, 307]: @@ -433,6 +434,11 @@ def _invoke_request(self, p_options, e_options, base_origin): try: res = session.request(**args) + logger.debug( + "PubNub request completed: operation=%s protocol=%s" + % (e_options.operation_type, res.http_version) + ) + # Safely access response text - read content first for streaming responses try: logger.debug("GOT %s" % res.text) diff --git a/pubnub/request_handlers/requests.py b/pubnub/request_handlers/requests.py index 14de1448..19df14b9 100644 --- a/pubnub/request_handlers/requests.py +++ b/pubnub/request_handlers/requests.py @@ -174,7 +174,11 @@ def _build_envelope(self, p_options, e_options): origin=url.hostname, uuid=uuid, auth_key=auth_key, - client_request=res.request + client_request=res.request, + http_version=( + f"HTTP/{res.raw.version // 10}.{res.raw.version % 10}" + if res.raw and res.raw.version else None + ) ) if not res.ok: @@ -269,6 +273,16 @@ def _invoke_request(self, p_options, e_options, base_origin): try: res = self.session.request(**args) logger.debug("GOT %s" % res.text) + + http_ver = ( + f"HTTP/{res.raw.version // 10}.{res.raw.version % 10}" + if res.raw and res.raw.version else "unknown" + ) + logger.debug( + "PubNub request completed: operation=%s protocol=%s" + % (e_options.operation_type, http_ver) + ) + except requests.exceptions.ConnectionError as e: raise PubNubException( pn_error=PNERR_CONNECTION_ERROR, diff --git a/pubnub/structures.py b/pubnub/structures.py index a7ca2bb9..af7575c3 100644 --- a/pubnub/structures.py +++ b/pubnub/structures.py @@ -80,7 +80,8 @@ def __init__(self, headers, pn_config): class ResponseInfo(object): - def __init__(self, status_code, tls_enabled, origin, uuid, auth_key, client_request, client_response=None): + def __init__(self, status_code, tls_enabled, origin, uuid, auth_key, client_request, + client_response=None, http_version=None): self.status_code = status_code self.tls_enabled = tls_enabled self.origin = origin @@ -88,6 +89,7 @@ def __init__(self, status_code, tls_enabled, origin, uuid, auth_key, client_requ self.auth_key = auth_key self.client_request = client_request self.client_response = client_response + self.http_version = http_version class Envelope(object):