Skip to content

Commit dda055b

Browse files
committed
Add logging to web
1 parent 45c8d8c commit dda055b

File tree

5 files changed

+60
-4
lines changed

5 files changed

+60
-4
lines changed

livechat/agent/web/client.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import httpx
1010

1111
from livechat.utils.helpers import prepare_payload
12+
from livechat.utils.httpx_logger import HttpxLogger
1213

1314

1415
# pylint: disable=R0903
@@ -50,9 +51,14 @@ class AgentWebInterface(metaclass=ABCMeta):
5051
''' Main class containing API methods. '''
5152
def __init__(self, access_token: str, version: str, base_url: str,
5253
http2: bool) -> AgentWebInterface:
54+
logger = HttpxLogger()
5355
self.api_url = f'https://{base_url}/v{version}/agent/action'
5456
self.session = httpx.Client(http2=http2,
55-
headers={'Authorization': access_token})
57+
headers={'Authorization': access_token},
58+
event_hooks={
59+
'request': [logger.log_request],
60+
'response': [logger.log_response]
61+
})
5662

5763
def modify_header(self, header: dict) -> None:
5864
''' Modifies provided header in session object.

livechat/configuration/client.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import httpx
99

1010
from livechat.utils.helpers import prepare_payload
11+
from livechat.utils.httpx_logger import HttpxLogger
1112

1213

1314
class ConfigurationApi:
@@ -47,9 +48,14 @@ class ConfigurationApiInterface(metaclass=ABCMeta):
4748
''' Interface class. '''
4849
def __init__(self, token: str, version: str, base_url: str,
4950
http2: bool) -> ConfigurationApiInterface:
51+
logger = HttpxLogger()
5052
self.api_url = f'https://{base_url}/v{version}/configuration/action'
5153
self.session = httpx.Client(http2=http2,
52-
headers={'Authorization': token})
54+
headers={'Authorization': token},
55+
event_hooks={
56+
'request': [logger.log_request],
57+
'response': [logger.log_response]
58+
})
5359

5460
def modify_header(self, header: dict) -> None:
5561
''' Modifies provided header in session object.

livechat/customer/web/client.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import httpx
1010

1111
from livechat.utils.helpers import prepare_payload
12+
from livechat.utils.httpx_logger import HttpxLogger
1213

1314

1415
# pylint: disable=R0903
@@ -67,10 +68,16 @@ class CustomerWebInterface(metaclass=ABCMeta):
6768
''' Main class containing API methods. '''
6869
def __init__(self, access_token: str, version: str, base_url: str,
6970
http2: bool) -> CustomerWebInterface:
71+
logger = HttpxLogger()
7072
self.api_url = f'https://{base_url}/v{version}/customer/action'
7173
if all([access_token, isinstance(access_token, str)]):
7274
self.session = httpx.Client(
73-
http2=http2, headers={'Authorization': access_token})
75+
http2=http2,
76+
headers={'Authorization': access_token},
77+
event_hooks={
78+
'request': [logger.log_request],
79+
'response': [logger.log_response]
80+
})
7481
else:
7582
raise ValueError(
7683
'Incorrect or missing `access_token` argument (should be of type str.)'

livechat/reports/client.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import httpx
1010

1111
from livechat.utils.helpers import prepare_payload
12+
from livechat.utils.httpx_logger import HttpxLogger
1213

1314

1415
class ReportsApi:
@@ -48,9 +49,14 @@ class ReportsApiInterface(metaclass=ABCMeta):
4849
''' Interface class. '''
4950
def __init__(self, token: str, version: str, base_url: str,
5051
http2: bool) -> ReportsApiInterface:
52+
logger = HttpxLogger()
5153
self.api_url = f'https://{base_url}/v{version}/reports'
5254
self.session = httpx.Client(http2=http2,
53-
headers={'Authorization': token})
55+
headers={'Authorization': token},
56+
event_hooks={
57+
'request': [logger.log_request],
58+
'response': [logger.log_response]
59+
})
5460

5561
def modify_header(self, header: dict) -> None:
5662
''' Modifies provided header in session object.

livechat/utils/httpx_logger.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
'''
2+
Logger for httpx requests.
3+
'''
4+
5+
import json
6+
import logging
7+
from datetime import datetime
8+
9+
10+
class HttpxLogger:
11+
''' Logger for httpx requests. '''
12+
def __init__(self):
13+
logging.basicConfig()
14+
self.logger = logging.getLogger()
15+
self.logger.setLevel(logging.INFO)
16+
17+
def log_request(self, request):
18+
''' Log request details. '''
19+
request_send_time = datetime.now().strftime('%Y-%m-%d, %H:%M:%S.%f')
20+
self.logger.info(
21+
f'\nREQUEST:\n {request.method} {request.url}\n SEND TIME: {request_send_time}\n PARAMS:\n {request.content.decode("utf-8")}'
22+
)
23+
self.logger.debug(f'\nHEADERS:\n {dict(request.headers.items())}')
24+
25+
def log_response(self, response):
26+
''' Log repsonse details. '''
27+
request = response.request
28+
response.read()
29+
self.logger.info(
30+
f'\nRESPONSE:\n {request.method} {request.url} - Status {response.status_code}\n Duration: {response.elapsed.total_seconds()} s \n {json.dumps(response.json(), indent=4)}'
31+
)

0 commit comments

Comments
 (0)