9
9
import requests
10
10
from requests .adapters import HTTPAdapter
11
11
from requests .packages .urllib3 .util .retry import Retry
12
+ from requests import Session
12
13
13
14
from .exceptions import PrometheusApiClientException
14
15
@@ -36,8 +37,9 @@ class PrometheusConnect:
36
37
:param retry: (Retry) Retry adapter to retry on HTTP errors
37
38
:param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth. See python
38
39
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
41
43
"""
42
44
43
45
def __init__ (
@@ -47,7 +49,8 @@ def __init__(
47
49
disable_ssl : bool = False ,
48
50
retry : Retry = None ,
49
51
auth : tuple = None ,
50
- proxy : dict = None
52
+ proxy : dict = None ,
53
+ session : Session = None ,
51
54
):
52
55
"""Functions as a Constructor for the class PrometheusConnect."""
53
56
if url is None :
@@ -57,7 +60,6 @@ def __init__(
57
60
self .url = url
58
61
self .prometheus_host = urlparse (self .url ).netloc
59
62
self ._all_metrics = None
60
- self .ssl_verification = not disable_ssl
61
63
62
64
if retry is None :
63
65
retry = Retry (
@@ -68,7 +70,12 @@ def __init__(
68
70
69
71
self .auth = auth
70
72
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
+
72
79
if proxy is not None :
73
80
self ._session .proxies = proxy
74
81
self ._session .mount (self .url , HTTPAdapter (max_retries = retry ))
@@ -83,10 +90,11 @@ def check_prometheus_connection(self, params: dict = None) -> bool:
83
90
"""
84
91
response = self ._session .get (
85
92
"{0}/" .format (self .url ),
86
- verify = self .ssl_verification ,
93
+ verify = self ._session . verify ,
87
94
headers = self .headers ,
88
95
params = params ,
89
96
auth = self .auth ,
97
+ cert = self ._session .cert
90
98
)
91
99
return response .ok
92
100
@@ -119,10 +127,11 @@ def get_label_names(self, params: dict = None):
119
127
params = params or {}
120
128
response = self ._session .get (
121
129
"{0}/api/v1/labels" .format (self .url ),
122
- verify = self .ssl_verification ,
130
+ verify = self ._session . verify ,
123
131
headers = self .headers ,
124
132
params = params ,
125
133
auth = self .auth ,
134
+ cert = self ._session .cert
126
135
)
127
136
128
137
if response .status_code == 200 :
@@ -148,10 +157,11 @@ def get_label_values(self, label_name: str, params: dict = None):
148
157
params = params or {}
149
158
response = self ._session .get (
150
159
"{0}/api/v1/label/{1}/values" .format (self .url , label_name ),
151
- verify = self .ssl_verification ,
160
+ verify = self ._session . verify ,
152
161
headers = self .headers ,
153
162
params = params ,
154
163
auth = self .auth ,
164
+ cert = self ._session .cert
155
165
)
156
166
157
167
if response .status_code == 200 :
@@ -199,9 +209,10 @@ def get_current_metric_value(
199
209
response = self ._session .get (
200
210
"{0}/api/v1/query" .format (self .url ),
201
211
params = {** {"query" : query }, ** params },
202
- verify = self .ssl_verification ,
212
+ verify = self ._session . verify ,
203
213
headers = self .headers ,
204
214
auth = self .auth ,
215
+ cert = self ._session .cert
205
216
)
206
217
207
218
if response .status_code == 200 :
@@ -290,9 +301,10 @@ def get_metric_range_data(
290
301
},
291
302
** params ,
292
303
},
293
- verify = self .ssl_verification ,
304
+ verify = self ._session . verify ,
294
305
headers = self .headers ,
295
306
auth = self .auth ,
307
+ cert = self ._session .cert
296
308
)
297
309
if response .status_code == 200 :
298
310
data += response .json ()["data" ]["result" ]
@@ -388,9 +400,10 @@ def custom_query(self, query: str, params: dict = None):
388
400
response = self ._session .get (
389
401
"{0}/api/v1/query" .format (self .url ),
390
402
params = {** {"query" : query }, ** params },
391
- verify = self .ssl_verification ,
403
+ verify = self ._session . verify ,
392
404
headers = self .headers ,
393
405
auth = self .auth ,
406
+ cert = self ._session .cert
394
407
)
395
408
if response .status_code == 200 :
396
409
data = response .json ()["data" ]["result" ]
@@ -431,9 +444,10 @@ def custom_query_range(
431
444
response = self ._session .get (
432
445
"{0}/api/v1/query_range" .format (self .url ),
433
446
params = {** {"query" : query , "start" : start , "end" : end , "step" : step }, ** params },
434
- verify = self .ssl_verification ,
447
+ verify = self ._session . verify ,
435
448
headers = self .headers ,
436
449
auth = self .auth ,
450
+ cert = self ._session .cert
437
451
)
438
452
if response .status_code == 200 :
439
453
data = response .json ()["data" ]["result" ]
0 commit comments