feat: log client/server IP and port

This commit is contained in:
debugtalk
2020-06-17 21:20:45 +08:00
parent d0e4df6b07
commit a99d5b9e01
4 changed files with 35 additions and 8 deletions

View File

@@ -2,6 +2,10 @@
## 3.0.13 (2020-06-15)
**Added**
- feat: log client/server IP and port
**Fixed**
- fix: avoid '.csv' been converted to '_csv'

View File

@@ -172,16 +172,31 @@ class HttpSession(requests.Session):
# timeout default to 120 seconds
kwargs.setdefault("timeout", 120)
# set stream to True, in order to get client/server IP/Port
kwargs["stream"] = True
start_timestamp = time.time()
response = self._send_request_safe_mode(method, url, **kwargs)
response_time_ms = round((time.time() - start_timestamp) * 1000, 2)
# get the length of the content, but if the argument stream is set to True, we take
# the size from the content-length header, in order to not trigger fetching of the body
if kwargs.get("stream", False):
content_size = int(dict(response.headers).get("content-length") or 0)
else:
content_size = len(response.content or "")
try:
client_ip, client_port = response.raw.connection.sock.getsockname()
self.data.address.client_ip = client_ip
self.data.address.client_port = client_port
logger.debug(f"client IP: {client_ip}, Port: {client_port}")
except AttributeError:
logger.warning(f"failed to get client address info!")
try:
server_ip, server_port = response.raw.connection.sock.getpeername()
self.data.address.server_ip = server_ip
self.data.address.server_port = server_port
logger.debug(f"server IP: {server_ip}, Port: {server_port}")
except AttributeError:
logger.warning(f"failed to get server address info!")
# get length of the response content
content_size = int(dict(response.headers).get("content-length") or 0)
# record the consumed time
self.data.stat.response_time_ms = response_time_ms

View File

@@ -66,10 +66,10 @@ if __name__ == "__main__":
def __ensure_absolute(path: Text) -> Text:
if path.startswith("./"):
# Linux/Darwin, hrun ./test.yml
path = path[len("./"):]
path = path[len("./") :]
elif path.startswith(".\\"):
# Windows, hrun .\\test.yml
path = path[len(".\\"):]
path = path[len(".\\") :]
path = ensure_path_sep(path)
project_meta = load_project_meta(path)

View File

@@ -110,6 +110,13 @@ class RequestStat(BaseModel):
elapsed_ms: float = 0
class AddressData(BaseModel):
client_ip: Text = "N/A"
client_port: int = 0
server_ip: Text = "N/A"
server_port: int = 0
class RequestData(BaseModel):
method: MethodEnum = MethodEnum.GET
url: Url
@@ -140,6 +147,7 @@ class SessionData(BaseModel):
# while when 30X redirect occurs, req_resps will contain multiple request & response
req_resps: List[ReqRespData] = []
stat: RequestStat = RequestStat()
address: AddressData = AddressData()
validators: Dict = {}