16
16
from grafana_client .api import GrafanaApi
17
17
from grafana_client .client import GrafanaClientError , GrafanaUnauthorizedError
18
18
from munch import Munch , munchify
19
- from requests_cache import CachedSession
20
19
from tqdm import tqdm
21
20
from tqdm .contrib .logging import tqdm_logging_redirect
22
21
from urllib3 .exceptions import InsecureRequestWarning
23
22
24
23
from grafana_wtf import __appname__ , __version__
24
+ from grafana_wtf .compat import CachedSession
25
25
from grafana_wtf .model import (
26
26
DashboardDetails ,
27
27
DashboardExplorationItem ,
35
35
36
36
37
37
class GrafanaEngine :
38
- session = niquests .Session ()
38
+
39
+ # Configure a larger HTTP request pool.
40
+ # TODO: Review the pool settings and eventually adjust according to concurrency level or other parameters.
41
+ # https://urllib3.readthedocs.io/en/latest/advanced-usage.html#customizing-pool-behavior
42
+ # https://laike9m.com/blog/requests-secret-pool_connections-and-pool_maxsize,89/
43
+ session_args = dict (pool_connections = 100 , pool_maxsize = 100 , retries = 5 )
44
+
45
+ # The HTTP `User-Agent` header value.
46
+ user_agent = f"{ __appname__ } /{ __version__ } "
39
47
40
48
def __init__ (self , grafana_url , grafana_token = None ):
41
49
self .grafana_url = grafana_url
42
50
self .grafana_token = grafana_token
43
51
44
- self .grafana = None
45
- self .data = GrafanaDataModel ()
52
+ self .concurrency = 5
46
53
54
+ self .grafana = self .grafana_client_factory (self .grafana_url , grafana_token = self .grafana_token )
55
+ self .set_user_agent ()
56
+ self .data = GrafanaDataModel ()
47
57
self .finder = JsonPathFinder ()
48
58
49
59
self .taqadum = None
50
- self .concurrency = 5
51
-
52
60
self .debug = log .getEffectiveLevel () == logging .DEBUG
53
61
self .progressbar = not self .debug
54
62
63
+ def set_session (self , session ):
64
+ self .grafana .client .s = session
65
+
55
66
def enable_cache (self , expire_after = 60 , drop_cache = False ):
56
67
if expire_after is None :
57
68
log .info (f"Response cache will never expire (infinite caching)" )
@@ -60,10 +71,13 @@ def enable_cache(self, expire_after=60, drop_cache=False):
60
71
else :
61
72
log .info (f"Response cache will expire after { expire_after } seconds" )
62
73
63
- self .session = CachedSession (cache_name = __appname__ , expire_after = expire_after , use_cache_dir = True )
74
+ session = CachedSession (
75
+ cache_name = __appname__ , expire_after = expire_after , use_cache_dir = True , ** self .session_args
76
+ )
77
+ self .set_session (session )
78
+ self .set_user_agent ()
64
79
65
- cache = self .session .cache
66
- log .info (f"Response cache database location is: { cache .db_path } " )
80
+ log .info (f"Response cache database: { session .cache .db_path } " )
67
81
if drop_cache :
68
82
log .info ("Dropping response cache" )
69
83
self .clear_cache ()
@@ -102,23 +116,14 @@ def grafana_client_factory(cls, grafana_url, grafana_token=None):
102
116
url_path_prefix = url .path .lstrip ("/" ),
103
117
verify = verify ,
104
118
)
105
- if cls .session :
106
- user_agent = f"{ __appname__ } /{ __version__ } "
107
- cls .session .headers ["User-Agent" ] = user_agent
108
- grafana .client .s = cls .session
109
119
110
- return grafana
120
+ # Configure HTTP session to use a larger HTTP request pool.
121
+ grafana .client .s = niquests .Session (** cls .session_args )
111
122
112
- def setup (self ):
113
- self .grafana = self .grafana_client_factory (self .grafana_url , grafana_token = self .grafana_token )
114
-
115
- # Configure a larger HTTP request pool.
116
- # Todo: Review the pool settings and eventually adjust according to concurrency level or other parameters.
117
- # https://urllib3.readthedocs.io/en/latest/advanced-usage.html#customizing-pool-behavior
118
- # https://laike9m.com/blog/requests-secret-pool_connections-and-pool_maxsize,89/
119
- self .grafana .client .s = niquests .Session (pool_connections = 100 , pool_maxsize = 100 , retries = 5 )
123
+ return grafana
120
124
121
- return self
125
+ def set_user_agent (self ):
126
+ self .grafana .client .s .headers ["User-Agent" ] = self .user_agent
122
127
123
128
def start_progressbar (self , total ):
124
129
if self .progressbar :
0 commit comments