@@ -139,6 +139,17 @@ def test_get_label_names_method(self): # noqa D102
139139 self .assertEqual (len (labels ), 3 )
140140 self .assertEqual (labels , ["__name__" , "instance" , "job" ])
141141
142+ def test_get_series (self ): # noqa D102
143+ start_time = datetime .now () - timedelta (hours = 1 )
144+ end_time = datetime .now ()
145+ series = self .pc .get_series (start = start_time , end = end_time , params = {"match[]" : "up" })
146+ self .assertIsInstance (series , list )
147+ self .assertTrue (len (series ) > 0 , "no series data received from prometheus" )
148+ # Verify that each series entry is a dict with labels
149+ for series_entry in series :
150+ self .assertIsInstance (series_entry , dict )
151+ self .assertIn ("__name__" , series_entry )
152+
142153 def test_get_scrape_pools (self ): # noqa D102
143154 scrape_pools = self .pc .get_scrape_pools ()
144155 self .assertIsInstance (scrape_pools , list )
@@ -251,6 +262,10 @@ def test_broken_responses(self): # noqa D102
251262 self .pc .get_label_values ("label_name" )
252263 self .assertEqual ("HTTP Status Code 403 (b'BOOM!')" , str (exc .exception ))
253264
265+ with self .assertRaises (PrometheusApiClientException ) as exc :
266+ self .pc .get_series (start = datetime .now () - timedelta (hours = 1 ), end = datetime .now ())
267+ self .assertEqual ("HTTP Status Code 403 (b'BOOM!')" , str (exc .exception ))
268+
254269 with self .assertRaises (PrometheusApiClientException ) as exc :
255270 self .pc .get_current_metric_value ("metric" )
256271 self .assertEqual ("HTTP Status Code 403 (b'BOOM!')" , str (exc .exception ))
@@ -284,6 +299,25 @@ def test_all_metrics_method(self): # noqa D102
284299 request = handler .requests [0 ]
285300 self .assertEqual (request .path_url , "/api/v1/label/__name__/values" )
286301
302+
303+ def test_get_series_method (self ): # noqa D102
304+ series_payload = {"status" : "success" , "data" : [
305+ {"__name__" : "up" , "job" : "prometheus" , "instance" : "localhost:9090" },
306+ {"__name__" : "up" , "job" : "node" , "instance" : "localhost:9100" }
307+ ]}
308+
309+ with self .mock_response (series_payload ) as handler :
310+ start_time = datetime .now () - timedelta (hours = 1 )
311+ end_time = datetime .now ()
312+ result = self .pc .get_series (start = start_time , end = end_time )
313+ self .assertTrue (len (result ) > 0 )
314+ self .assertEqual (handler .call_count , 1 )
315+ request = handler .requests [0 ]
316+ self .assertTrue (request .path_url .startswith ("/api/v1/series" ))
317+ # Verify that start and end parameters are included
318+ self .assertIn ("start" , request .url )
319+ self .assertIn ("end" , request .url )
320+
287321 def test_get_label_names_method (self ): # noqa D102
288322 all_metrics_payload = {"status" : "success" , "data" : ["value1" , "value2" ]}
289323
0 commit comments