Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 20 additions & 12 deletions pw/patchwork.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,9 @@ class PatchworkPostException(Exception):
class Patchwork(object):
def __init__(self, config):
self._session = requests.Session()
allowed_methods = Retry.DEFAULT_ALLOWED_METHODS | {'POST', 'PATCH'}
retry = Retry(connect=10, status=10, status_forcelist={502, 504},
backoff_factor=1)
allowed_methods=allowed_methods, backoff_factor=1)
adapter = HTTPAdapter(max_retries=retry)
self._session.mount('http://', adapter)
self._session.mount('https://', adapter)
Expand Down Expand Up @@ -61,6 +62,7 @@ def __init__(self, config):
def _request(self, url):
core.log_open_sec(f"Patchwork {self.server} request: {url}")
start = datetime.datetime.now()
core.log("Start", start)

try:
ret = self._session.get(url)
Expand All @@ -71,7 +73,7 @@ def _request(self, url):
core.log("Response data", ret.content.decode())
finally:
end = datetime.datetime.now()
core.log("Response time (sec)", (end - start).total_seconds())
core.log("Response time GET (sec)", (end - start).total_seconds())
core.log_end_sec()

return ret
Expand Down Expand Up @@ -148,8 +150,11 @@ def _get(self, req, api='1.1'):

def _post(self, req, headers, data, api='1.1'):
url = f'{self._proto}{self.server}/api/{api}/{req}'
core.log_open_sec(f"Patchwork {self.server} post: {url}")
start = datetime.datetime.now()
core.log("Start", start)

try:
core.log_open_sec(f"Patchwork {self.server} post: {url}")
ret = self._session.post(url, headers=headers, data=data)
core.log("Headers", headers)
core.log("Data", data)
Expand All @@ -159,21 +164,31 @@ def _post(self, req, headers, data, api='1.1'):
except json.decoder.JSONDecodeError:
core.log("Response data", ret.content.decode())
finally:
end = datetime.datetime.now()
core.log("Response time POST (sec)", (end - start).total_seconds())
core.log_end_sec()

return ret

# PATCH as in the HTTP method, not getting a patch
def _patch(self, req, headers, data, api='1.1'):
url = f'{self._proto}{self.server}/api/{api}/{req}'
core.log_open_sec(f"Patchwork {self.server} patch: {url}")
start = datetime.datetime.now()
core.log("Start", start)

try:
core.log_open_sec(f"Patchwork {self.server} post: {url}")
ret = self._session.patch(url, headers=headers, data=data)
core.log("Headers", headers)
core.log("Data", data)
core.log("Response", ret)
core.log("Response data", ret.json())
try:
core.log("Response data", ret.json())
except json.decoder.JSONDecodeError:
core.log("Response data", ret.content.decode())
finally:
end = datetime.datetime.now()
core.log("Response time PATCH (sec)", (end - start).total_seconds())
core.log_end_sec()

return ret
Expand Down Expand Up @@ -232,13 +247,6 @@ def post_check(self, patch, name, state, url, desc):
}

r = self._post(f'patches/{patch}/checks/', headers=headers, data=data)
for retry in range(3):
if r.status_code == 502 or r.status_code == 504:
# Timeout, let's wait 30 sec and retry, POST isn't retried by the lib.
time.sleep(30 << retry)
r = self._post(f'patches/{patch}/checks/', headers=headers, data=data)
else:
break
if r.status_code != 201:
raise PatchworkPostException(r)

Expand Down
Loading