|
4 | 4 | import re
|
5 | 5 | import sys
|
6 | 6 | import json
|
| 7 | +import time |
7 | 8 | import urllib.error
|
8 | 9 | import urllib.request
|
9 | 10 | from ldap3 import Server, Connection, ALL, ALL_ATTRIBUTES, SAFE_SYNC
|
|
27 | 28 | TEST_LDAP_TARGET_ID = 9
|
28 | 29 |
|
29 | 30 |
|
30 |
| -MIN_TIMEOUT = 5 |
31 |
| -MAX_TIMEOUT = 625 |
32 |
| -TIMEOUTMULTIPLE = 5 |
| 31 | +TIMEOUT_MIN = 5 |
| 32 | +TIMEOUT_MULTIPLE = 5 |
| 33 | +MAX_RETRIES = 5 |
33 | 34 |
|
34 | 35 |
|
35 | 36 | GET = "GET"
|
@@ -81,20 +82,27 @@ def call_api2(method, target, endpoint, authstr, **kw):
|
81 | 82 |
|
82 | 83 | def call_api3(method, target, data, endpoint, authstr, **kw):
|
83 | 84 | req = mkrequest(method, target, data, endpoint, authstr, **kw)
|
84 |
| - trying = True |
85 |
| - currentTimeout = MIN_TIMEOUT |
86 |
| - while trying: |
| 85 | + retries = 0 |
| 86 | + currentTimeout = TIMEOUT_MIN |
| 87 | + requestingStart = time.time() |
| 88 | + payload = None |
| 89 | + while payload == None: |
87 | 90 | try:
|
88 | 91 | resp = urllib.request.urlopen(req, timeout=currentTimeout)
|
| 92 | + if retries > 0: |
| 93 | + print(f"Succeeded for request {req.full_url} after {retries} retries.") |
89 | 94 | payload = resp.read()
|
90 |
| - trying = False |
91 | 95 | except urllib.error.URLError as exception:
|
92 |
| - if currentTimeout < MAX_TIMEOUT: |
93 |
| - currentTimeout *= TIMEOUTMULTIPLE |
| 96 | + if retries < MAX_RETRIES: |
| 97 | + print(f"Error: {exception} for request {req.full_url}, sleeping for {currentTimeout} seconds and retrying.") |
| 98 | + time.sleep(currentTimeout) |
| 99 | + currentTimeout *= TIMEOUT_MULTIPLE |
| 100 | + retries += 1 |
94 | 101 | else:
|
| 102 | + requestingStop = time.time() |
95 | 103 | sys.exit(
|
96 |
| - f"Exception raised after maximum number of retries and/or timeout {MAX_TIMEOUT} seconds reached. " |
97 |
| - + f"Exception reason: {exception.reason}.\n Request: {req.full_url}" |
| 104 | + f"Exception raised after maximum number of retries reached after {requestingStop - requestingStart} seconds. Retries: {retries}. " |
| 105 | + + f"Exception reason: {exception}.\n Request: {req.full_url}" |
98 | 106 | )
|
99 | 107 |
|
100 | 108 | return json.loads(payload) if payload else None
|
|
0 commit comments