Skip to content

Commit 2fd5519

Browse files
author
Kevin Reynolds
committed
retry and global r_session
1 parent a2eb35c commit 2fd5519

File tree

2 files changed

+42
-39
lines changed

2 files changed

+42
-39
lines changed

labapp/app/app.py

+20-39
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import requests
99
import markdown
1010
from ce import get_ce_info, get_ce_state
11-
from fetch import cloudapp_fetch, cloudapp_req_headers, cloudapp_res_headers
11+
from fetch import get_runner_session, cloudapp_fetch, cloudapp_req_headers, cloudapp_res_headers
1212

1313
app = Flask(__name__)
1414
app.config['ce_info'] = None
@@ -21,6 +21,9 @@
2121
cache = Cache(app)
2222
app.secret_key = "blahblahblah"
2323

24+
session = get_runner_session()
25+
session.headers.update({"User-Agent": "MCN-Lab-Runner/1.0"})
26+
2427
class LabException(Exception):
2528
"""lab exception"""
2629

@@ -206,10 +209,8 @@ def score():
206209
def ex_test():
207210
"""Example test"""
208211
try:
209-
s = requests.Session()
210-
s.headers.update({"User-Agent": "MCN-Lab-Runner/1.0"})
211212
url = f"https://foo.{app.config['base_url']}/"
212-
data = cloudapp_fetch(s, url, 7, 'info', {"foo": True})
213+
data = cloudapp_fetch(session, url, 7, 'info', {"foo": True})
213214
return jsonify(status='success', data=data)
214215
except (LabException, requests.RequestException, ValueError) as e:
215216
return jsonify(status='fail', error=str(e))
@@ -218,10 +219,8 @@ def ex_test():
218219
def ex_test2():
219220
"""Example test"""
220221
try:
221-
s = requests.Session()
222-
s.headers.update({"User-Agent": "MCN-Lab-Runner/1.0"})
223222
url = f"https://bar.{app.config['base_url']}/"
224-
data = cloudapp_fetch(s, url, 7, 'info', {"bar": True})
223+
data = cloudapp_fetch(session, url, 7, 'info', {"bar": True})
225224
return jsonify(status='success', data=data)
226225
except (LabException, requests.RequestException, ValueError) as e:
227226
return jsonify(status='fail', error=str(e))
@@ -231,13 +230,11 @@ def ex_test2():
231230
def lb_aws():
232231
"""Azure LB test"""
233232
try:
234-
s = requests.Session()
235-
s.headers.update({"User-Agent": "MCN-Lab-Runner/1.0"})
236233
ns = eph_ns()
237234
if not ns:
238235
raise LabException("Ephemeral NS not set")
239236
url = f"https://{ns}.{app.config['base_url']}"
240-
data = cloudapp_fetch(s, url, 7, 'env', 'AWS')
237+
data = cloudapp_fetch(session, url, 7, 'env', 'AWS')
241238
return jsonify(status='success', data=data)
242239
except (LabException, requests.RequestException, ValueError) as e:
243240
return jsonify(status='fail', error=str(e))
@@ -246,13 +243,11 @@ def lb_aws():
246243
def lb_azure():
247244
"""Azure LB test"""
248245
try:
249-
s = requests.Session()
250-
s.headers.update({"User-Agent": "MCN-Lab-Runner/1.0"})
251246
ns = eph_ns()
252247
if not ns:
253248
raise LabException("Ephemeral NS not set")
254249
url = f"https://{ns}.{app.config['base_url']}"
255-
data = cloudapp_fetch(s, url, 7, 'env', 'Azure')
250+
data = cloudapp_fetch(session, url, 7, 'env', 'Azure')
256251
return jsonify(status='success', data=data)
257252
except (LabException, requests.RequestException, ValueError) as e:
258253
return jsonify(status='fail', error=str(e))
@@ -261,16 +256,14 @@ def lb_azure():
261256
def route1():
262257
"""First Route Test"""
263258
try:
264-
s = requests.Session()
265-
s.headers.update({"User-Agent": "MCN-Lab-Runner/1.0"})
266259
ns = eph_ns()
267260
if not ns:
268261
raise LabException("Ephemeral NS not set")
269262
base_url = app.config['base_url']
270263
aws_url = f"https://{ns}.{base_url}/aws/raw"
271264
azure_url = f"https://{ns}.{base_url}/azure/raw"
272-
aws_data = cloudapp_fetch(s, aws_url, 7, 'env', 'AWS')
273-
azure_data = cloudapp_fetch(s, azure_url, 7, 'env', 'Azure')
265+
aws_data = cloudapp_fetch(session, aws_url, 7, 'env', 'AWS')
266+
azure_data = cloudapp_fetch(session, azure_url, 7, 'env', 'Azure')
274267
data = {
275268
"aws": aws_data,
276269
"azure": azure_data
@@ -283,18 +276,16 @@ def route1():
283276
def route2():
284277
"""First Route Test"""
285278
try:
286-
s = requests.Session()
287-
s.headers.update({"User-Agent": "MCN-Lab-Runner/1.0"})
288279
ns = eph_ns()
289280
if not ns:
290281
raise LabException("Ephemeral NS not set")
291282
base_url = app.config['base_url']
292283
aws_url = f"https://{ns}.{base_url}/"
293284
azure_url = f"https://{ns}.{base_url}/"
294-
s.headers["X-MCN-lab"] = "aws"
295-
aws_data = cloudapp_fetch(s, aws_url, 7, 'env', 'AWS')
296-
s.headers["X-MCN-lab"] = "azure"
297-
azure_data = cloudapp_fetch(s, azure_url, 7, 'env', 'Azure')
285+
session.headers["X-MCN-lab"] = "aws"
286+
aws_data = cloudapp_fetch(session, aws_url, 7, 'env', 'AWS')
287+
session.headers["X-MCN-lab"] = "azure"
288+
azure_data = cloudapp_fetch(session, azure_url, 7, 'env', 'Azure')
298289
data = {
299290
"aws": aws_data,
300291
"azure": azure_data
@@ -307,14 +298,12 @@ def route2():
307298
def manip1():
308299
"""First Manip Test"""
309300
try:
310-
s = requests.Session()
311-
s.headers.update({"User-Agent": "MCN-Lab-Runner/1.0"})
312301
ns = eph_ns()
313302
if not ns:
314303
raise LabException("Ephemeral NS not set")
315304
base_url = app.config['base_url']
316305
url = f"https://{ns}.{base_url}/aws/raw"
317-
r_data = cloudapp_fetch(s, url, 5, 'info', {"method": "GET", "path": "/raw"})
306+
r_data = cloudapp_fetch(session, url, 5, 'info', {"method": "GET", "path": "/raw"})
318307
return jsonify(status='success', data=r_data)
319308
except (LabException, requests.RequestException, ValueError) as e:
320309
return jsonify(status='fail', error=str(e))
@@ -323,15 +312,13 @@ def manip1():
323312
def manip2():
324313
"""Second Manip Test"""
325314
try:
326-
s = requests.Session()
327-
s.headers.update({"User-Agent": "MCN-Lab-Runner/1.0"})
328315
ns = eph_ns()
329316
if not ns:
330317
raise LabException("Ephemeral NS not set")
331318
base_url = app.config['base_url']
332319
url = f"https://{ns}.{base_url}/"
333320
t_headers = { "x-mcn-namespace": ns, "x-mcn-src-site": app.config["ce_info"]["site_name"]}
334-
r_data = cloudapp_req_headers(s, url, 7, t_headers)
321+
r_data = cloudapp_req_headers(session, url, 7, t_headers)
335322
return jsonify(status='success', data=r_data)
336323
except (LabException, requests.RequestException, ValueError) as e:
337324
return jsonify(status='fail', error=str(e))
@@ -340,8 +327,6 @@ def manip2():
340327
def manip3():
341328
"""Third Manip Test"""
342329
try:
343-
s = requests.Session()
344-
s.headers.update({"User-Agent": "MCN-Lab-Runner/1.0"})
345330
ns = eph_ns()
346331
if not ns:
347332
raise LabException("Ephemeral NS not set")
@@ -350,8 +335,8 @@ def manip3():
350335
azure_url = f"https://{ns}.{base_url}/azure/"
351336
aws_headers = { "x-mcn-dest-site": "student-awsnet" }
352337
azure_headers = { "x-mcn-dest-site": "student-azurenet" }
353-
aws_data = cloudapp_res_headers(s, aws_url, 7, aws_headers)
354-
azure_data = cloudapp_res_headers(s, azure_url, 7, azure_headers)
338+
aws_data = cloudapp_res_headers(session, aws_url, 7, aws_headers)
339+
azure_data = cloudapp_res_headers(session, azure_url, 7, azure_headers)
355340
data = {
356341
"aws": aws_data,
357342
"azure": azure_data
@@ -364,13 +349,11 @@ def manip3():
364349
def port1():
365350
"""Friend test"""
366351
try:
367-
s = requests.Session()
368-
s.headers.update({"User-Agent": "MCN-Lab-Runner/1.0"})
369352
ns = eph_ns()
370353
if not ns:
371354
raise LabException("Ephemeral NS not set")
372355
url = f"https://{ns}.{app.config['base_url']}/"
373-
data = cloudapp_fetch(s, url, 7, 'info', {"method": "GET", "path": "/"})
356+
data = cloudapp_fetch(session, url, 7, 'info', {"method": "GET", "path": "/"})
374357
return jsonify(status='success', data=data)
375358
except (LabException, requests.RequestException, ValueError) as e:
376359
return jsonify(status='fail', error=str(e))
@@ -379,13 +362,11 @@ def port1():
379362
def port2():
380363
"""Friend test"""
381364
try:
382-
s = requests.Session()
383-
s.headers.update({"User-Agent": "MCN-Lab-Runner/1.0"})
384365
data = request.get_json()
385366
print(data)
386367
eph_ns = data['userInput']
387368
url = f"https://{eph_ns}.{app.config['base_url']}/"
388-
data = cloudapp_fetch(s, url, 7, 'info', {"method": "GET", "path": "/"})
369+
data = cloudapp_fetch(session, url, 7, 'info', {"method": "GET", "path": "/"})
389370
return jsonify(status='success', data=data)
390371
except (LabException, requests.RequestException, ValueError) as e:
391372
return jsonify(status='fail', error=str(e))

labapp/app/fetch.py

+22
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,26 @@
11
from requests.structures import CaseInsensitiveDict
2+
import requests
3+
from requests.adapters import HTTPAdapter
4+
from urllib3.util.retry import Retry
5+
6+
def get_runner_session(
7+
retries=3,
8+
backoff_factor=0.3,
9+
status_forcelist=(500, 502, 504),
10+
session=None
11+
):
12+
session = session or requests.Session()
13+
retry = Retry(
14+
total=retries,
15+
read=retries,
16+
connect=retries,
17+
backoff_factor=backoff_factor,
18+
status_forcelist=status_forcelist,
19+
)
20+
adapter = HTTPAdapter(max_retries=retry)
21+
session.mount('http://', adapter)
22+
session.mount('https://', adapter)
23+
return session
224

325
def headers_cleaner(headers):
426
"""

0 commit comments

Comments
 (0)