99import requests
1010from requests .adapters import HTTPAdapter
1111from requests .packages .urllib3 .util .retry import Retry
12+ from requests import Session
1213
1314from .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