diff --git a/pw/patchwork.py b/pw/patchwork.py index e75a547f..37cddf0e 100644 --- a/pw/patchwork.py +++ b/pw/patchwork.py @@ -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) @@ -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) @@ -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 @@ -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) @@ -159,6 +164,8 @@ 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 @@ -166,14 +173,22 @@ def _post(self, req, headers, data, api='1.1'): # 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 @@ -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)