Skip to content

Commit 920c44a

Browse files
committed
reduce client threads
-backport "Improve performance by reducing client request threads" #178
1 parent f032c0f commit 920c44a

File tree

2 files changed

+38
-6
lines changed

2 files changed

+38
-6
lines changed

source/queryHandler/PerfmonRESTclient.py

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,22 @@
3232
DEFAULT_HEADERS = {"Accept": "application/json",
3333
"Content-type": "application/json"}
3434

35+
session = None
36+
37+
38+
def get_session():
39+
global session
40+
if not session:
41+
session = requests.Session()
42+
return session
43+
44+
45+
def close_session():
46+
global session
47+
if session:
48+
session.close()
49+
session = None
50+
3551

3652
def getAuthHandler(keyName, keyValue):
3753
if not isinstance(keyName, bytes):
@@ -73,27 +89,39 @@ class perfHTTPrequestHelper(object):
7389
2. waits until the server response, finally forwards a result to the QueryHandler
7490
"""
7591

76-
def __init__(self, logger, reqdata=None, session=None):
77-
self.session = session or requests.Session()
92+
def __init__(self, logger, reqdata=None, caCert=False):
93+
self.session = get_session()
94+
self.caCert = caCert
7895
self.requestData = reqdata
7996
self.logger = logger
8097

8198
def doRequest(self):
8299
if self.requestData and isinstance(self.requestData, requests.Request):
100+
self.session.verify = self.caCert
83101
_prepRequest = self.session.prepare_request(self.requestData)
84102
try:
85103
res = self.session.send(_prepRequest)
86104
return res
105+
except requests.exceptions.ProxyError:
106+
close_session()
107+
self.logger.debug(f"doRequest __ ProxyError. Found configured proxies: {urllib.request.getproxies()}")
108+
res = requests.Response()
109+
res.status_code = 503
110+
res.reason = "Unable to connect to proxy"
111+
return res
87112
except requests.exceptions.ConnectionError:
113+
close_session()
88114
res = requests.Response()
89115
res.status_code = 503
90116
res.reason = "Connection refused from server"
91117
return res
92118
except requests.exceptions.RequestException as e:
119+
close_session()
93120
self.logger.debug('doRequest __ RequestException. Request data: {}, Response data: {}'.format(e.request, e.response))
94121
res = requests.Response()
95122
res.status_code = 404
96123
res.reason = "The request could not be processed from server"
97124
return res
98125
else:
126+
close_session()
99127
raise TypeError('doRequest __ Error: request data wrong format')

source/queryHandler/QueryHandler.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,10 @@ def __init__(self, query, res_json):
164164
self.rows = self.__parseRows()
165165

166166
self.index_cache = {} # (metric, id) -> row value index
167-
self.ids = self._findIdentifiers()
167+
self.ids = None
168168

169169
if self.query and len(self.query.measurements) > 0:
170+
self.ids = self._findIdentifiers()
170171
self._populate_index_cache()
171172
self._add_calculated_colunm_headers()
172173

@@ -513,9 +514,12 @@ def __do_RESTCall(self, endpoint, requestType='GET', params=None):
513514

514515
try:
515516
_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
517+
_reqData = createRequestDataObj(self.logger, requestType, endpoint,
518+
self.server, self.port, auth=_auth,
519+
params=params)
520+
_request = perfHTTPrequestHelper(self.logger,
521+
reqdata=_reqData,
522+
caCert=self.caCert)
519523
_response = _request.doRequest()
520524

521525
if _response.status_code == 200:

0 commit comments

Comments
 (0)