11from __future__ import annotations
2+
23import json
34import re
45from json import JSONDecodeError
5- from typing import Any , Dict , List
6+ from typing import Any
67
78import requests
89from kubernetes .dynamic import DynamicClient
10+ from ocp_resources .resource import get_client
911from ocp_resources .route import Route
10- from timeout_sampler import TimeoutExpiredError , TimeoutSampler
1112from simple_logger .logger import get_logger
12-
13- from ocp_resources .resource import get_client
14-
13+ from timeout_sampler import TimeoutExpiredError , TimeoutSampler
1514
1615TIMEOUT_2MIN = 2 * 60
1716TIMEOUT_10MIN = 10 * 60
1817
1918LOGGER = get_logger (name = __name__ )
2019
2120
22- class Prometheus ( object ) :
21+ class Prometheus :
2322 """
2423 For accessing Prometheus cluster metrics
2524
@@ -69,7 +68,7 @@ def _get_route(self) -> str:
6968 route = Route (namespace = self .namespace , name = self .resource_name , client = self .client ).instance .spec .host
7069 return f"https://{ route } "
7170
72- def _get_response (self , query : str ) -> Dict [str , Any ]:
71+ def _get_response (self , query : str ) -> dict [str , Any ]:
7372 response = requests .get (f"{ self .api_url } { query } " , headers = self .headers , verify = self .verify_ssl )
7473
7574 try :
@@ -81,7 +80,7 @@ def _get_response(self, query: str) -> Dict[str, Any]:
8180 )
8281 raise
8382
84- def query (self , query : str ) -> Dict [str , Any ]:
83+ def query (self , query : str ) -> dict [str , Any ]:
8584 """
8685 get the prometheus query result
8786
@@ -93,7 +92,7 @@ def query(self, query: str) -> Dict[str, Any]:
9392 """
9493 return self ._get_response (query = f"{ self .api_v1 } /query?query={ query } " )
9594
96- def get_all_alerts_by_alert_name (self , alert_name : str ) -> List [ Dict [str , Any ]]:
95+ def get_all_alerts_by_alert_name (self , alert_name : str ) -> list [ dict [str , Any ]]:
9796 """
9897 Get alert by alert name if it's an active alert
9998
@@ -107,13 +106,9 @@ def get_all_alerts_by_alert_name(self, alert_name: str) -> List[Dict[str, Any]]:
107106 list: list containing alert metrics
108107 """
109108 alerts = self .alerts ()
110- alert_list = []
111- for alert in alerts ["data" ]["alerts" ]:
112- if alert ["labels" ]["alertname" ] == alert_name :
113- alert_list .append (alert )
114- return alert_list
109+ return [alert for alert in alerts ["data" ]["alerts" ] if alert ["labels" ]["alertname" ] == alert_name ]
115110
116- def get_firing_alerts (self , alert_name : str ) -> List [ Dict [str , Any ]]:
111+ def get_firing_alerts (self , alert_name : str ) -> list [ dict [str , Any ]]:
117112 """
118113 get all the firing alerts from list of active alerts
119114 """
@@ -145,14 +140,17 @@ def get_scrape_interval(self) -> int:
145140 response = self ._get_response (query = f"{ self .api_v1 } /targets" )
146141 result = response .get ("data" , {}).get ("activeTargets" , [])
147142 for item in result :
148- if item and item .get ("labels" , {}).get ("job" ) == "prometheus-k8s" :
149- if scrape_interval := item .get ("scrapeInterval" ):
150- if scrape_interval_match := re .match (r"\d+" , scrape_interval ):
151- return int (scrape_interval_match .group ())
143+ if (
144+ item
145+ and item .get ("labels" , {}).get ("job" ) == "prometheus-k8s"
146+ and (scrape_interval := item .get ("scrapeInterval" ))
147+ and (scrape_interval_match := re .match (r"\d+" , scrape_interval ))
148+ ):
149+ return int (scrape_interval_match .group ())
152150
153151 return 30
154152
155- def query_sampler (self , query : str , timeout : int = TIMEOUT_2MIN ) -> List [Any ]:
153+ def query_sampler (self , query : str , timeout : int = TIMEOUT_2MIN ) -> list [Any ]:
156154 """
157155 Sample output for query function
158156
@@ -183,13 +181,13 @@ def query_sampler(self, query: str, timeout: int = TIMEOUT_2MIN) -> List[Any]:
183181
184182 return []
185183
186- def alerts (self ) -> Dict [str , Any ]:
184+ def alerts (self ) -> dict [str , Any ]:
187185 """
188186 get all the active alerts
189187 """
190188 return self ._get_response (query = f"{ self .api_v1 } /alerts" )
191189
192- def get_alerts_by_state (self , alert_name : str , state : str = "firing" ) -> List [ Dict [str , Any ]]:
190+ def get_alerts_by_state (self , alert_name : str , state : str = "firing" ) -> list [ dict [str , Any ]]:
193191 """
194192 get all the alerts from list of active alerts according the state
195193 """
@@ -198,7 +196,7 @@ def get_alerts_by_state(self, alert_name: str, state: str = "firing") -> List[Di
198196
199197 def wait_for_alert_by_state_sampler (
200198 self , alert_name : str , timeout : int = TIMEOUT_10MIN , state : str = "firing"
201- ) -> List [ Dict [str , Any ]]:
199+ ) -> list [ dict [str , Any ]]:
202200 """
203201 Sample output for an alert if found in the state provided in the args.
204202
0 commit comments