Skip to content

Commit f3f03ed

Browse files
authored
Merge pull request #274 from jmcconnell26/feature/jmcc-allow-custom-session-to-be-provided
feature/jmcc allow custom session to be provided
2 parents 49362b0 + 7447e0a commit f3f03ed

File tree

1 file changed

+26
-12
lines changed

1 file changed

+26
-12
lines changed

prometheus_api_client/prometheus_connect.py

+26-12
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import requests
1010
from requests.adapters import HTTPAdapter
1111
from requests.packages.urllib3.util.retry import Retry
12+
from requests import Session
1213

1314
from .exceptions import PrometheusApiClientException
1415

@@ -36,8 +37,9 @@ class PrometheusConnect:
3637
:param retry: (Retry) Retry adapter to retry on HTTP errors
3738
:param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth. See python
3839
requests library auth parameter for further explanation.
39-
:param proxy: (Optional) Proxies dictonary to enable connection through proxy.
40-
Example: {"http_proxy": "<ip_address/hostname:port>", "https_proxy": "<ip_address/hostname:port>"}
40+
:param proxy: (Optional) Proxies dictionary to enable connection through proxy.
41+
Example: {"http_proxy": "<ip_address/hostname:port>", "https_proxy": "<ip_address/hostname:port>"}
42+
:param session (Optional) Custom requests.Session to enable complex HTTP configuration
4143
"""
4244

4345
def __init__(
@@ -47,7 +49,8 @@ def __init__(
4749
disable_ssl: bool = False,
4850
retry: Retry = None,
4951
auth: tuple = None,
50-
proxy: dict = None
52+
proxy: dict = None,
53+
session: Session = None,
5154
):
5255
"""Functions as a Constructor for the class PrometheusConnect."""
5356
if url is None:
@@ -57,7 +60,6 @@ def __init__(
5760
self.url = url
5861
self.prometheus_host = urlparse(self.url).netloc
5962
self._all_metrics = None
60-
self.ssl_verification = not disable_ssl
6163

6264
if retry is None:
6365
retry = Retry(
@@ -68,7 +70,12 @@ def __init__(
6870

6971
self.auth = auth
7072

71-
self._session = requests.Session()
73+
if session is not None:
74+
self._session = session
75+
else:
76+
self._session = requests.Session()
77+
self._session.verify = not disable_ssl
78+
7279
if proxy is not None:
7380
self._session.proxies = proxy
7481
self._session.mount(self.url, HTTPAdapter(max_retries=retry))
@@ -83,10 +90,11 @@ def check_prometheus_connection(self, params: dict = None) -> bool:
8390
"""
8491
response = self._session.get(
8592
"{0}/".format(self.url),
86-
verify=self.ssl_verification,
93+
verify=self._session.verify,
8794
headers=self.headers,
8895
params=params,
8996
auth=self.auth,
97+
cert=self._session.cert
9098
)
9199
return response.ok
92100

@@ -119,10 +127,11 @@ def get_label_names(self, params: dict = None):
119127
params = params or {}
120128
response = self._session.get(
121129
"{0}/api/v1/labels".format(self.url),
122-
verify=self.ssl_verification,
130+
verify=self._session.verify,
123131
headers=self.headers,
124132
params=params,
125133
auth=self.auth,
134+
cert=self._session.cert
126135
)
127136

128137
if response.status_code == 200:
@@ -148,10 +157,11 @@ def get_label_values(self, label_name: str, params: dict = None):
148157
params = params or {}
149158
response = self._session.get(
150159
"{0}/api/v1/label/{1}/values".format(self.url, label_name),
151-
verify=self.ssl_verification,
160+
verify=self._session.verify,
152161
headers=self.headers,
153162
params=params,
154163
auth=self.auth,
164+
cert=self._session.cert
155165
)
156166

157167
if response.status_code == 200:
@@ -199,9 +209,10 @@ def get_current_metric_value(
199209
response = self._session.get(
200210
"{0}/api/v1/query".format(self.url),
201211
params={**{"query": query}, **params},
202-
verify=self.ssl_verification,
212+
verify=self._session.verify,
203213
headers=self.headers,
204214
auth=self.auth,
215+
cert=self._session.cert
205216
)
206217

207218
if response.status_code == 200:
@@ -290,9 +301,10 @@ def get_metric_range_data(
290301
},
291302
**params,
292303
},
293-
verify=self.ssl_verification,
304+
verify=self._session.verify,
294305
headers=self.headers,
295306
auth=self.auth,
307+
cert=self._session.cert
296308
)
297309
if response.status_code == 200:
298310
data += response.json()["data"]["result"]
@@ -388,9 +400,10 @@ def custom_query(self, query: str, params: dict = None):
388400
response = self._session.get(
389401
"{0}/api/v1/query".format(self.url),
390402
params={**{"query": query}, **params},
391-
verify=self.ssl_verification,
403+
verify=self._session.verify,
392404
headers=self.headers,
393405
auth=self.auth,
406+
cert=self._session.cert
394407
)
395408
if response.status_code == 200:
396409
data = response.json()["data"]["result"]
@@ -431,9 +444,10 @@ def custom_query_range(
431444
response = self._session.get(
432445
"{0}/api/v1/query_range".format(self.url),
433446
params={**{"query": query, "start": start, "end": end, "step": step}, **params},
434-
verify=self.ssl_verification,
447+
verify=self._session.verify,
435448
headers=self.headers,
436449
auth=self.auth,
450+
cert=self._session.cert
437451
)
438452
if response.status_code == 200:
439453
data = response.json()["data"]["result"]

0 commit comments

Comments
 (0)