Retry custom requests to Jenkins
Change-Id: I7fbe6434425216d06878aeb6b5727e3996148767
Related-Prod:#PROD-34500(PROD:34500)
diff --git a/tcp_tests/managers/jenkins/client.py b/tcp_tests/managers/jenkins/client.py
index a7c2315..b9f6a02 100644
--- a/tcp_tests/managers/jenkins/client.py
+++ b/tcp_tests/managers/jenkins/client.py
@@ -11,6 +11,37 @@
from requests.exceptions import ConnectionError
+def send_request(action, endpoint):
+ """
+ Wait 2 seconds time and retry requests if it fail with connection to
+ endpoint
+ Raises Connection exceptions after 5 unsuccessful steps
+
+ :param action: string
+ :param body: string, url to send request
+ :return: response
+ :raise ConnectionError after several unsuccessful connections
+ """
+ max_retries = 5
+ sleep_time_before_repeat = 2
+
+ step = 0
+ while step < max_retries:
+ try:
+ response = requests.Request(action, endpoint)
+ return response
+ except ConnectionError as error:
+ step = step + 1
+ print("Can't get {} due to error: {}.\nRetry {}/{}".format(
+ endpoint,
+ error,
+ step,
+ max_retries
+ ))
+ time.sleep(sleep_time_before_repeat)
+ raise ConnectionError
+
+
class JenkinsClient(object):
def __init__(self, host=None, username='admin', password='r00tme'):
@@ -181,7 +212,7 @@
PROGRESSIVE_CONSOLE_OUTPUT = (
'%(folder_url)sjob/%(short_name)s/%(build_id)d/'
'logText/progressiveText?start=%(start)d')
- req = requests.Request(
+ req = send_request(
'GET',
self.__client._build_url(PROGRESSIVE_CONSOLE_OUTPUT, locals()))
return(self.__client.jenkins_request(req))
@@ -204,7 +235,7 @@
else:
WORKFLOW_DESCRIPTION = (
'%(folder_url)sjob/%(short_name)s/%(build_id)s/wfapi/%(mode)s')
- req = requests.Request(
+ req = send_request(
'GET',
self.__client._build_url(WORKFLOW_DESCRIPTION, locals()))
response = self.__client.jenkins_open(req)
@@ -226,7 +257,7 @@
DOWNLOAD_URL = ('%(folder_url)sjob/%(short_name)s/%(build_id)s/'
'artifact/%(artifact_path)s')
- req = requests.Request(
+ req = send_request(
'GET',
self.__client._build_url(DOWNLOAD_URL, locals()))