Skip to content

Commit 991e8f1

Browse files
authored
Merge pull request #178 from Helene/reuse_requests_session
Improve performance by reducing client request threads
2 parents 6f0bc45 + c7254ac commit 991e8f1

File tree

2 files changed

+28
-5
lines changed

2 files changed

+28
-5
lines changed

source/queryHandler/PerfmonRESTclient.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,21 @@
3939
DEFAULT_HEADERS = {"Accept": "application/json",
4040
"Content-type": "application/json"}
4141

42+
session = None
43+
44+
45+
def get_session():
46+
global session
47+
if not session:
48+
session = requests.Session()
49+
return session
50+
51+
52+
def close_session():
53+
global session
54+
if session:
55+
session.close()
56+
4257

4358
def getAuthHandler(keyName, keyValue):
4459
if not isinstance(keyName, bytes):
@@ -80,28 +95,33 @@ class perfHTTPrequestHelper(object):
8095
2. waits until the server response, finally forwards a result to the QueryHandler
8196
"""
8297

83-
def __init__(self, logger, reqdata=None, session=None):
84-
self.session = session or requests.Session()
98+
def __init__(self, logger, reqdata=None, caCert=False):
99+
self.session = get_session()
100+
self.caCert = caCert
85101
self.requestData = reqdata
86102
self.logger = logger
87103

88104
@cond_execution_time(enabled=analytics.inspect)
89105
def doRequest(self):
90106
if self.requestData and isinstance(self.requestData, requests.Request):
107+
self.session.verify = self.caCert
91108
_prepRequest = self.session.prepare_request(self.requestData)
92109
try:
93110
res = self.session.send(_prepRequest)
94111
return res
95112
except requests.exceptions.ConnectionError:
113+
close_session()
96114
res = requests.Response()
97115
res.status_code = 503
98116
res.reason = "Connection refused from server"
99117
return res
100118
except requests.exceptions.RequestException as e:
119+
close_session()
101120
self.logger.debug('doRequest __ RequestException. Request data: {}, Response data: {}'.format(e.request, e.response))
102121
res = requests.Response()
103122
res.status_code = 404
104123
res.reason = "The request could not be processed from server"
105124
return res
106125
else:
126+
close_session()
107127
raise TypeError('doRequest __ Error: request data wrong format')

source/queryHandler/QueryHandler.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -513,9 +513,12 @@ def __do_RESTCall(self, endpoint, requestType='GET', params=None):
513513

514514
try:
515515
_auth = getAuthHandler(*self.apiKeyData)
516-
_reqData = createRequestDataObj(self.logger, requestType, endpoint, self.server, self.port, auth=_auth, params=params)
517-
_request = perfHTTPrequestHelper(self.logger, reqdata=_reqData)
518-
_request.session.verify = self.caCert
516+
_reqData = createRequestDataObj(self.logger, requestType, endpoint,
517+
self.server, self.port, auth=_auth,
518+
params=params)
519+
_request = perfHTTPrequestHelper(self.logger,
520+
reqdata=_reqData,
521+
caCert=self.caCert)
519522
_response = _request.doRequest()
520523

521524
if _response.status_code == 200:

0 commit comments

Comments
 (0)